diff --git a/app/code/Magento/AdminNotification/Block/System/Messages.php b/app/code/Magento/AdminNotification/Block/System/Messages.php index 45614b1d1e22bcd8bf76f9568091964fa8ebf707..994d767e0d56f00a56d3b74d17b993eea8c99051 100644 --- a/app/code/Magento/AdminNotification/Block/System/Messages.php +++ b/app/code/Magento/AdminNotification/Block/System/Messages.php @@ -120,11 +120,8 @@ class Messages extends \Magento\Backend\Block\Template return $this->jsonHelper->jsonEncode( [ 'systemMessageDialog' => [ - 'autoOpen' => false, - 'width' => '75%', - 'modal' => true, - 'minHeight' => '0', - 'dialogClass' => 'ui-dialog-active ui-popup-message', + 'buttons' => [], + 'modalClass' => 'ui-dialog-active ui-popup-message modal-system-messages', 'ajaxUrl' => $this->_getMessagesUrl() ], ] diff --git a/app/code/Magento/AdminNotification/Model/Feed.php b/app/code/Magento/AdminNotification/Model/Feed.php index 0b4a38a7a6afdb4d92f273e7c0ba9749ccb99901..d6b90c44cff773533b2e3f6e01e28639f0a8ec72 100644 --- a/app/code/Magento/AdminNotification/Model/Feed.php +++ b/app/code/Magento/AdminNotification/Model/Feed.php @@ -72,7 +72,7 @@ class Feed extends \Magento\Framework\Model\AbstractModel * @param \Magento\Framework\App\DeploymentConfig $deploymentConfig * @param \Magento\Framework\App\ProductMetadataInterface $productMetadata * @param \Magento\Framework\UrlInterface $urlBuilder - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -86,7 +86,7 @@ class Feed extends \Magento\Framework\Model\AbstractModel \Magento\Framework\App\DeploymentConfig $deploymentConfig, \Magento\Framework\App\ProductMetadataInterface $productMetadata, \Magento\Framework\UrlInterface $urlBuilder, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/AdminNotification/Model/ResourceModel/Grid/Collection.php b/app/code/Magento/AdminNotification/Model/ResourceModel/Grid/Collection.php index 548cb6dc446142a8c77971a7ece4998747e60355..496e94ac27d9c33ce2179d73f93eeecdb69acdf0 100644 --- a/app/code/Magento/AdminNotification/Model/ResourceModel/Grid/Collection.php +++ b/app/code/Magento/AdminNotification/Model/ResourceModel/Grid/Collection.php @@ -18,7 +18,7 @@ class Collection extends \Magento\AdminNotification\Model\ResourceModel\Inbox\Co /** * Add remove filter * - * @return \Magento\AdminNotification\Model\ResourceModel\Grid\Collection|\Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection + * @return \Magento\AdminNotification\Model\ResourceModel\Grid\Collection|\Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection */ protected function _initSelect() { diff --git a/app/code/Magento/AdminNotification/Model/ResourceModel/Inbox.php b/app/code/Magento/AdminNotification/Model/ResourceModel/Inbox.php index 76ebfa2ed614ac900e3a04fbda35e74880d4cb91..44b5d1d0cca4fa27ff356dda520b482a40e76616 100644 --- a/app/code/Magento/AdminNotification/Model/ResourceModel/Inbox.php +++ b/app/code/Magento/AdminNotification/Model/ResourceModel/Inbox.php @@ -10,7 +10,7 @@ namespace Magento\AdminNotification\Model\ResourceModel; * * @author Magento Core Team <core@magentocommerce.com> */ -class Inbox extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Inbox extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * AdminNotification Resource initialization diff --git a/app/code/Magento/AdminNotification/Model/ResourceModel/Inbox/Collection.php b/app/code/Magento/AdminNotification/Model/ResourceModel/Inbox/Collection.php index 062beee8bd9c98eb577ba00410f194d1b8fdafc3..f9927bd12a59011b374faa22230b1436fbc6c885 100644 --- a/app/code/Magento/AdminNotification/Model/ResourceModel/Inbox/Collection.php +++ b/app/code/Magento/AdminNotification/Model/ResourceModel/Inbox/Collection.php @@ -10,7 +10,7 @@ namespace Magento\AdminNotification\Model\ResourceModel\Inbox; * * @author Magento Core Team <core@magentocommerce.com> */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Resource collection initialization diff --git a/app/code/Magento/AdminNotification/Model/ResourceModel/Inbox/Collection/Critical.php b/app/code/Magento/AdminNotification/Model/ResourceModel/Inbox/Collection/Critical.php index 042f8967d42fd196d68e4cab69bd51b608bb1eda..bf145d654db8562c391c6415bcf6f223bbc081c5 100644 --- a/app/code/Magento/AdminNotification/Model/ResourceModel/Inbox/Collection/Critical.php +++ b/app/code/Magento/AdminNotification/Model/ResourceModel/Inbox/Collection/Critical.php @@ -7,7 +7,7 @@ */ namespace Magento\AdminNotification\Model\ResourceModel\Inbox\Collection; -class Critical extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Critical extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Resource collection initialization diff --git a/app/code/Magento/AdminNotification/Model/ResourceModel/System/Message.php b/app/code/Magento/AdminNotification/Model/ResourceModel/System/Message.php index 986ff7ef3c0420f84c212c732f347e3c0edd8fc2..a3b9aac4305449fb5738e002fee9f3a53cbf0caf 100644 --- a/app/code/Magento/AdminNotification/Model/ResourceModel/System/Message.php +++ b/app/code/Magento/AdminNotification/Model/ResourceModel/System/Message.php @@ -5,7 +5,7 @@ */ namespace Magento\AdminNotification\Model\ResourceModel\System; -class Message extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Message extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Flag that notifies whether Primary key of table is auto-incremeted diff --git a/app/code/Magento/AdminNotification/Model/ResourceModel/System/Message/Collection.php b/app/code/Magento/AdminNotification/Model/ResourceModel/System/Message/Collection.php index a2a5a0f490efdb5a93e5ca9ba5f300aa0d7dc360..d8b8bfc2533326fa2f1a9b3bf209ccf3e504ce0b 100644 --- a/app/code/Magento/AdminNotification/Model/ResourceModel/System/Message/Collection.php +++ b/app/code/Magento/AdminNotification/Model/ResourceModel/System/Message/Collection.php @@ -5,7 +5,7 @@ */ namespace Magento\AdminNotification\Model\ResourceModel\System\Message; -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * System message list @@ -28,7 +28,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab * @param \Magento\Framework\Event\ManagerInterface $eventManager * @param \Magento\Framework\Notification\MessageList $messageList * @param mixed $connection - * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource + * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource */ public function __construct( \Magento\Framework\Data\Collection\EntityFactory $entityFactory, @@ -37,7 +37,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab \Magento\Framework\Event\ManagerInterface $eventManager, \Magento\Framework\Notification\MessageList $messageList, \Magento\Framework\DB\Adapter\AdapterInterface $connection = null, - \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null + \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null ) { $this->_messageList = $messageList; parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource); diff --git a/app/code/Magento/AdminNotification/Model/ResourceModel/System/Message/Collection/Synchronized.php b/app/code/Magento/AdminNotification/Model/ResourceModel/System/Message/Collection/Synchronized.php index caaf95faa6fea6f26d183066cbaa44e94fe75114..2c070d3140f3bc7e18098b962ecc0b04f1ae4f80 100644 --- a/app/code/Magento/AdminNotification/Model/ResourceModel/System/Message/Collection/Synchronized.php +++ b/app/code/Magento/AdminNotification/Model/ResourceModel/System/Message/Collection/Synchronized.php @@ -17,7 +17,7 @@ class Synchronized extends \Magento\AdminNotification\Model\ResourceModel\System /** * Store new messages in database and remove outdated messages * - * @return $this|\Magento\Framework\Model\ModelResource\Db\AbstractDb + * @return $this|\Magento\Framework\Model\ResourceModel\Db\AbstractDb */ public function _afterLoad() { diff --git a/app/code/Magento/AdminNotification/etc/adminhtml/events.xml b/app/code/Magento/AdminNotification/etc/adminhtml/events.xml index c63c602ed4279ffeb443f9628d9b7e776ae8d144..b17de13236b87234934bac60411973ddabe5401a 100644 --- a/app/code/Magento/AdminNotification/etc/adminhtml/events.xml +++ b/app/code/Magento/AdminNotification/etc/adminhtml/events.xml @@ -7,6 +7,6 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="controller_action_predispatch"> - <observer name="adminnotification" instance="Magento\AdminNotification\Observer\PredispathAdminActionControllerObserver" method="execute" /> + <observer name="adminnotification" instance="Magento\AdminNotification\Observer\PredispathAdminActionControllerObserver" /> </event> </config> diff --git a/app/code/Magento/AdminNotification/view/adminhtml/templates/system/messages/popup.phtml b/app/code/Magento/AdminNotification/view/adminhtml/templates/system/messages/popup.phtml index 589c26fa8c3734da1a7770f3b589e18b92cc2944..5df9af8b4cce5ea1e900014e15c03a1b733c5506 100644 --- a/app/code/Magento/AdminNotification/view/adminhtml/templates/system/messages/popup.phtml +++ b/app/code/Magento/AdminNotification/view/adminhtml/templates/system/messages/popup.phtml @@ -9,8 +9,8 @@ ?> <?php /** @var $block \Magento\AdminNotification\Block\System\Messages\UnreadMessagePopup */ ?> -<div id="system_messages_list" title="<?php echo $block->escapeHtml($block->getPopupTitle()); ?>"> - <ul class="message-system-list"> +<div style="display:none" id="system_messages_list" data-role="system_messages_list" title="<?php echo $block->escapeHtml($block->getPopupTitle()); ?>"> + <ul class="message-system-list messages"> <?php foreach ($block->getUnreadMessages() as $message): ?> <li class="message message-warning <?php /* @escapeNotVerified */ echo $block->getItemClass($message);?>"> <?php /* @escapeNotVerified */ echo $message->getText();?> @@ -22,29 +22,17 @@ <script> require([ "jquery", - "jquery/ui" + "Magento_Ui/js/modal/modal" ], function($){ - - $(function() { - $("#system_messages_list").dialog({ - autoOpen: true, - resizable: false, - width: '75%', - modal: true, - minHeight: '0', - dialogClass: 'ui-popup-message', - position: { - my: 'left+12.5% top', - at: 'center top', - of: 'body' - }, - open: function() { - $(this).closest('.ui-dialog').addClass('ui-dialog-active'); - - var topMargin = $(this).closest('.ui-dialog').children('.ui-dialog-titlebar').outerHeight() + 10; - $(this).closest('.ui-dialog').css('margin-top', topMargin); - } + if (this.modal) { + this.modal.html($('[data-role="system_messages_list"]').html()); + } else { + this.modal = $('[data-role="system_messages_list"]').modal({ + modalClass: 'modal-system-messages ui-popup-message', + type: 'popup', + buttons: [] }); - }); + } + this.modal.modal('openModal'); }); </script> diff --git a/app/code/Magento/AdminNotification/view/adminhtml/web/system/notification.js b/app/code/Magento/AdminNotification/view/adminhtml/web/system/notification.js index 95a228c6fa99c671f144664535cc076d6923ff4b..8b5cf5b0476c6b006bf384aa5891c33d3fc40e6a 100644 --- a/app/code/Magento/AdminNotification/view/adminhtml/web/system/notification.js +++ b/app/code/Magento/AdminNotification/view/adminhtml/web/system/notification.js @@ -5,12 +5,14 @@ define([ 'jquery', 'mage/template', - 'jquery/ui' + 'jquery/ui', + 'Magento_Ui/js/modal/modal' ], function ($, mageTemplate) { 'use strict'; - $.widget('mage.systemMessageDialog', $.ui.dialog, { + $.widget('mage.systemMessageDialog', $.mage.modal, { options: { + modalClass: 'modal-system-messages', systemMessageTemplate: '<% _.each(data.items, function(item) { %>' + '<li class="message message-warning <% if (item.severity == 1) { %>error<% } else { %>warning<% } %>">' + @@ -19,8 +21,14 @@ define([ '<% }); %>' }, - open: function (severity) { + _create: function() { + this.options.title = $('#message-system-all').attr('title'); + this._super(); + }, + + openModal: function (severity) { var superMethod = $.proxy(this._super, this); + //this.modal.options $.ajax({ url: this.options.ajaxUrl, @@ -47,16 +55,19 @@ define([ }, this)); return this; + }, + closeModal: function () { + this._super(); } }); $(document).ready(function () { $('#system_messages .message-system-short .error').on('click', function () { - $('#message-system-all').systemMessageDialog('open', 1); + $('#message-system-all').systemMessageDialog('openModal', 1); }); $('#system_messages .message-system-short .warning').on('click', function () { - $('#message-system-all').systemMessageDialog('open', 2); + $('#message-system-all').systemMessageDialog('openModal', 2); }); }); diff --git a/app/code/Magento/Authorization/Model/ResourceModel/Permissions/Collection.php b/app/code/Magento/Authorization/Model/ResourceModel/Permissions/Collection.php index c9d4e6f72b6b164977f49dca9e887a4298565930..604493daa0807b86ad976996dafb8a48e1013beb 100644 --- a/app/code/Magento/Authorization/Model/ResourceModel/Permissions/Collection.php +++ b/app/code/Magento/Authorization/Model/ResourceModel/Permissions/Collection.php @@ -10,7 +10,7 @@ namespace Magento\Authorization\Model\ResourceModel\Permissions; * * @author Magento Core Team <core@magentocommerce.com> */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Initialize resource diff --git a/app/code/Magento/Authorization/Model/ResourceModel/Role.php b/app/code/Magento/Authorization/Model/ResourceModel/Role.php index 185712304f613505601bac387a952093b68ab530..5621e0c75392cb9930ee6803095049f49906d955 100644 --- a/app/code/Magento/Authorization/Model/ResourceModel/Role.php +++ b/app/code/Magento/Authorization/Model/ResourceModel/Role.php @@ -10,7 +10,7 @@ use Magento\Authorization\Model\Acl\Role\User as RoleUser; /** * Admin role resource model */ -class Role extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Role extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Rule table @@ -32,13 +32,13 @@ class Role extends \Magento\Framework\Model\ModelResource\Db\AbstractDb protected $dateTime; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Framework\App\CacheInterface $cache * @param \Magento\Framework\Stdlib\DateTime $dateTime * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Framework\App\CacheInterface $cache, \Magento\Framework\Stdlib\DateTime $dateTime, $connectionName = null diff --git a/app/code/Magento/Authorization/Model/ResourceModel/Role/Collection.php b/app/code/Magento/Authorization/Model/ResourceModel/Role/Collection.php index c9a1de7c002c9896018b127a9af9c1fb4ebf219e..f5f47176a85e5bc758ff45a70f17403eb584cdf4 100644 --- a/app/code/Magento/Authorization/Model/ResourceModel/Role/Collection.php +++ b/app/code/Magento/Authorization/Model/ResourceModel/Role/Collection.php @@ -10,7 +10,7 @@ use Magento\Authorization\Model\Acl\Role\Group as RoleGroup; /** * Admin role collection */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Initialize resource model diff --git a/app/code/Magento/Authorization/Model/ResourceModel/Rules.php b/app/code/Magento/Authorization/Model/ResourceModel/Rules.php index 07a1f55d20f692fa4568bb482e9d9a032e00071c..e888c6e4755d470a4c5fd92e7b004f4296c88dd5 100644 --- a/app/code/Magento/Authorization/Model/ResourceModel/Rules.php +++ b/app/code/Magento/Authorization/Model/ResourceModel/Rules.php @@ -11,7 +11,7 @@ namespace Magento\Authorization\Model\ResourceModel; /** * Admin rule resource model */ -class Rules extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Rules extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Root ACL resource @@ -38,7 +38,7 @@ class Rules extends \Magento\Framework\Model\ModelResource\Db\AbstractDb protected $_logger; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Framework\Acl\Builder $aclBuilder * @param \Psr\Log\LoggerInterface $logger * @param \Magento\Framework\Acl\RootResource $rootResource @@ -46,7 +46,7 @@ class Rules extends \Magento\Framework\Model\ModelResource\Db\AbstractDb * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Framework\Acl\Builder $aclBuilder, \Psr\Log\LoggerInterface $logger, \Magento\Framework\Acl\RootResource $rootResource, diff --git a/app/code/Magento/Authorization/Model/ResourceModel/Rules/Collection.php b/app/code/Magento/Authorization/Model/ResourceModel/Rules/Collection.php index fcd6beb45c68a9cabb340de0fc45ba3b3d920199..6d8d56633658efcc97108c2293f86eee8eedb37c 100644 --- a/app/code/Magento/Authorization/Model/ResourceModel/Rules/Collection.php +++ b/app/code/Magento/Authorization/Model/ResourceModel/Rules/Collection.php @@ -10,7 +10,7 @@ namespace Magento\Authorization\Model\ResourceModel\Rules; * * @author Magento Core Team <core@magentocommerce.com> */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Initialize resource model diff --git a/app/code/Magento/Authorizenet/Model/Authorizenet.php b/app/code/Magento/Authorizenet/Model/Authorizenet.php index ebd4dd0d3f1aa69546e0f367e870ae265ae33af3..b35e4f4c39911df89d553ef98ad77eba768ccf3c 100644 --- a/app/code/Magento/Authorizenet/Model/Authorizenet.php +++ b/app/code/Magento/Authorizenet/Model/Authorizenet.php @@ -5,7 +5,7 @@ */ namespace Magento\Authorizenet\Model; -use Magento\Payment\Model\Method\Logger; +use Magento\Authorizenet\Model\TransactionService; /** * @SuppressWarnings(PHPMD.TooManyFields) @@ -19,11 +19,6 @@ abstract class Authorizenet extends \Magento\Payment\Model\Method\Cc */ const CGI_URL = 'https://secure.authorize.net/gateway/transact.dll'; - /** - * Transaction Details gateway url - */ - const CGI_URL_TD = 'https://apitest.authorize.net/xml/v1/request.api'; - const REQUEST_METHOD_CC = 'CC'; const REQUEST_TYPE_AUTH_CAPTURE = 'AUTH_CAPTURE'; @@ -56,8 +51,6 @@ abstract class Authorizenet extends \Magento\Payment\Model\Method\Cc const RESPONSE_REASON_CODE_PENDING_REVIEW_DECLINED = 254; - const PAYMENT_UPDATE_STATUS_CODE_SUCCESS = 'Ok'; - /** * Transaction fraud state key */ @@ -93,22 +86,17 @@ abstract class Authorizenet extends \Magento\Payment\Model\Method\Cc protected $responseFactory; /** - * Stored information about transaction - * - * @var array + * @var \Magento\Authorizenet\Model\TransactionService; */ - protected $transactionDetails = []; + protected $transactionService; /** - * {@inheritdoc} + * Fields that should be replaced in debug with '***' + * + * @var array */ protected $_debugReplacePrivateDataKeys = ['merchantAuthentication', 'x_login']; - /** - * @var \Magento\Framework\Xml\Security - */ - protected $xmlSecurityHelper; - /** * @param \Magento\Framework\Model\Context $context * @param \Magento\Framework\Registry $registry @@ -122,8 +110,8 @@ abstract class Authorizenet extends \Magento\Payment\Model\Method\Cc * @param \Magento\Authorizenet\Helper\Data $dataHelper * @param \Magento\Authorizenet\Model\Request\Factory $requestFactory * @param \Magento\Authorizenet\Model\Response\Factory $responseFactory - * @param \Magento\Framework\Xml\Security $xmlSecurityHelper - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Authorizenet\Model\TransactionService $transactionService + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -141,15 +129,15 @@ abstract class Authorizenet extends \Magento\Payment\Model\Method\Cc \Magento\Authorizenet\Helper\Data $dataHelper, \Magento\Authorizenet\Model\Request\Factory $requestFactory, \Magento\Authorizenet\Model\Response\Factory $responseFactory, - \Magento\Framework\Xml\Security $xmlSecurityHelper, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + TransactionService $transactionService, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { $this->dataHelper = $dataHelper; $this->requestFactory = $requestFactory; $this->responseFactory = $responseFactory; - $this->xmlSecurityHelper = $xmlSecurityHelper; + $this->transactionService = $transactionService; parent::__construct( $context, @@ -216,7 +204,7 @@ abstract class Authorizenet extends \Magento\Payment\Model\Method\Cc */ public function fetchTransactionFraudDetails($transactionId) { - $responseXmlDocument = $this->getTransactionDetails($transactionId); + $responseXmlDocument = $this->transactionService->getTransactionDetails($this, $transactionId); $response = new \Magento\Framework\DataObject(); if (empty($responseXmlDocument->transaction->FDSFilters->FDSFilter)) { @@ -443,114 +431,4 @@ abstract class Authorizenet extends \Magento\Payment\Model\Method\Cc { return $payment->getAdditionalInformation(self::GATEWAY_ACTIONS_LOCKED_STATE_KEY); } - - /** - * This function returns full transaction details for a specified transaction ID. - * - * @param string $transactionId - * @return \Magento\Framework\DataObject - * @throws \Magento\Framework\Exception\LocalizedException - * @link http://www.authorize.net/support/ReportingGuide_XML.pdf - * @link http://developer.authorize.net/api/transaction_details/ - */ - protected function getTransactionResponse($transactionId) - { - $responseXmlDocument = $this->getTransactionDetails($transactionId); - - $response = new \Magento\Framework\DataObject(); - $response->setXResponseCode((string)$responseXmlDocument->transaction->responseCode) - ->setXResponseReasonCode((string)$responseXmlDocument->transaction->responseReasonCode) - ->setTransactionStatus((string)$responseXmlDocument->transaction->transactionStatus); - - return $response; - } - - /** - * Load transaction details - * - * @param string $transactionId - * @return \Magento\Framework\Simplexml\Element - * @throws \Magento\Framework\Exception\LocalizedException - */ - protected function loadTransactionDetails($transactionId) - { - $requestBody = sprintf( - '<?xml version="1.0" encoding="utf-8"?>' . - '<getTransactionDetailsRequest xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd">' . - '<merchantAuthentication><name>%s</name><transactionKey>%s</transactionKey></merchantAuthentication>' . - '<transId>%s</transId>' . - '</getTransactionDetailsRequest>', - $this->getConfigData('login'), - $this->getConfigData('trans_key'), - $transactionId - ); - - $client = new \Magento\Framework\HTTP\ZendClient(); - $url = $this->getConfigData('cgi_url_td') ?: self::CGI_URL_TD; - $client->setUri($url); - $client->setConfig(['timeout' => 45]); - $client->setHeaders(['Content-Type: text/xml']); - $client->setMethod(\Zend_Http_Client::POST); - $client->setRawData($requestBody); - - $debugData = ['url' => $url, 'request' => $this->removePrivateDataFromXml($requestBody)]; - - try { - $responseBody = $client->request()->getBody(); - if (!$this->xmlSecurityHelper->scan($responseBody)) { - $this->_logger->critical('Attempt loading of external XML entities in response from Authorizenet.'); - throw new \Exception(); - } - $debugData['response'] = $responseBody; - libxml_use_internal_errors(true); - $responseXmlDocument = new \Magento\Framework\Simplexml\Element($responseBody); - libxml_use_internal_errors(false); - } catch (\Exception $e) { - throw new \Magento\Framework\Exception\LocalizedException( - __('Unable to get transaction details. Try again later.') - ); - } finally { - $this->_debug($debugData); - } - - if (!isset($responseXmlDocument->messages->resultCode) - || $responseXmlDocument->messages->resultCode != static::PAYMENT_UPDATE_STATUS_CODE_SUCCESS - ) { - throw new \Magento\Framework\Exception\LocalizedException( - __('Unable to get transaction details. Try again later.') - ); - } - - $this->transactionDetails[$transactionId] = $responseXmlDocument; - return $responseXmlDocument; - } - - /** - * Get transaction information - * - * @param string $transactionId - * @return \Magento\Framework\Simplexml\Element - */ - protected function getTransactionDetails($transactionId) - { - return isset($this->transactionDetails[$transactionId]) - ? $this->transactionDetails[$transactionId] - : $this->loadTransactionDetails($transactionId); - } - - /** - * Remove nodes with private data from XML string - * - * Uses values from $_debugReplacePrivateDataKeys property - * - * @param string $xml - * @return string - */ - protected function removePrivateDataFromXml($xml) - { - foreach ($this->getDebugReplacePrivateDataKeys() as $key) { - $xml = preg_replace(sprintf('~(?<=<%s>).*?(?=</%s>)~', $key, $key), Logger::DEBUG_KEYS_MASK, $xml); - } - return $xml; - } } diff --git a/app/code/Magento/Authorizenet/Model/Directpost.php b/app/code/Magento/Authorizenet/Model/Directpost.php index 883e855ffa125ec509f1d0922cdc8c040155198e..bbfcd0f7d6e128fb7d0e5d0740223ef42282c469 100644 --- a/app/code/Magento/Authorizenet/Model/Directpost.php +++ b/app/code/Magento/Authorizenet/Model/Directpost.php @@ -5,6 +5,7 @@ */ namespace Magento\Authorizenet\Model; +use Magento\Authorizenet\Model\TransactionService; use Magento\Payment\Model\Method\ConfigInterface; use Magento\Payment\Model\Method\TransparentInterface; use Magento\Sales\Model\Order\Email\Sender\OrderSender; @@ -128,15 +129,15 @@ class Directpost extends \Magento\Authorizenet\Model\Authorizenet implements Tra * @param \Magento\Framework\Module\ModuleListInterface $moduleList * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate * @param \Magento\Authorizenet\Helper\Data $dataHelper - * @param \Magento\Authorizenet\Model\Directpost\Request\Factory $requestFactory - * @param \Magento\Authorizenet\Model\Directpost\Response\Factory $responseFactory - * @param \Magento\Framework\Xml\Security $xmlSecurityHelper + * @param Directpost\Request\Factory $requestFactory + * @param Directpost\Response\Factory $responseFactory + * @param \Magento\Authorizenet\Model\TransactionService $transactionService * @param \Magento\Sales\Model\OrderFactory $orderFactory * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param \Magento\Quote\Model\QuoteRepository $quoteRepository - * @param \Magento\Sales\Model\Order\Email\Sender\OrderSender $orderSender + * @param OrderSender $orderSender * @param \Magento\Sales\Api\TransactionRepositoryInterface $transactionRepository - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -154,13 +155,13 @@ class Directpost extends \Magento\Authorizenet\Model\Authorizenet implements Tra \Magento\Authorizenet\Helper\Data $dataHelper, \Magento\Authorizenet\Model\Directpost\Request\Factory $requestFactory, \Magento\Authorizenet\Model\Directpost\Response\Factory $responseFactory, - \Magento\Framework\Xml\Security $xmlSecurityHelper, + TransactionService $transactionService, \Magento\Sales\Model\OrderFactory $orderFactory, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Quote\Model\QuoteRepository $quoteRepository, \Magento\Sales\Model\Order\Email\Sender\OrderSender $orderSender, \Magento\Sales\Api\TransactionRepositoryInterface $transactionRepository, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { @@ -185,7 +186,7 @@ class Directpost extends \Magento\Authorizenet\Model\Authorizenet implements Tra $dataHelper, $requestFactory, $responseFactory, - $xmlSecurityHelper, + $transactionService, $resource, $resourceCollection, $data @@ -884,6 +885,8 @@ class Directpost extends \Magento\Authorizenet\Model\Authorizenet implements Tra if ($response->getXResponseCode() == self::RESPONSE_CODE_APPROVED) { if ($response->getTransactionStatus() == 'voided') { $payment->setIsTransactionDenied(true); + $payment->setIsTransactionClosed(true); + $transaction->close(); } else { $transaction->setAdditionalInformation(self::TRANSACTION_FRAUD_STATE_KEY, false); $payment->setIsTransactionApproved(true); @@ -892,7 +895,7 @@ class Directpost extends \Magento\Authorizenet\Model\Authorizenet implements Tra $payment->setIsTransactionDenied(true); } $this->addStatusCommentOnUpdate($payment, $response, $transactionId); - return parent::fetchTransactionInfo($payment, $transactionId); + return []; } /** @@ -947,4 +950,25 @@ class Directpost extends \Magento\Authorizenet\Model\Authorizenet implements Tra public function setPathPattern($pathPattern) { } + + /** + * This function returns full transaction details for a specified transaction ID. + * + * @param string $transactionId + * @return \Magento\Framework\DataObject + * @throws \Magento\Framework\Exception\LocalizedException + * @link http://www.authorize.net/support/ReportingGuide_XML.pdf + * @link http://developer.authorize.net/api/transaction_details/ + */ + protected function getTransactionResponse($transactionId) + { + $responseXmlDocument = $this->transactionService->getTransactionDetails($this, $transactionId); + + $response = new \Magento\Framework\DataObject(); + $response->setXResponseCode((string)$responseXmlDocument->transaction->responseCode) + ->setXResponseReasonCode((string)$responseXmlDocument->transaction->responseReasonCode) + ->setTransactionStatus((string)$responseXmlDocument->transaction->transactionStatus); + + return $response; + } } diff --git a/app/code/Magento/Authorizenet/Model/ResourceModel/Debug.php b/app/code/Magento/Authorizenet/Model/ResourceModel/Debug.php index 4346ab9f96a9dd9ce8c90a5be585194eb013d756..e28ce1f6e6632ed3d68b6aab1844a6197762de49 100644 --- a/app/code/Magento/Authorizenet/Model/ResourceModel/Debug.php +++ b/app/code/Magento/Authorizenet/Model/ResourceModel/Debug.php @@ -8,7 +8,7 @@ namespace Magento\Authorizenet\Model\ResourceModel; /** * Resource Authorize.net debug model */ -class Debug extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Debug extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Resource initialization diff --git a/app/code/Magento/Authorizenet/Model/ResourceModel/Debug/Collection.php b/app/code/Magento/Authorizenet/Model/ResourceModel/Debug/Collection.php index a359eaa686ccd0dd376acd5e50db081143e6a556..472120a49eddc650915151ccec978c2beab5184a 100644 --- a/app/code/Magento/Authorizenet/Model/ResourceModel/Debug/Collection.php +++ b/app/code/Magento/Authorizenet/Model/ResourceModel/Debug/Collection.php @@ -8,7 +8,7 @@ namespace Magento\Authorizenet\Model\ResourceModel\Debug; /** * Resource Authorize.net debug collection model */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Resource initialization diff --git a/app/code/Magento/Authorizenet/Model/TransactionService.php b/app/code/Magento/Authorizenet/Model/TransactionService.php new file mode 100644 index 0000000000000000000000000000000000000000..f15996974d24548093879d65a20ee73a8f968677 --- /dev/null +++ b/app/code/Magento/Authorizenet/Model/TransactionService.php @@ -0,0 +1,179 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Authorizenet\Model; + +use Magento\Framework\Exception\LocalizedException; +use Magento\Framework\HTTP\ZendClientFactory; +use Magento\Framework\Simplexml\Element; +use Magento\Framework\Xml\Security; +use Magento\Authorizenet\Model\Authorizenet; +use Magento\Payment\Model\Method\Logger; + +/** + * Class TransactionService + * @package Magento\Authorizenet\Model + */ +class TransactionService +{ + /** + * Transaction Details gateway url + */ + const CGI_URL_TD = 'https://apitest.authorize.net/xml/v1/request.api'; + + const PAYMENT_UPDATE_STATUS_CODE_SUCCESS = 'Ok'; + + const CONNECTION_TIMEOUT = 45; + + /** + * Stored information about transaction + * + * @var array + */ + protected $transactionDetails = []; + + /** + * @var \Magento\Framework\Xml\Security + */ + protected $xmlSecurityHelper; + + /** + * @var \Magento\Payment\Model\Method\Logger + */ + protected $logger; + + /** + * @var \Magento\Framework\HTTP\ZendClientFactory + */ + protected $httpClientFactory; + + /** + * Fields that should be replaced in debug with '***' + * + * @var array + */ + protected $debugReplacePrivateDataKeys = ['merchantAuthentication', 'x_login']; + + /** + * @param Security $xmlSecurityHelper + * @param Logger $logger + * @param ZendClientFactory $httpClientFactory + */ + public function __construct( + Security $xmlSecurityHelper, + Logger $logger, + ZendClientFactory $httpClientFactory + ) { + $this->xmlSecurityHelper = $xmlSecurityHelper; + $this->logger = $logger; + $this->httpClientFactory = $httpClientFactory; + } + + /** + * Get transaction information + * @param \Magento\Authorizenet\Model\Authorizenet $context + * @param string $transactionId + * @return \Magento\Framework\Simplexml\Element + * @throws \Magento\Framework\Exception\LocalizedException + */ + public function getTransactionDetails(Authorizenet $context, $transactionId) + { + return isset($this->transactionDetails[$transactionId]) + ? $this->transactionDetails[$transactionId] + : $this->loadTransactionDetails($context, $transactionId); + } + + /** + * Load transaction details + * + * @param \Magento\Authorizenet\Model\Authorizenet $context + * @param string $transactionId + * @return \Magento\Framework\Simplexml\Element + * @throws \Magento\Framework\Exception\LocalizedException + */ + protected function loadTransactionDetails(Authorizenet $context, $transactionId) + { + + $requestBody = $this->getRequestBody( + $context->getConfigData('login'), + $context->getConfigData('trans_key'), + $transactionId + ); + + /** @var \Magento\Framework\HTTP\ZendClient $client */ + $client = $this->httpClientFactory->create(); + $url = $context->getConfigData('cgi_url_td') ?: self::CGI_URL_TD; + $client->setUri($url); + $client->setConfig(['timeout' => self::CONNECTION_TIMEOUT]); + $client->setHeaders(['Content-Type: text/xml']); + $client->setMethod(\Zend_Http_Client::POST); + $client->setRawData($requestBody); + + $debugData = ['url' => $url, 'request' => $this->removePrivateDataFromXml($requestBody)]; + + try { + $responseBody = $client->request()->getBody(); + if (!$this->xmlSecurityHelper->scan($responseBody)) { + $this->logger->critical('Attempt loading of external XML entities in response from Authorizenet.'); + throw new \Exception(); + } + $debugData['response'] = $responseBody; + libxml_use_internal_errors(true); + $responseXmlDocument = new Element($responseBody); + libxml_use_internal_errors(false); + } catch (\Exception $e) { + throw new LocalizedException(__('Unable to get transaction details. Try again later.')); + } finally { + $context->debugData($debugData); + } + + if (!isset($responseXmlDocument->messages->resultCode) + || $responseXmlDocument->messages->resultCode != static::PAYMENT_UPDATE_STATUS_CODE_SUCCESS + ) { + throw new LocalizedException(__('Unable to get transaction details. Try again later.')); + } + + $this->transactionDetails[$transactionId] = $responseXmlDocument; + return $responseXmlDocument; + } + + /** + * Create request body to get transaction details + * @param string $login + * @param string $transactionKey + * @param string $transactionId + * @return string + */ + private function getRequestBody($login, $transactionKey, $transactionId) + { + $requestBody = sprintf( + '<?xml version="1.0" encoding="utf-8"?>' . + '<getTransactionDetailsRequest xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd">' . + '<merchantAuthentication><name>%s</name><transactionKey>%s</transactionKey></merchantAuthentication>' . + '<transId>%s</transId>' . + '</getTransactionDetailsRequest>', + $login, + $transactionKey, + $transactionId + ); + return $requestBody; + } + + /** + * Remove nodes with private data from XML string + * + * Uses values from $_debugReplacePrivateDataKeys property + * + * @param string $xml + * @return string + */ + private function removePrivateDataFromXml($xml) + { + foreach ($this->debugReplacePrivateDataKeys as $key) { + $xml = preg_replace(sprintf('~(?<=<%s>).*?(?=</%s>)~', $key, $key), Logger::DEBUG_KEYS_MASK, $xml); + } + return $xml; + } +} diff --git a/app/code/Magento/Authorizenet/Test/Unit/Model/DirectpostTest.php b/app/code/Magento/Authorizenet/Test/Unit/Model/DirectpostTest.php index edfade031c792728831eaff0d4024a885d04fcbb..3247ed2cb9329f86e0efda4e07aeae938515f05b 100644 --- a/app/code/Magento/Authorizenet/Test/Unit/Model/DirectpostTest.php +++ b/app/code/Magento/Authorizenet/Test/Unit/Model/DirectpostTest.php @@ -5,8 +5,11 @@ */ namespace Magento\Authorizenet\Test\Unit\Model; +use Magento\Framework\Simplexml\Element; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper; use Magento\Authorizenet\Model\Directpost; +use Magento\Authorizenet\Model\TransactionService; +use Magento\Sales\Model\Order\Payment\Transaction\Repository as TransactionRepository; /** * Class DirectpostTest @@ -38,45 +41,59 @@ class DirectpostTest extends \PHPUnit_Framework_TestCase */ protected $responseFactoryMock; + /** + * @var TransactionRepository|\PHPUnit_Framework_MockObject_MockObject + */ + protected $transactionRepositoryMock; + /** * @var \Magento\Authorizenet\Model\Directpost\Response|\PHPUnit_Framework_MockObject_MockObject */ protected $responseMock; + /** + * @var TransactionService|\PHPUnit_Framework_MockObject_MockObject + */ + protected $transactionServiceMock; + protected function setUp() { $this->scopeConfigMock = $this->getMockBuilder('Magento\Framework\App\Config\ScopeConfigInterface') ->getMock(); - $this->paymentMock = $this->getMockBuilder('Magento\Payment\Model\InfoInterface') + $this->paymentMock = $this->getMockBuilder('Magento\Sales\Model\Order\Payment') + ->disableOriginalConstructor() + ->setMethods([ + 'getOrder', 'getId', 'setAdditionalInformation', 'getAdditionalInformation', + 'setIsTransactionDenied', 'setIsTransactionClosed' + ]) ->getMock(); $this->dataHelperMock = $this->getMockBuilder('Magento\Authorizenet\Helper\Data') ->disableOriginalConstructor() ->getMock(); - $this->responseFactoryMock = $this->getMockBuilder('Magento\Authorizenet\Model\Directpost\Response\Factory') + + $this->initResponseFactoryMock(); + + $this->transactionRepositoryMock = $this->getMockBuilder( + 'Magento\Sales\Model\Order\Payment\Transaction\Repository' + ) ->disableOriginalConstructor() + ->setMethods(['getByTransactionId']) ->getMock(); - $this->responseMock = $this->getMockBuilder('Magento\Authorizenet\Model\Directpost\Response') - ->setMethods( - [ - 'setData', 'isValidHash', 'getXTransId', - 'getXResponseCode', 'getXResponseReasonText', - 'getXAmount' - ] - ) + + $this->transactionServiceMock = $this->getMockBuilder('Magento\Authorizenet\Model\TransactionService') ->disableOriginalConstructor() + ->setMethods(['getTransactionDetails']) ->getMock(); - $this->responseFactoryMock->expects($this->any()) - ->method('create') - ->willReturn($this->responseMock); - $helper = new ObjectManagerHelper($this); $this->directpost = $helper->getObject( 'Magento\Authorizenet\Model\Directpost', [ 'scopeConfig' => $this->scopeConfigMock, 'dataHelper' => $this->dataHelperMock, - 'responseFactory' => $this->responseFactoryMock + 'responseFactory' => $this->responseFactoryMock, + 'transactionRepository' => $this->transactionRepositoryMock, + 'transactionService' => $this->transactionServiceMock ] ); } @@ -357,4 +374,160 @@ class DirectpostTest extends \PHPUnit_Framework_TestCase ['isGatewayActionsLocked' => true, 'canCapture' => false] ]; } + + /** + * @covers \Magento\Authorizenet\Model\Directpost::fetchTransactionInfo + * + * @param $transactionId + * @param $resultStatus + * @param $responseStatus + * @param $responseCode + * @return void + * + * @dataProvider dataProviderTransaction + */ + public function testFetchVoidedTransactionInfo($transactionId, $resultStatus, $responseStatus, $responseCode) + { + $paymentId = 36; + $orderId = 36; + + $this->paymentMock->expects(static::once()) + ->method('getId') + ->willReturn($paymentId); + + $orderMock = $this->getMockBuilder('Magento\Sales\Model\Order') + ->disableOriginalConstructor() + ->setMethods(['getId', '__wakeup']) + ->getMock(); + $orderMock->expects(static::once()) + ->method('getId') + ->willReturn($orderId); + + $this->paymentMock->expects(static::once()) + ->method('getOrder') + ->willReturn($orderMock); + + $transactionMock = $this->getMockBuilder('Magento\Sales\Model\Order\Payment\Transaction') + ->disableOriginalConstructor() + ->getMock(); + $this->transactionRepositoryMock->expects(static::once()) + ->method('getByTransactionId') + ->with($transactionId, $paymentId, $orderId) + ->willReturn($transactionMock); + + $document = $this->getTransactionXmlDocument( + $transactionId, + TransactionService::PAYMENT_UPDATE_STATUS_CODE_SUCCESS, + $resultStatus, + $responseStatus, + $responseCode + ); + $this->transactionServiceMock->expects(static::once()) + ->method('getTransactionDetails') + ->with($this->directpost, $transactionId) + ->willReturn($document); + + // transaction should be closed + $this->paymentMock->expects(static::once()) + ->method('setIsTransactionDenied') + ->with(true); + $this->paymentMock->expects(static::once()) + ->method('setIsTransactionClosed') + ->with(true); + $transactionMock->expects(static::once()) + ->method('close'); + + $this->directpost->fetchTransactionInfo($this->paymentMock, $transactionId); + } + + /** + * Get data for tests + * @return array + */ + public function dataProviderTransaction() + { + return [ + [ + 'transactionId' => '9941997799', + 'resultStatus' => 'Successful.', + 'responseStatus' => 'voided', + 'responseCode' => 1 + ] + ]; + } + + /** + * Create mock for response factory + * @return void + */ + private function initResponseFactoryMock() + { + $this->responseFactoryMock = $this->getMockBuilder('Magento\Authorizenet\Model\Directpost\Response\Factory') + ->disableOriginalConstructor() + ->getMock(); + $this->responseMock = $this->getMockBuilder('Magento\Authorizenet\Model\Directpost\Response') + ->setMethods( + [ + 'setData', 'isValidHash', 'getXTransId', + 'getXResponseCode', 'getXResponseReasonText', + 'getXAmount' + ] + ) + ->disableOriginalConstructor() + ->getMock(); + + $this->responseFactoryMock->expects($this->any()) + ->method('create') + ->willReturn($this->responseMock); + } + + /** + * Get transaction data + * @param $transactionId + * @param $resultCode + * @param $resultStatus + * @param $responseStatus + * @param $responseCode + * @return Element + */ + private function getTransactionXmlDocument( + $transactionId, + $resultCode, + $resultStatus, + $responseStatus, + $responseCode + ) { + $body = sprintf( + '<?xml version="1.0" encoding="utf-8"?> + <getTransactionDetailsResponse + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd"> + <messages> + <resultCode>%s</resultCode> + <message> + <code>I00001</code> + <text>%s</text> + </message> + </messages> + <transaction> + <transId>%s</transId> + <transactionType>authOnlyTransaction</transactionType> + <transactionStatus>%s</transactionStatus> + <responseCode>%s</responseCode> + <responseReasonCode>%s</responseReasonCode> + </transaction> + </getTransactionDetailsResponse>', + $resultCode, + $resultStatus, + $transactionId, + $responseStatus, + $responseCode, + $responseCode + ); + libxml_use_internal_errors(true); + $document = new Element($body); + libxml_use_internal_errors(false); + return $document; + } } diff --git a/app/code/Magento/Authorizenet/Test/Unit/Model/TransactionServiceTest.php b/app/code/Magento/Authorizenet/Test/Unit/Model/TransactionServiceTest.php new file mode 100644 index 0000000000000000000000000000000000000000..9b4646a0a7976c98d5a5565b0e4f49c87042d4e9 --- /dev/null +++ b/app/code/Magento/Authorizenet/Test/Unit/Model/TransactionServiceTest.php @@ -0,0 +1,164 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Authorizenet\Test\Unit\Model; + +use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; +use Magento\Framework\Simplexml\Element; +use Magento\Authorizenet\Model\TransactionService; + +class TransactionServiceTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var \Magento\Framework\HTTP\ZendClient|\PHPUnit_Framework_MockObject_MockObject + */ + protected $httpClientMock; + + /** + * @var \Magento\Authorizenet\Model\Authorizenet|\PHPUnit_Framework_MockObject_MockObject + */ + protected $authorizenetMock; + + /** + * @var \Magento\Authorizenet\Model\TransactionService + */ + protected $transactionService; + + protected function setUp() + { + $httpClientFactoryMock = $this->getHttpClientFactoryMock(); + + $this->authorizenetMock = $this->getMockBuilder('Magento\Authorizenet\Model\Directpost') + ->disableOriginalConstructor() + ->getMock(); + + $this->authorizenetMock->method('getConfigData') + ->willReturnMap([ + ['login', 'test login'], + ['trans_key', 'test key'], + ['cgi_url_td', 'https://apitest.authorize.net/xml/v1/request.api'] + ]); + + $objectManagerHelper = new ObjectManager($this); + $xmlSecurity = $objectManagerHelper->getObject('Magento\Framework\Xml\Security'); + $this->transactionService = $objectManagerHelper->getObject('\Magento\Authorizenet\Model\TransactionService', [ + 'xmlSecurityHelper' => $xmlSecurity, + 'httpClientFactory' => $httpClientFactoryMock + ]); + } + + /** + * @covers \Magento\Authorizenet\Model\TransactionService::loadTransactionDetails + * @param $transactionId + * @param $resultStatus + * @param $responseStatus + * @param $responseCode + * @return void + * + * @dataProvider dataProviderTransaction + */ + public function testLoadVoidedTransactionDetails($transactionId, $resultStatus, $responseStatus, $responseCode) + { + $document = $this->getResponseBody( + $transactionId, + TransactionService::PAYMENT_UPDATE_STATUS_CODE_SUCCESS, + $resultStatus, + $responseStatus, + $responseCode + ); + $this->httpClientMock->expects(static::once()) + ->method('getBody') + ->willReturn($document); + + $result = $this->transactionService->getTransactionDetails($this->authorizenetMock, $transactionId); + + static::assertEquals($responseCode, (string)$result->transaction->responseCode); + static::assertEquals($responseCode, (string)$result->transaction->responseReasonCode); + static::assertEquals($responseStatus, (string)$result->transaction->transactionStatus); + } + + /** + * Get data for tests + * @return array + */ + public function dataProviderTransaction() + { + return [ + [ + 'transactionId' => '9941997799', + 'resultStatus' => 'Successful.', + 'responseStatus' => 'voided', + 'responseCode' => 1 + ] + ]; + } + + /** + * Create and return mock for http client factory + * @return \PHPUnit_Framework_MockObject_MockObject + */ + private function getHttpClientFactoryMock() + { + $this->httpClientMock = $this->getMockBuilder('Magento\Framework\HTTP\ZendClient') + ->disableOriginalConstructor() + ->setMethods(['request', 'getBody', '__wakeup']) + ->getMock(); + + $this->httpClientMock->expects(static::once()) + ->method('request') + ->willReturnSelf(); + + $httpClientFactoryMock = $this->getMockBuilder('Magento\Framework\HTTP\ZendClientFactory') + ->disableOriginalConstructor() + ->setMethods(['create']) + ->getMock(); + + $httpClientFactoryMock->expects(static::once()) + ->method('create') + ->willReturn($this->httpClientMock); + return $httpClientFactoryMock; + } + + /** + * Get body for xml request + * @param string $transactionId + * @param int $resultCode + * @param string $resultStatus + * @param string $responseStatus + * @param string $responseCode + * @return string + */ + private function getResponseBody($transactionId, $resultCode, $resultStatus, $responseStatus, $responseCode) + { + return sprintf( + '<?xml version="1.0" encoding="utf-8"?> + <getTransactionDetailsResponse + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd"> + <messages> + <resultCode>%s</resultCode> + <message> + <code>I00001</code> + <text>%s</text> + </message> + </messages> + <transaction> + <transId>%s</transId> + <transactionType>authOnlyTransaction</transactionType> + <transactionStatus>%s</transactionStatus> + <responseCode>%s</responseCode> + <responseReasonCode>%s</responseReasonCode> + </transaction> + </getTransactionDetailsResponse>', + $resultCode, + $resultStatus, + $transactionId, + $responseStatus, + $responseCode, + $responseCode + ); + } +} diff --git a/app/code/Magento/Authorizenet/etc/adminhtml/events.xml b/app/code/Magento/Authorizenet/etc/adminhtml/events.xml index 6af0e3cc979df6ea8ec77e6dda85a9fb8670ae97..002e06922e3993f69569134ea7059c1c4890c1d8 100644 --- a/app/code/Magento/Authorizenet/etc/adminhtml/events.xml +++ b/app/code/Magento/Authorizenet/etc/adminhtml/events.xml @@ -7,6 +7,6 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="checkout_submit_all_after"> - <observer name="directpost_update_all_edit_increments" instance="Magento\Authorizenet\Observer\UpdateAllEditIncrementsObserver" method="execute" /> + <observer name="directpost_update_all_edit_increments" instance="Magento\Authorizenet\Observer\UpdateAllEditIncrementsObserver" /> </event> </config> diff --git a/app/code/Magento/Authorizenet/etc/frontend/events.xml b/app/code/Magento/Authorizenet/etc/frontend/events.xml index 6bdc45a80e3892f856fa6278ff750f4ebbbf50ed..16c05e8cba914b5cd49a27bee4e609717cd75eff 100644 --- a/app/code/Magento/Authorizenet/etc/frontend/events.xml +++ b/app/code/Magento/Authorizenet/etc/frontend/events.xml @@ -7,9 +7,9 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="checkout_submit_all_after"> - <observer name="directpost_save_order_after_submit" instance="Magento\Authorizenet\Observer\SaveOrderAfterSubmitObserver" method="execute" /> + <observer name="directpost_save_order_after_submit" instance="Magento\Authorizenet\Observer\SaveOrderAfterSubmitObserver" /> </event> <event name="checkout_directpost_placeOrder"> - <observer name="directpost_save_order_onepage" instance="Magento\Authorizenet\Observer\AddFieldsToResponseObserver" method="execute" /> + <observer name="directpost_save_order_onepage" instance="Magento\Authorizenet\Observer\AddFieldsToResponseObserver" /> </event> </config> diff --git a/app/code/Magento/Authorizenet/view/adminhtml/templates/directpost/iframe.phtml b/app/code/Magento/Authorizenet/view/adminhtml/templates/directpost/iframe.phtml index 2712012849971486502a773f7b3c6e8dac9946e0..4d6cec725460eadf130614102162c00a5642f86d 100644 --- a/app/code/Magento/Authorizenet/view/adminhtml/templates/directpost/iframe.phtml +++ b/app/code/Magento/Authorizenet/view/adminhtml/templates/directpost/iframe.phtml @@ -16,15 +16,15 @@ $helper = $block->getHelper('adminhtml'); <head> <script> <?php if (isset($params['redirect'])): ?> - window.location="<?php echo $block->escapeUrl($params['redirect']) ?>"; + window.location="<?php echo $block->escapeUrl($params['redirect']); ?>"; <?php endif; ?> <?php if (isset($params['redirect_parent'])): ?> - window.top.location="<?php echo $block->escapeUrl($params['redirect_parent']) ?>"; + window.top.location="<?php echo $block->escapeUrl($params['redirect_parent']); ?>"; <?php endif; ?> <?php if (isset($params['error_msg'])): ?> - window.top.directPostModel.showError(<?php /* @escapeNotVerified */ echo json_encode((array)$params['error_msg']) ?>); + window.top.directPostModel.showError(<?php /* @noEscape */ echo json_encode((array)$params['error_msg']); ?>); <?php if (isset($params['x_invoice_num'])): ?> - window.top.directPostModel.successUrl="<?php /* @escapeNotVerified */ echo $helper->getSuccessOrderUrl($params) ?>"; + window.top.directPostModel.successUrl="<?php echo $block->escapeUrl($helper->getSuccessOrderUrl($params)); ?>"; <?php endif; ?> <?php endif; ?> </script> diff --git a/app/code/Magento/Authorizenet/view/adminhtml/templates/directpost/info.phtml b/app/code/Magento/Authorizenet/view/adminhtml/templates/directpost/info.phtml index adff03b5365c2be28e4a113d6e15dc815968c4d6..6c02076b5a7dbe55d9a81b7114599221c6c9f14e 100644 --- a/app/code/Magento/Authorizenet/view/adminhtml/templates/directpost/info.phtml +++ b/app/code/Magento/Authorizenet/view/adminhtml/templates/directpost/info.phtml @@ -5,84 +5,98 @@ */ // @codingStandardsIgnoreFile - /** - * @see \Magento\Authorizenet\Block\Directpost\Form + * @var \Magento\Authorizenet\Block\Transparent\Iframe $block + * @see \Magento\Authorizenet\Block\Transparent\Iframe */ -?> -<?php -$_form = $block; -$_code = $_form->getMethodCode(); -$_method = $_form->getMethod(); -$_controller = $block->getRequest()->getControllerName(); -$_orderUrl = $this->helper('Magento\Authorizenet\Helper\Backend\Data')->getPlaceOrderAdminUrl(); +$code = $block->getMethodCode(); +$method = $block->getMethod(); +$controller = $block->escapeHtml($block->getRequest()->getControllerName()); +$orderUrl = $block->escapeUrl($this->helper('Magento\Authorizenet\Helper\Backend\Data')->getPlaceOrderAdminUrl()); +$ccType = $block->getInfoData('cc_type'); +$ccExpMonth = $block->getInfoData('cc_exp_month'); +$ccExpYear = $block->getInfoData('cc_exp_year'); ?> <!-- IFRAME for request to our server --> -<iframe id="order-directpost-iframe" allowtransparency="true" frameborder="0" name="iframeSubmitOrder" style="display:none;width:100%;background-color:transparent" src="<?php /* @escapeNotVerified */ echo $block->getViewFileUrl('blank.html') ?>"></iframe> +<iframe id="order-directpost-iframe" allowtransparency="true" frameborder="0" name="iframeSubmitOrder" + style="display:none;width:100%;background-color:transparent" + src="<?php /* @noEscape */ echo $block->getViewFileUrl('blank.html'); ?>"> +</iframe> <!-- IFRAME for request to Authorize.net --> -<iframe id="directpost-iframe" allowtransparency="true" frameborder="0" name="iframeDirectPost" style="display:none;width:100%;background-color:transparent" src="<?php /* @escapeNotVerified */ echo $block->getViewFileUrl('blank.html') ?>"></iframe> -<fieldset class="admin__fieldset payment-method" id="payment_form_<?php /* @escapeNotVerified */ echo $_code ?>" style="display:none;"> +<iframe id="directpost-iframe" allowtransparency="true" frameborder="0" name="iframeDirectPost" + style="display:none;width:100%;background-color:transparent" + src="<?php /* @noEscape */ echo $block->getViewFileUrl('blank.html'); ?>"> +</iframe> +<fieldset class="admin__fieldset payment-method" id="payment_form_<?php /* @noEscape */ echo $code; ?>" + style="display:none;"> <div class="admin__field _required"> - <label for="<?php /* @escapeNotVerified */ echo $_code ?>_cc_type" - class="admin__field-label"><span><?php /* @escapeNotVerified */ echo __('Credit Card Type') ?></span></label> + <label for="<?php /* @noEscape */ echo $code; ?>_cc_type" class="admin__field-label"> + <span><?php echo $block->escapeHtml(__('Credit Card Type')); ?></span> + </label> <div class="admin__field-control"> - <select id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_type" - name="payment[cc_type]" + <select id="<?php /* @noEscape */ echo $code; ?>_cc_type" name="payment[cc_type]" class="required-entry validate-cc-type-select admin__control-select"> - <?php $_ccType = $_form->getInfoData('cc_type') ?> <option value=""></option> - <?php foreach ($_form->getCcAvailableTypes() as $_typeCode => $_typeName): ?> - <option value="<?php /* @escapeNotVerified */ echo $_typeCode ?>" - <?php if ($_typeCode == $_ccType): ?>selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $_typeName ?></option> - <?php endforeach ?> + <?php foreach ($block->getCcAvailableTypes() as $typeCode => $typeName): ?> + <option value="<?php echo $block->escapeHtml($typeCode); ?>" + <?php if ($typeCode == $ccType): ?>selected="selected"<?php endif; ?>> + <?php echo $block->escapeHtml($typeName); ?> + </option> + <?php endforeach; ?> </select> </div> </div> <div class="admin__field _required"> - <label for="<?php /* @escapeNotVerified */ echo $_code ?>_cc_number" - class="admin__field-label"><span><?php /* @escapeNotVerified */ echo __('Credit Card Number') ?></span></label> + <label for="<?php /* @noEscape */ echo $code; ?>_cc_number" class="admin__field-label"> + <span><?php echo $block->escapeHtml(__('Credit Card Number')); ?></span> + </label> <div class="admin__field-control"> - <input type="text" id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_number" + <input type="text" id="<?php /* @noEscape */ echo $code; ?>_cc_number" name="payment[cc_number]" class="input-text required-entry validate-cc-number admin__control-text" - value="<?php /* @escapeNotVerified */ echo $block->getInfoData('cc_number') ?>"/> + value="<?php /* @noEscape */ echo $block->getInfoData('cc_number'); ?>"/> </div> </div> <div class="admin__field _required"> - <label for="<?php /* @escapeNotVerified */ echo $_code ?>_expiration" - class="admin__field-label"><span><?php /* @escapeNotVerified */ echo __('Expiration Date') ?></span></label> + <label for="<?php /* @noEscape */ echo $code; ?>_expiration" class="admin__field-label"> + <span><?php echo $block->escapeHtml(__('Expiration Date')); ?></span> + </label> <div class="admin__field-control"> - <select id="<?php /* @escapeNotVerified */ echo $_code ?>_expiration" + <select id="<?php /* @noEscape */ echo $code; ?>_expiration" name="payment[cc_exp_month]" class="validate-cc-exp required-entry admin__control-select admin__control-select-month"> - <?php $_ccExpMonth = $_form->getInfoData('cc_exp_month') ?> - <?php foreach ($_form->getCcMonths() as $k => $v): ?> - <option value="<?php /* @escapeNotVerified */ echo $k ?>" - <?php if ($k == $_ccExpMonth): ?>selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $v ?></option> - <?php endforeach ?> + <?php foreach ($block->getCcMonths() as $k => $v): ?> + <option value="<?php echo $block->escapeHtml($k); ?>" + <?php if ($k == $ccExpMonth): ?>selected="selected"<?php endif; ?>> + <?php echo $block->escapeHtml($v); ?> + </option> + <?php endforeach; ?> </select> - <?php $_ccExpYear = $_form->getInfoData('cc_exp_year') ?> - <select id="<?php /* @escapeNotVerified */ echo $_code ?>_expiration_yr" + <select id="<?php /* @noEscape */ echo $code; ?>_expiration_yr" name="payment[cc_exp_year]" class="required-entry admin__control-select admin__control-select-year"> - <?php foreach ($_form->getCcYears() as $k => $v): ?> - <option value="<?php /* @escapeNotVerified */ echo $k ? $k : '' ?>" - <?php if ($k == $_ccExpYear): ?>selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $v ?></option> - <?php endforeach ?> + <?php foreach ($block->getCcYears() as $k => $v): ?> + <option value="<?php /* @noEscape */ echo $k ? $block->escapeHtml($k) : ''; ?>" + <?php if ($k == $ccExpYear): ?>selected="selected"<?php endif; ?>> + <?php echo $block->escapeHtml($v); ?> + </option> + <?php endforeach; ?> </select> </div> </div> - <?php if ($_form->hasVerification()): ?> + <?php if ($block->hasVerification()): ?> <div class="admin__field _required"> - <label for="<?php /* @escapeNotVerified */ echo $_code ?>_cc_cid"><span><?php /* @escapeNotVerified */ echo __('Card Verification Number') ?></span></label> + <label for="<?php /* @noEscape */ echo $code; ?>_cc_cid"> + <span><?php echo $block->escapeHtml(__('Card Verification Number')); ?></span> + </label> <div class="admin__field-control"> <input type="text" class="required-entry input-text validate-cc-cvn admin__control-text" - id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_cid" name="payment[cc_cid]" - value="<?php /* @escapeNotVerified */ echo $block->getInfoData('cc_cid') ?>"/> + id="<?php /* @noEscape */ echo $code; ?>_cc_cid" name="payment[cc_cid]" + value="<?php /* @noEscape */ echo $block->getInfoData('cc_cid') ?>"/> </div> </div> <?php endif; ?> @@ -98,19 +112,21 @@ $_orderUrl = $this->helper('Magento\Authorizenet\Helper\Backend\Data')->getPlace /** * Disable card server validation in admin */ - order.addExcludedPaymentMethod('<?php /* @escapeNotVerified */ echo $_code ?>'); + order.addExcludedPaymentMethod('<?php /* @noEscape */ echo $code; ?>'); <?php if (!$block->isAjaxRequest()): ?> document.observe('dom:loaded', function(){ <?php endif; ?> directPostModel = new directPost( - '<?php /* @escapeNotVerified */ echo $_code ?>', + '<?php /* @noEscape */ echo $code; ?>', 'directpost-iframe', - '<?php /* @escapeNotVerified */ echo $_controller ?>', - '<?php /* @escapeNotVerified */ echo $_orderUrl ?>', - '<?php /* @escapeNotVerified */ echo $_method->getCgiUrl() ?>', - '<?php /* @escapeNotVerified */ echo $block->getUrl('*/*/save', ['_secure' => $block->getRequest()->isSecure()]) ?>'); + '<?php /* @noEscape */ echo $controller; ?>', + '<?php /* @noEscape */ echo $orderUrl; ?>', + '<?php echo $block->escapeUrl($method->getCgiUrl()); ?>', + '<?php /* @noEscape */ echo $block->getUrl('*/*/save', [ + '_secure' => $block->getRequest()->isSecure() + ]);?>'); <?php if (!$block->isAjaxRequest()): ?> }); diff --git a/app/code/Magento/Authorizenet/view/adminhtml/templates/order/view/info/fraud_details.phtml b/app/code/Magento/Authorizenet/view/adminhtml/templates/order/view/info/fraud_details.phtml index b26a258c77f3cf25c8d1cb10da5e99d87f92949d..e281f3a777a06678c1abee0ba01a456f6f31afea 100644 --- a/app/code/Magento/Authorizenet/view/adminhtml/templates/order/view/info/fraud_details.phtml +++ b/app/code/Magento/Authorizenet/view/adminhtml/templates/order/view/info/fraud_details.phtml @@ -5,38 +5,51 @@ */ // @codingStandardsIgnoreFile +/** + * @var \Magento\Authorizenet\Block\Adminhtml\Order\View\Info\FraudDetails $block + */ +$payment = $block->getPayment(); +$fraudDetails = $payment->getAdditionalInformation('fraud_details'); ?> -<?php $payment = $block->getPayment() ?> -<?php $fraudDetails = $payment->getAdditionalInformation('fraud_details') ?> - <?php if (!empty($fraudDetails)): ?> <div class="admin__page-section-item-title"> - <span class="title"><?php /* @escapeNotVerified */ echo __('Fraud Detection ') ?></span> + <span class="title"><?php echo $block->escapeHtml(__('Fraud Detection ')); ?></span> </div> <div class="admin__page-section-item-content"> <div class="order-payment-additional"> <?php if(!empty($fraudDetails['fds_filter_action'])): ?> - <?php /* @escapeNotVerified */ echo __('FDS Filter Action') ?>: <?php /* @escapeNotVerified */ echo $fraudDetails['fds_filter_action'] ?></br> + <?php echo $block->escapeHtml(__('FDS Filter Action')); ?>: + <?php echo $block->escapeHtml($fraudDetails['fds_filter_action']); ?> + </br> <?php endif; ?> <?php if(!empty($fraudDetails['avs_response'])): ?> - <?php /* @escapeNotVerified */ echo __('AVS Response') ?>: <?php /* @escapeNotVerified */ echo $fraudDetails['avs_response'] ?></br> + <?php echo $block->escapeHtml(__('AVS Response')); ?>: + <?php echo $block->escapeHtml($fraudDetails['avs_response']); ?> + </br> <?php endif; ?> <?php if(!empty($fraudDetails['card_code_response'])): ?> - <?php /* @escapeNotVerified */ echo __('Card Code Response') ?>: <?php /* @escapeNotVerified */ echo $fraudDetails['card_code_response'] ?></br> + <?php echo $block->escapeHtml(__('Card Code Response')); ?>: + <?php echo $block->escapeHtml($fraudDetails['card_code_response']); ?> + </br> <?php endif; ?> <?php if(!empty($fraudDetails['cavv_response']) || ($fraudDetails['cavv_response'] === 0)): ?> - <?php /* @escapeNotVerified */ echo __('CAVV Response') ?>: <?php /* @escapeNotVerified */ echo $fraudDetails['cavv_response'] ?></br> + <?php echo $block->escapeHtml(__('CAVV Response')); ?>: + <?php echo $block->escapeHtml($fraudDetails['cavv_response']); ?> + </br> <?php endif; ?> <?php if(!empty($fraudDetails['fraud_filters'])): ?> - <b><?php /* @escapeNotVerified */ echo __('Fraud Filters') ?>:</b></br> + <b><?php echo $block->escapeHtml(__('Fraud Filters')); ?>: + </b></br> <?php foreach($fraudDetails['fraud_filters'] as $filter): ?> - <?php /* @escapeNotVerified */ echo $filter['name'] ?>: <?php /* @escapeNotVerified */ echo $filter['action'] ?></br> + <?php echo $block->escapeHtml($filter['name']); ?>: + <?php echo $block->escapeHtml($filter['action']); ?> + </br> <?php endforeach; ?> <?php endif; ?> </div> diff --git a/app/code/Magento/Authorizenet/view/frontend/web/js/view/payment/method-renderer/authorizenet-directpost.js b/app/code/Magento/Authorizenet/view/frontend/web/js/view/payment/method-renderer/authorizenet-directpost.js index cb58db6d1d5a00283a2d87461dbac55272121dad..bf6978cfa365c38700830a02dcff602881af509d 100644 --- a/app/code/Magento/Authorizenet/view/frontend/web/js/view/payment/method-renderer/authorizenet-directpost.js +++ b/app/code/Magento/Authorizenet/view/frontend/web/js/view/payment/method-renderer/authorizenet-directpost.js @@ -50,9 +50,8 @@ define( placeOrder: function () { var self = this; - fullScreenLoader.startLoader(); - if (this.validateHandler() && additionalValidators.validate()) { + fullScreenLoader.startLoader(); this.isPlaceOrderActionAllowed(false); $.when(setPaymentInformationAction(this.messageContainer, { 'method': self.getCode() diff --git a/app/code/Magento/Backend/Block/Dashboard/AbstractDashboard.php b/app/code/Magento/Backend/Block/Dashboard/AbstractDashboard.php index b9401d4b2bccc397ac62a573aa763566b5f12da0..dd484e56c51f45906097254d95bc6cac958540e7 100644 --- a/app/code/Magento/Backend/Block/Dashboard/AbstractDashboard.php +++ b/app/code/Magento/Backend/Block/Dashboard/AbstractDashboard.php @@ -40,7 +40,7 @@ abstract class AbstractDashboard extends \Magento\Backend\Block\Widget } /** - * @return array|\Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection|\Magento\Eav\Model\Entity\Collection\Abstract + * @return array|\Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection|\Magento\Eav\Model\Entity\Collection\Abstract */ public function getCollection() { diff --git a/app/code/Magento/Backend/Block/Widget/Grid/Column/Filter/Store.php b/app/code/Magento/Backend/Block/Widget/Grid/Column/Filter/Store.php index 6be55c02dba0883066ae46bc6a1d03539f098a45..5a1769562032bcc59ab133db77dcd801342aceb4 100644 --- a/app/code/Magento/Backend/Block/Widget/Grid/Column/Filter/Store.php +++ b/app/code/Magento/Backend/Block/Widget/Grid/Column/Filter/Store.php @@ -48,7 +48,7 @@ class Store extends \Magento\Backend\Block\Widget\Grid\Column\Filter\AbstractFil $allShow = $this->getColumn()->getStoreAll(); - $html = '<select name="' . $this->escapeHtml( + $html = '<select class="admin__control-select" name="' . $this->escapeHtml( $this->_getHtmlName() ) . '" ' . $this->getColumn()->getValidateClass() . $this->getUiId( 'filter', diff --git a/app/code/Magento/Backend/Block/Widget/Grid/Column/Renderer/AbstractRenderer.php b/app/code/Magento/Backend/Block/Widget/Grid/Column/Renderer/AbstractRenderer.php index 0c28782435dc1d5e14b8f61fa3bd65731edc7122..e8b0ef6c89533fe8e8af7dfe025e1255a0cb7310 100644 --- a/app/code/Magento/Backend/Block/Widget/Grid/Column/Renderer/AbstractRenderer.php +++ b/app/code/Magento/Backend/Block/Widget/Grid/Column/Renderer/AbstractRenderer.php @@ -51,10 +51,11 @@ abstract class AbstractRenderer extends \Magento\Backend\Block\AbstractBlock imp public function render(DataObject $row) { if ($this->getColumn()->getEditable()) { - $value = $this->_getValue($row); - return '<div class="admin__grid-control">' . - '<span class="admin__grid-control-value">' . $value . '</span>' . - $this->_getInputValueElement($row) . '</div>' ; + $result = '<div class="admin__grid-control">'; + $result .= $this->getColumn()->getEditOnly() ? '' + : '<span class="admin__grid-control-value">' . $this->_getValue($row) . '</span>'; + + return $result . $this->_getInputValueElement($row) . '</div>' ; } return $this->_getValue($row); } diff --git a/app/code/Magento/Backend/Helper/Dashboard/AbstractDashboard.php b/app/code/Magento/Backend/Helper/Dashboard/AbstractDashboard.php index b2907af009a4869e5580dddffe124cbda2d015c8..a17302f9b12c772b566eb7afa91d71b238bd0ec5 100644 --- a/app/code/Magento/Backend/Helper/Dashboard/AbstractDashboard.php +++ b/app/code/Magento/Backend/Helper/Dashboard/AbstractDashboard.php @@ -13,7 +13,7 @@ abstract class AbstractDashboard extends \Magento\Framework\App\Helper\AbstractH /** * Helper collection * - * @var \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection|array + * @var \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection|array */ protected $_collection; @@ -25,7 +25,7 @@ abstract class AbstractDashboard extends \Magento\Framework\App\Helper\AbstractH protected $_params = []; /** - * @return array|\Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection + * @return array|\Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection */ public function getCollection() { diff --git a/app/code/Magento/Backend/Test/Unit/Block/Widget/Grid/Column/Renderer/AbstractRendererTest.php b/app/code/Magento/Backend/Test/Unit/Block/Widget/Grid/Column/Renderer/AbstractRendererTest.php new file mode 100644 index 0000000000000000000000000000000000000000..2e7fe0c3b0e27264a4cb4169d42493f480705665 --- /dev/null +++ b/app/code/Magento/Backend/Test/Unit/Block/Widget/Grid/Column/Renderer/AbstractRendererTest.php @@ -0,0 +1,107 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Backend\Test\Unit\Block\Widget\Grid\Column\Renderer; + +class AbstractRendererTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var \Magento\Backend\Block\Widget\Grid\Column|\PHPUnit_Framework_MockObject_MockObject + */ + protected $columnMock; + + /** + * @var \Magento\Framework\DataObject|\PHPUnit_Framework_MockObject_MockObject + */ + protected $dataObjectMock; + + /** + * @var \Magento\Backend\Block\Widget\Grid\Column\Renderer\AbstractRenderer + */ + protected $renderer; + + /** + * @return void + */ + protected function setUp() + { + $this->dataObjectMock = $this->getMock('Magento\Framework\DataObject', ['getData'], [], '', false); + $this->columnMock = $this->getMockBuilder('Magento\Backend\Block\Widget\Grid\Column') + ->disableOriginalConstructor() + ->setMethods(['getEditable', 'getIndex', 'getEditOnly', 'getId']) + ->getMock(); + $this->renderer = $this->getMockBuilder('Magento\Backend\Block\Widget\Grid\Column\Renderer\AbstractRenderer') + ->disableOriginalConstructor() + ->setMethods(null) + ->getMock(); + } + + /** + * @param bool $editable + * @param bool $onlyEdit + * @param string $expectedResult + * @return void + * @dataProvider renderDataProvider + */ + public function testRender($editable, $onlyEdit, $expectedResult) + { + $value = 'some value'; + $keyValue = 'key'; + + $this->columnMock->expects($this->once()) + ->method('getEditable') + ->willReturn($editable); + $this->columnMock->expects($this->any()) + ->method('getEditOnly') + ->willReturn($onlyEdit); + $this->columnMock->expects($this->any()) + ->method('getIndex') + ->willReturn($keyValue); + $this->columnMock->expects($this->any()) + ->method('getId') + ->willReturn('test'); + $this->dataObjectMock->expects($this->any()) + ->method('getData') + ->with($keyValue) + ->willReturn($value); + $this->renderer->setColumn($this->columnMock); + + $this->assertEquals($expectedResult, $this->renderer->render($this->dataObjectMock)); + } + + /** + * @return array + */ + public function renderDataProvider() + { + return [ + [ + 'editable' => false, + 'onlyEdit' => false, + 'expectedResult' => 'some value' + ], + [ + 'editable' => false, + 'onlyEdit' => true, + 'expectedResult' => 'some value' + ], + [ + 'editable' => true, + 'onlyEdit' => false, + 'expectedResult' => '<div class="admin__grid-control">' + . '<span class="admin__grid-control-value">some value</span>' + . '<input type="text" class="input-text " name="test" value="some value"/>' + . '</div>' + ], + [ + 'editable' => true, + 'onlyEdit' => true, + 'expectedResult' => '<div class="admin__grid-control">' + . '<input type="text" class="input-text " name="test" value="some value"/>' + . '</div>' + ], + ]; + } +} diff --git a/app/code/Magento/Backend/view/adminhtml/templates/dashboard/index.phtml b/app/code/Magento/Backend/view/adminhtml/templates/dashboard/index.phtml index 5c9cf626e37f11d07b10cc5a3713308a8e33e06e..bd97edfa35b179c0e2b802932f9e42cba4882a15 100644 --- a/app/code/Magento/Backend/view/adminhtml/templates/dashboard/index.phtml +++ b/app/code/Magento/Backend/view/adminhtml/templates/dashboard/index.phtml @@ -10,7 +10,10 @@ <?php if (is_array($block->getChildBlock('diagrams')->getTabsIds())) : ?> <script> -require(['prototype'], function(){ +require([ + 'Magento_Ui/js/modal/alert', + 'prototype' +], function(alert){ window.changeDiagramsPeriod = function(periodObj) { periodParam = periodObj.value ? 'period/' + periodObj.value + '/' : ''; @@ -25,7 +28,9 @@ window.changeDiagramsPeriod = function(periodObj) { if (transport.responseText.isJSON()) { var response = transport.responseText.evalJSON() if (response.error) { - alert(response.message); + alert({ + content: response.message + }); } if(response.ajaxExpired && response.ajaxRedirect) { setLocation(response.ajaxRedirect); @@ -47,9 +52,11 @@ window.changeDiagramsPeriod = function(periodObj) { tabContentElementId = 'dashboard_diagram_totals'; try { if (transport.responseText.isJSON()) { - var response = transport.responseText.evalJSON() + var response = transport.responseText.evalJSON(); if (response.error) { - alert(response.message); + alert({ + content: response.message + }); } if(response.ajaxExpired && response.ajaxRedirect) { setLocation(response.ajaxRedirect); diff --git a/app/code/Magento/Backend/view/adminhtml/templates/media/uploader.phtml b/app/code/Magento/Backend/view/adminhtml/templates/media/uploader.phtml index d6bd7de2f1c0c5df116a271b504e356aa1e5da0c..a876ad6c6e59911a96ba92f860b0b43fb7155f94 100644 --- a/app/code/Magento/Backend/view/adminhtml/templates/media/uploader.phtml +++ b/app/code/Magento/Backend/view/adminhtml/templates/media/uploader.phtml @@ -31,9 +31,10 @@ require([ "jquery", 'mage/template', + 'Magento_Ui/js/modal/alert', "mage/translate", "jquery/file-uploader" -], function ($, mageTemplate) { +], function ($, mageTemplate, alert) { $('#fileupload').fileupload({ dataType: 'json', @@ -75,7 +76,9 @@ require([ $('#' + data.fileId) .delay(2000) .hide('highlight'); - alert($.mage.__('We don\'t recognize or support this file extension type.')); + alert({ + content: $.mage.__('We don\'t recognize or support this file extension type.') + }); } $('#' + data.fileId).remove(); }, diff --git a/app/code/Magento/Backend/view/adminhtml/templates/page/locale.phtml b/app/code/Magento/Backend/view/adminhtml/templates/page/locale.phtml index fd4ac471185b88563e994bb12c3da1d3c1e6e8e4..03347fbcbe6953245b1b14cc3534c1894d173049 100644 --- a/app/code/Magento/Backend/view/adminhtml/templates/page/locale.phtml +++ b/app/code/Magento/Backend/view/adminhtml/templates/page/locale.phtml @@ -11,16 +11,21 @@ <label class="label" for="footer_interface_locale"><span><?php /* @escapeNotVerified */ echo __('Interface Locale'); ?></span></label> <?php /* @escapeNotVerified */ echo $block->getLocaleSelect(); ?> <script> - (function () { - 'use strict'; + require([ + 'mage/validation/url' + ], + function (urlValidator) { + 'use strict'; - var elem = document.getElementById('footer_interface_locale'); + var elem = document.getElementById('footer_interface_locale'); - function onChange() { - window.location.href = '<?php /* @escapeNotVerified */ echo $block->getChangeLocaleUrl() ?>locale/' + elem.value + '/<?php /* @escapeNotVerified */ echo $block->getUrlForReferer() ?>'; - } + function onChange() { + urlValidator.redirect('<?php /* @escapeNotVerified */ echo $block->getChangeLocaleUrl() ?>locale/' + + elem.value + + '/<?php /* @escapeNotVerified */ echo $block->getUrlForReferer() ?>'); + } - elem.addEventListener('change', onChange); - })(); + elem.addEventListener('change', onChange); + }); </script> </div> diff --git a/app/code/Magento/Backend/view/adminhtml/templates/store/switcher.phtml b/app/code/Magento/Backend/view/adminhtml/templates/store/switcher.phtml index ad46dbeec25be6141c38a7bdba3503792fbb1df8..293733ae9d74e3390bb236fe5fc7189fcf77bdf6 100644 --- a/app/code/Magento/Backend/view/adminhtml/templates/store/switcher.phtml +++ b/app/code/Magento/Backend/view/adminhtml/templates/store/switcher.phtml @@ -130,7 +130,10 @@ </div> <script> -require(['jquery'], function(jQuery){ +require([ + 'jquery', + 'Magento_Ui/js/modal/confirm' +], function(jQuery, confirm){ (function($) { var $storesList = $('[data-role=stores-list]'); @@ -171,11 +174,19 @@ require(['jquery'], function(jQuery){ } else { <?php if ($block->getUseConfirm()): ?> - if (confirm("<?php /* @escapeNotVerified */ echo __('Please confirm scope switching. All data that hasn\'t been saved will be lost.') ?>")) { - reload(); - } else { - obj.value = '<?php echo $block->escapeHtml($block->getStoreId()) ?>'; - } + + confirm({ + content: "<?php /* @escapeNotVerified */ echo __('Please confirm scope switching. All data that hasn\'t been saved will be lost.') ?>", + actions: { + confirm: function() { + reload(); + }, + cancel: function() { + obj.value = '<?php echo $block->escapeHtml($block->getStoreId()) ?>'; + } + } + }); + <?php else: ?> reload(); <?php endif; ?> diff --git a/app/code/Magento/Backend/view/adminhtml/templates/widget/form/renderer/fieldset/element.phtml b/app/code/Magento/Backend/view/adminhtml/templates/widget/form/renderer/fieldset/element.phtml index b09be9491f003ffc98c7657c283030f7f6640a4e..392f9378beb519ab225a9cab5db71fb0dfc2f804 100644 --- a/app/code/Magento/Backend/view/adminhtml/templates/widget/form/renderer/fieldset/element.phtml +++ b/app/code/Magento/Backend/view/adminhtml/templates/widget/form/renderer/fieldset/element.phtml @@ -12,7 +12,7 @@ $element = $block->getElement(); $note = $element->getNote() ? '<div class="note" id="' . $element->getId() . '-note">' . $element->getNote() . '</div>' : ''; $elementBeforeLabel = $element->getExtType() == 'checkbox admin__control-checkbox' || $element->getExtType() == 'radio admin__control-radio'; -$addOn = $element->getBeforeElementHtml() || $element->getAfterElementHtml(); +$addOn = ($element->getBeforeElementHtml() || $element->getAfterElementHtml()) && !$element->getNoWrapAsAddon(); $fieldId = ($element->getHtmlContainerId()) ? ' id="' . $element->getHtmlContainerId() . '"' : ''; $fieldClass = "admin__field field field-{$element->getId()} {$element->getCssClass()}"; $fieldClass .= ($elementBeforeLabel) ? ' choice' : ''; @@ -38,7 +38,7 @@ $fieldAttributes = $fieldId . ' class="' . $fieldClass . '" ' <?php else: ?> <?php echo $element->getLabelHtml() ?> <div class="admin__field-control control"> - <?php /* @escapeNotVerified */ echo($addOn) ? '<div class="admin__field admin__field-option">' . $element->getElementHtml() . '</div>' : $element->getElementHtml(); ?> + <?php /* @escapeNotVerified */ echo($addOn) ? '<div class="admin__field">' . $element->getElementHtml() . '</div>' : $element->getElementHtml(); ?> <?php /* @escapeNotVerified */ echo $note ?> </div> <?php endif; ?> diff --git a/app/code/Magento/Backup/Model/Config/Backend/Cron.php b/app/code/Magento/Backup/Model/Config/Backend/Cron.php index e4204f26879db638b638e9efac18b443a2cc3032..133e6ad8636ae2dfdcf36f92f067dbd470b49eb7 100644 --- a/app/code/Magento/Backup/Model/Config/Backend/Cron.php +++ b/app/code/Magento/Backup/Model/Config/Backend/Cron.php @@ -33,7 +33,7 @@ class Cron extends \Magento\Framework\App\Config\Value * @param \Magento\Framework\Registry $registry * @param \Magento\Framework\App\Config\ScopeConfigInterface $config * @param \Magento\Framework\App\Config\ValueFactory $configValueFactory - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param string $runModelPath * @param array $data @@ -43,7 +43,7 @@ class Cron extends \Magento\Framework\App\Config\Value \Magento\Framework\Registry $registry, \Magento\Framework\App\Config\ScopeConfigInterface $config, \Magento\Framework\App\Config\ValueFactory $configValueFactory, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, $runModelPath = '', array $data = [] diff --git a/app/code/Magento/Backup/view/adminhtml/templates/backup/dialogs.phtml b/app/code/Magento/Backup/view/adminhtml/templates/backup/dialogs.phtml index b8e7ba06b8b9ee28b96feef769df14b3e6eaac7e..dc04861bece01c82873359970b919a2f78647b08 100644 --- a/app/code/Magento/Backup/view/adminhtml/templates/backup/dialogs.phtml +++ b/app/code/Magento/Backup/view/adminhtml/templates/backup/dialogs.phtml @@ -62,42 +62,45 @@ <div class="popup-content"> <div class="backup-messages" style="display: none;"><div class="messages"></div></div> <div class="messages"> - <div class="message message-warning"><?php /* @escapeNotVerified */ echo __('Please specify backup creation option.')?></div> + <div class="message message-warning"> + <?php /* @escapeNotVerified */ echo __('This may take a few moments.')?> + <?php /* @escapeNotVerified */ echo __('Be sure your store is in maintenance mode during backup.')?></div> </div> <form action="" method="post" id="backup-form" class="form-inline"> - <fieldset class="fieldset form-list question"> - <div class="field"> - <label for="backup_name" class="label"><span><?php /* @escapeNotVerified */ echo __('Backup Name')?></span></label> - <div class="control"> + <fieldset class="admin__fieldset form-list question"> + <div class="admin__field field _required"> + <label for="backup_name" class="admin__field-label"><span><?php /* @escapeNotVerified */ echo __('Backup Name')?></span></label> + <div class="admin__field-control"> <input type="text" name="backup_name" id="backup_name" - class="required-entry validate-alphanum-with-spaces validate-length maximum-length-50" + class="admin__control-text required-entry validate-alphanum-with-spaces validate-length maximum-length-50" maxlength="50" /> - <div class="note"> + <div class="admin__field-note"> <?php /* @escapeNotVerified */ echo __('Please use only letters (a-z or A-Z), numbers (0-9) or spaces in this field.'); ?> </div> </div> </div> - <div class="field maintenance-checkbox-container"> - <div class="control"> - <input type="checkbox" name="maintenance_mode" value="1" id="backup_maintenance_mode"/> - <label for="backup_maintenance_mode"><?php /* @escapeNotVerified */ echo __('Please put your store into maintenance mode during backup.')?></label> + <div class="admin__field field maintenance-checkbox-container"> + <label for="backup_maintenance_mode" class="admin__field-label"><span><?php /* @escapeNotVerified */ echo __('Maintenance mode')?></span></label> + <div class="admin__field-control"> + <div class="admin__field-option"> + <input class="admin__control-checkbox" type="checkbox" name="maintenance_mode" value="1" id="backup_maintenance_mode"/> + <label class="admin__field-label" for="backup_maintenance_mode"><?php /* @escapeNotVerified */ echo __('Please put your store into maintenance mode during backup.')?></label> + </div> </div> </div> - <div class="field maintenance-checkbox-container" id="exclude-media-checkbox-container" style="display: none;"> - <div class="control"> - <input type="checkbox" name="exclude_media" value="1" id="exclude_media"/> - <label for="exclude_media"><?php /* @escapeNotVerified */ echo __('Exclude media folder from backup') ?></label> + <div class="admin__field field maintenance-checkbox-container" id="exclude-media-checkbox-container" style="display: none;"> + <label for="exclude_media" class="admin__field-label"><span><?php /* @escapeNotVerified */ echo __('Exclude')?></span></label> + <div class="admin__field-control"> + <div class="admin__field-option"> + <input class="admin__control-checkbox" type="checkbox" name="exclude_media" value="1" id="exclude_media"/> + <label class="admin__field-label" for="exclude_media"><?php /* @escapeNotVerified */ echo __('Exclude media folder from backup') ?></label> + </div> </div> </div> </fieldset> </form> - - <div class="actions"> - <button type="button" class="action primary" data-mage-init='{"button":{"event":"submit","target":"#backup-form"}}'><?php /* @escapeNotVerified */ echo __('OK')?></button> - <button type="button" class="action cancel" onclick="backup.hidePopups()"><?php /* @escapeNotVerified */ echo __('Cancel')?></button> - </div> </div> </div> </div> @@ -158,11 +161,6 @@ </fieldset> </div> </form> - - <div class="actions"> - <button type="button" class="action primary" data-mage-init='{"button":{"event":"submit","target":"#rollback-form"}}'><?php /* @escapeNotVerified */ echo __('OK')?></button> - <button type="button" class="action cancel" onclick="backup.hidePopups()"><?php /* @escapeNotVerified */ echo __('Cancel')?></button> - </div> </div> </div> </div> diff --git a/app/code/Magento/Braintree/Block/PayPal/Shortcut.php b/app/code/Magento/Braintree/Block/PayPal/Shortcut.php index dfb20982e85ae27bc82e91dfea065d6d6708baaa..917265a948f7948aa86e1c1bd472c3176c9eacc6 100644 --- a/app/code/Magento/Braintree/Block/PayPal/Shortcut.php +++ b/app/code/Magento/Braintree/Block/PayPal/Shortcut.php @@ -15,6 +15,14 @@ use Magento\Braintree\Model\Config\PayPal as PayPalConfig; */ class Shortcut extends \Magento\Framework\View\Element\Template implements CatalogBlock\ShortcutInterface { + /** + * Key for the flag of mini cart + */ + const MINI_CART_FLAG_KEY = 'is_in_mini_cart'; + + /** + * Default template name + */ const PAYPAL_SHORTCUT_TEMPLATE = 'PayPal/shortcut.phtml'; /** @@ -88,9 +96,17 @@ class Shortcut extends \Magento\Framework\View\Element\Template implements Catal /** * @return bool */ - protected function isInMiniCart() + public function isInMiniCart() + { + return (bool)$this->getData(self::MINI_CART_FLAG_KEY); + } + + /** + * @return string + */ + public function getButtonDataUrl() { - return ($this->getContainer()->getModuleName() == 'Magento_Catalog'); + return $this->_urlBuilder->getUrl('braintree/paypal/getbuttondata'); } /** diff --git a/app/code/Magento/Braintree/Controller/PayPal/GetButtonData.php b/app/code/Magento/Braintree/Controller/PayPal/GetButtonData.php new file mode 100644 index 0000000000000000000000000000000000000000..4d070aa489d2cd0a0c944156625d175f9eca4950 --- /dev/null +++ b/app/code/Magento/Braintree/Controller/PayPal/GetButtonData.php @@ -0,0 +1,61 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Braintree\Controller\PayPal; + +use Magento\Checkout\Model\Session; +use Magento\Framework\App\Action\Context; +use Magento\Framework\Controller\ResultFactory; +use Magento\Framework\Controller\ResultInterface; +use Magento\Framework\Exception\LocalizedException; + +/** + * Class GetButtonData + */ +class GetButtonData extends \Magento\Framework\App\Action\Action +{ + /** + * @var Session + */ + private $checkoutSession; + + /** + * Constructor + * + * @param Context $context + * @param Session $checkoutSession + */ + public function __construct(Context $context, Session $checkoutSession) + { + parent::__construct($context); + $this->checkoutSession = $checkoutSession; + } + + /** + * @return ResultInterface + * @throws LocalizedException + */ + public function execute() + { + $isAjax = $this->_request->getParam('isAjax'); + + if (!$isAjax) { + throw new LocalizedException(__('Wrong type of request.')); + } + + $items = $this->checkoutSession->getQuote()->getAllItems(); + $response = [ + 'isEmpty' => 0 === count($items), + 'amount' => $this->checkoutSession->getQuote()->getBaseGrandTotal(), + 'currency' => $this->checkoutSession->getQuote()->getCurrency()->getBaseCurrencyCode(), + ]; + + /** @var \Magento\Framework\Controller\Result\Json $resultJson */ + $resultJson = $this->resultFactory->create(ResultFactory::TYPE_JSON); + $resultJson->setData($response); + + return $resultJson; + } +} diff --git a/app/code/Magento/Braintree/Model/PaymentMethod.php b/app/code/Magento/Braintree/Model/PaymentMethod.php index 52f635426bd568a4d539fd4911d47e5e6e74fe22..8e14ed191e350097a62984c7570d667c149a077b 100644 --- a/app/code/Magento/Braintree/Model/PaymentMethod.php +++ b/app/code/Magento/Braintree/Model/PaymentMethod.php @@ -161,6 +161,11 @@ class PaymentMethod extends \Magento\Payment\Model\Method\Cc */ protected $braintreeCreditCard; + /** + * @var \Magento\Sales\Api\OrderRepositoryInterface + */ + protected $orderRepository; + /** * @param \Magento\Framework\Model\Context $context * @param \Magento\Framework\Registry $registry @@ -181,7 +186,8 @@ class PaymentMethod extends \Magento\Payment\Model\Method\Cc * @param TransactionCollectionFactory $salesTransactionCollectionFactory * @param \Magento\Framework\App\ProductMetadataInterface $productMetaData * @param \Magento\Directory\Model\RegionFactory $regionFactory - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource + * @param \Magento\Sales\Api\OrderRepositoryInterface $orderRepository * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -206,7 +212,8 @@ class PaymentMethod extends \Magento\Payment\Model\Method\Cc TransactionCollectionFactory $salesTransactionCollectionFactory, \Magento\Framework\App\ProductMetadataInterface $productMetaData, \Magento\Directory\Model\RegionFactory $regionFactory, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Sales\Api\OrderRepositoryInterface $orderRepository, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { @@ -234,6 +241,7 @@ class PaymentMethod extends \Magento\Payment\Model\Method\Cc $this->salesTransactionCollectionFactory = $salesTransactionCollectionFactory; $this->productMetaData = $productMetaData; $this->regionFactory = $regionFactory; + $this->orderRepository = $orderRepository; } /** @@ -521,7 +529,7 @@ class PaymentMethod extends \Magento\Payment\Model\Method\Cc /** * @param InfoInterface $payment - * @param float $amount + * @param string $amount * @return $this * @throws LocalizedException */ @@ -574,13 +582,14 @@ class PaymentMethod extends \Magento\Payment\Model\Method\Cc * Captures specified amount * * @param InfoInterface $payment - * @param float $amount + * @param string $amount * @return $this * @throws LocalizedException */ public function capture(InfoInterface $payment, $amount) { try { + /** @var \Magento\Sales\Model\Order\Payment $payment */ if ($payment->getCcTransId()) { $collection = $this->salesTransactionCollectionFactory->create() ->addFieldToFilter('payment_id', $payment->getId()) @@ -592,8 +601,11 @@ class PaymentMethod extends \Magento\Payment\Model\Method\Cc $this->_debug([$payment->getCcTransId().' - '.$amount]); $this->_debug($this->_convertObjToArray($result)); if ($result->success) { - $payment->setIsTransactionClosed(0) + $payment->setIsTransactionClosed(false) ->setShouldCloseParentTransaction(false); + if ($this->isFinalCapture($payment->getParentId(), $amount)) { + $payment->setShouldCloseParentTransaction(true); + } } else { throw new LocalizedException($this->errorHelper->parseBraintreeError($result)); } @@ -643,7 +655,7 @@ class PaymentMethod extends \Magento\Payment\Model\Method\Cc : $this->braintreeTransaction->refund($transactionId, $amount); $this->_debug($this->_convertObjToArray($result)); if ($result->success) { - $payment->setIsTransactionClosed(1); + $payment->setIsTransactionClosed(true); } else { throw new LocalizedException($this->errorHelper->parseBraintreeError($result)); } @@ -733,7 +745,7 @@ class PaymentMethod extends \Magento\Payment\Model\Method\Cc } } if ($match) { - $payment->setIsTransactionClosed(1); + $payment->setIsTransactionClosed(true); } } return $this; @@ -872,7 +884,7 @@ class PaymentMethod extends \Magento\Payment\Model\Method\Cc * * @param \Magento\Framework\DataObject $payment * @param \Braintree_Result_Successful $result - * @param float $amount + * @param string $amount * @return \Magento\Framework\DataObject */ protected function processSuccessResult( @@ -880,15 +892,19 @@ class PaymentMethod extends \Magento\Payment\Model\Method\Cc \Braintree_Result_Successful $result, $amount ) { + /** @var \Magento\Sales\Model\Order\Payment $payment */ $payment->setStatus(self::STATUS_APPROVED) ->setCcTransId($result->transaction->id) ->setLastTransId($result->transaction->id) ->setTransactionId($result->transaction->id) - ->setIsTransactionClosed(0) + ->setIsTransactionClosed(false) ->setCcLast4($result->transaction->creditCardDetails->last4) ->setAdditionalInformation($this->getExtraTransactionInformation($result->transaction)) ->setAmount($amount) ->setShouldCloseParentTransaction(false); + if ($this->isFinalCapture($payment->getParentId(), $amount)) { + $payment->setShouldCloseParentTransaction(true); + } if (isset($result->transaction->creditCard['token']) && $result->transaction->creditCard['token']) { $payment->setTransactionAdditionalInfo('token', $result->transaction->creditCard['token']); } @@ -945,4 +961,21 @@ class PaymentMethod extends \Magento\Payment\Model\Method\Cc { return json_decode(json_encode($data), true); } + + /** + * Checks whether the capture is final + * + * @param string $orderId + * @param string $amount + * @return bool + */ + protected function isFinalCapture($orderId, $amount) + { + if (!empty($orderId)) { + $order = $this->orderRepository->get($orderId); + return (float)$order->getTotalDue() === (float) $amount; + } + + return false; + } } diff --git a/app/code/Magento/Braintree/Model/PaymentMethod/PayPal.php b/app/code/Magento/Braintree/Model/PaymentMethod/PayPal.php index 05cf0b39b7c7266cfa45c69f2f6fc542cb83d177..50200468ff8560426fd3689436bcac8b01c1dcd2 100644 --- a/app/code/Magento/Braintree/Model/PaymentMethod/PayPal.php +++ b/app/code/Magento/Braintree/Model/PaymentMethod/PayPal.php @@ -66,9 +66,9 @@ class PayPal extends \Magento\Braintree\Model\PaymentMethod * @param TransactionCollectionFactory $salesTransactionCollectionFactory * @param \Magento\Framework\App\ProductMetadataInterface $productMetaData * @param \Magento\Directory\Model\RegionFactory $regionFactory + * @param \Magento\Sales\Api\OrderRepositoryInterface $orderRepository * @param \Magento\Braintree\Model\Config\PayPal $payPalConfig - * @param BraintreeTransaction $braintreeTransaction - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -93,8 +93,9 @@ class PayPal extends \Magento\Braintree\Model\PaymentMethod TransactionCollectionFactory $salesTransactionCollectionFactory, \Magento\Framework\App\ProductMetadataInterface $productMetaData, \Magento\Directory\Model\RegionFactory $regionFactory, + \Magento\Sales\Api\OrderRepositoryInterface $orderRepository, \Magento\Braintree\Model\Config\PayPal $payPalConfig, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { @@ -118,6 +119,7 @@ class PayPal extends \Magento\Braintree\Model\PaymentMethod $salesTransactionCollectionFactory, $productMetaData, $regionFactory, + $orderRepository, $resource, $resourceCollection, $data @@ -232,7 +234,7 @@ class PayPal extends \Magento\Braintree\Model\PaymentMethod ->setCcTransId($result->transaction->id) ->setLastTransId($result->transaction->id) ->setTransactionId($result->transaction->id) - ->setIsTransactionClosed(0) + ->setIsTransactionClosed(false) ->setAdditionalInformation($additionalInformation) ->setAmount($amount) ->setShouldCloseParentTransaction(false); @@ -288,13 +290,14 @@ class PayPal extends \Magento\Braintree\Model\PaymentMethod public function capture(InfoInterface $payment, $amount) { try { + /** @var \Magento\Sales\Model\Order\Payment $payment */ if ($payment->getCcTransId()) { $result = $this->braintreeTransaction->submitForSettlement($payment->getCcTransId(), $amount); $this->_debug([$payment->getCcTransId().' - '.$amount]); $this->_debug($this->_convertObjToArray($result)); if ($result->success) { - $payment->setIsTransactionClosed(0) - ->setShouldCloseParentTransaction(false); + $payment->setIsTransactionClosed(false) + ->setShouldCloseParentTransaction(true); } else { throw new LocalizedException($this->errorHelper->parseBraintreeError($result)); } diff --git a/app/code/Magento/Braintree/Model/System/Config/Backend/Countrycreditcard.php b/app/code/Magento/Braintree/Model/System/Config/Backend/Countrycreditcard.php index 17291f11bc9d59f5f80da591e8e072b01209eb4a..7e234209d001fe8b21439b3f755f2434e791678c 100644 --- a/app/code/Magento/Braintree/Model/System/Config/Backend/Countrycreditcard.php +++ b/app/code/Magento/Braintree/Model/System/Config/Backend/Countrycreditcard.php @@ -17,7 +17,7 @@ class Countrycreditcard extends \Magento\Framework\App\Config\Value * @param \Magento\Framework\Registry $registry * @param \Magento\Framework\App\Config\ScopeConfigInterface $config * @param \Magento\Framework\Math\Random $mathRandom - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -26,7 +26,7 @@ class Countrycreditcard extends \Magento\Framework\App\Config\Value \Magento\Framework\Registry $registry, \Magento\Framework\App\Config\ScopeConfigInterface $config, \Magento\Framework\Math\Random $mathRandom, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Braintree/Observer/AddPaypalShortcuts.php b/app/code/Magento/Braintree/Observer/AddPaypalShortcuts.php index 4edd4491b06786890dac745987b61f29dee8d41d..fb4efd7bf9b59e99ffde4c2519e3ed035e587918 100644 --- a/app/code/Magento/Braintree/Observer/AddPaypalShortcuts.php +++ b/app/code/Magento/Braintree/Observer/AddPaypalShortcuts.php @@ -6,6 +6,7 @@ namespace Magento\Braintree\Observer; use Magento\Framework\Event\ObserverInterface; +use Magento\Braintree\Block\PayPal\Shortcut; class AddPaypalShortcuts implements ObserverInterface { @@ -43,21 +44,20 @@ class AddPaypalShortcuts implements ObserverInterface { //Don't display shortcut on product view page if (!$this->methodPayPal->isActive() || - !$this->paypalConfig->isShortcutCheckoutEnabled() || - $observer->getEvent()->getIsCatalogProduct()) { + !$this->paypalConfig->isShortcutCheckoutEnabled()) { return; } /** @var \Magento\Catalog\Block\ShortcutButtons $shortcutButtons */ $shortcutButtons = $observer->getEvent()->getContainer(); - /** @var \Magento\Braintree\Block\PayPal\Shortcut $shortcut */ + /** @var Shortcut $shortcut */ $shortcut = $shortcutButtons->getLayout()->createBlock( self::PAYPAL_SHORTCUT_BLOCK, '', [ 'data' => [ - 'container' => $shortcutButtons, + Shortcut::MINI_CART_FLAG_KEY => !$observer->getEvent()->getIsCatalogProduct() ] ] ); @@ -65,9 +65,7 @@ class AddPaypalShortcuts implements ObserverInterface if ($shortcut->skipShortcutForGuest()) { return; } - $shortcut->setShowOrPosition( - $observer->getEvent()->getOrPosition() - ); + $shortcut->setShowOrPosition($observer->getEvent()->getOrPosition()); $shortcutButtons->addShortcut($shortcut); } } diff --git a/app/code/Magento/Braintree/Test/Unit/Block/PayPal/ShortcutTest.php b/app/code/Magento/Braintree/Test/Unit/Block/PayPal/ShortcutTest.php index 0f137cc65cf43de4a8dfd3fa44825d70129074af..a7392181a1a9b2d1ffa0032dc527a55d1188d42f 100644 --- a/app/code/Magento/Braintree/Test/Unit/Block/PayPal/ShortcutTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Block/PayPal/ShortcutTest.php @@ -5,6 +5,11 @@ */ namespace Magento\Braintree\Test\Unit\Block\PayPal; +use Magento\Braintree\Block\PayPal\Shortcut; + +/** + * Class ShortcutTest + */ class ShortcutTest extends \PHPUnit_Framework_TestCase { /** @@ -48,7 +53,7 @@ class ShortcutTest extends \PHPUnit_Framework_TestCase protected $container; /** - * @var \Magento\Braintree\Block\PayPal\Shortcut + * @var Shortcut */ protected $block; @@ -256,11 +261,7 @@ class ShortcutTest extends \PHPUnit_Framework_TestCase 'Magento\Braintree\Block\PayPal\Shortcut', [ 'data' => [ - 'container' => new \Magento\Framework\DataObject( - [ - 'module_name' => 'Magento_Catalog', - ] - ) + Shortcut::MINI_CART_FLAG_KEY => 1 ] ] ); @@ -283,11 +284,7 @@ class ShortcutTest extends \PHPUnit_Framework_TestCase [ 'mathRandom' => $this->mathRandomMock, 'data' => [ - 'container' => new \Magento\Framework\DataObject( - [ - 'module_name' => 'Magento_Checkout', - ] - ) + Shortcut::MINI_CART_FLAG_KEY => 0 ] ] ); diff --git a/app/code/Magento/Braintree/Test/Unit/Controller/PayPal/GetButtonDataTest.php b/app/code/Magento/Braintree/Test/Unit/Controller/PayPal/GetButtonDataTest.php new file mode 100644 index 0000000000000000000000000000000000000000..75718aa2f9c35289a65a7230161848539d2db14b --- /dev/null +++ b/app/code/Magento/Braintree/Test/Unit/Controller/PayPal/GetButtonDataTest.php @@ -0,0 +1,190 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Braintree\Test\Unit\Controller\PayPal; + +use Magento\Checkout\Model\Session; +use Magento\Framework\App\Action\Context; +use Magento\Framework\App\RequestInterface; +use Magento\Framework\Controller\ResultFactory; +use Magento\Braintree\Controller\PayPal\GetButtonData; + +/** + * Class GetButtonDataTest + * + * @see \Magento\Braintree\Controller\PayPal\GetButtonData + */ +class GetButtonDataTest extends \PHPUnit_Framework_TestCase +{ + const AMOUNT = 10; + + const CURRENCY = 'USD'; + + /** + * @var Context|\PHPUnit_Framework_MockObject_MockObject + */ + private $contextMock; + + /** + * @var Session|\PHPUnit_Framework_MockObject_MockObject + */ + private $checkoutSessionMock; + + /** + * Run test for execute method + * + * @param array $response + * @param array $data + * @return void + * + * @dataProvider dataProviderTestExecute + */ + public function testExecute(array $response, array $data) + { + $this->contextMock = $this->getMockBuilder('Magento\Framework\App\Action\Context') + ->disableOriginalConstructor() + ->getMock(); + + $this->contextMock->expects(static::once()) + ->method('getRequest') + ->willReturn($this->getRequestMock(true)); + $this->contextMock->expects(static::once()) + ->method('getResultFactory') + ->willReturn($this->getResultFactoryMock($response)); + + $this->checkoutSessionMock = $this->getMockBuilder('Magento\Checkout\Model\Session') + ->disableOriginalConstructor() + ->getMock(); + $quoteMock = $this->getMockBuilder('Magento\Quote\Model\Quote') + ->setMethods(['getBaseGrandTotal', 'getAllItems', 'getCurrency']) + ->disableOriginalConstructor() + ->getMock(); + + $this->checkoutSessionMock->expects(static::exactly(3)) + ->method('getQuote') + ->willReturn($quoteMock); + + $quoteMock->expects(static::once()) + ->method('getAllItems') + ->willReturn($data['items']); + $quoteMock->expects(static::once()) + ->method('getBaseGrandTotal') + ->willReturn($data['amount']); + + $currencyMock = $this->getMockBuilder('Magento\Quote\Api\Data\CurrencyInterface') + ->getMockForAbstractClass(); + + $quoteMock->expects(static::once()) + ->method('getCurrency') + ->willReturn($currencyMock); + + $currencyMock->expects(static::once()) + ->method('getBaseCurrencyCode') + ->willReturn($data['currency']); + + $getButtonData = new GetButtonData($this->contextMock, $this->checkoutSessionMock); + $getButtonData->execute(); + } + + /** + * @return array + */ + public function dataProviderTestExecute() + { + return [ + [ + 'response' => [ + 'isEmpty' => false, + 'amount' => self::AMOUNT, + 'currency' => self::CURRENCY, + ], + 'data' => [ + 'items' => [1,2,3], + 'amount' => self::AMOUNT, + 'currency' => self::CURRENCY, + ] + ], + [ + 'response' => [ + 'isEmpty' => true, + 'amount' => 0, + 'currency' => self::CURRENCY, + ], + 'data' => [ + 'items' => [], + 'amount' => 0, + 'currency' => self::CURRENCY, + ] + ] + ]; + } + + /** + * @param array $response + * @return ResultFactory|\PHPUnit_Framework_MockObject_MockObject + */ + public function getResultFactoryMock(array $response) + { + $resultFactoryMock = $this->getMockBuilder('Magento\Framework\Controller\ResultFactory') + ->disableOriginalConstructor() + ->getMock(); + $resultJsonMock = $this->getMockBuilder('Magento\Framework\Controller\Result\Json') + ->disableOriginalConstructor() + ->getMock(); + + $resultFactoryMock->expects(static::once()) + ->method('create') + ->with(ResultFactory::TYPE_JSON) + ->willReturn($resultJsonMock); + + $resultJsonMock->expects(static::once()) + ->method('setData') + ->with($response); + + return $resultFactoryMock; + } + + /** + * Run test for execute method (exception) + * + * @expectedException \Magento\Framework\Exception\LocalizedException + * @expectedExceptionMessage Wrong type of request. + */ + public function testExecuteException() + { + $this->contextMock = $this->getMockBuilder('Magento\Framework\App\Action\Context') + ->disableOriginalConstructor() + ->getMock(); + $this->contextMock->expects(static::once()) + ->method('getRequest') + ->willReturn($this->getRequestMock(false)); + + $this->checkoutSessionMock = $this->getMockBuilder('Magento\Checkout\Model\Session') + ->disableOriginalConstructor() + ->getMock(); + $this->checkoutSessionMock->expects(static::never()) + ->method('getQuote'); + + $getButtonData = new GetButtonData($this->contextMock, $this->checkoutSessionMock); + $getButtonData->execute(); + } + + /** + * @param bool $result + * @return RequestInterface|\PHPUnit_Framework_MockObject_MockObject + */ + public function getRequestMock($result) + { + $requestMock = $this->getMockBuilder('Magento\Framework\App\RequestInterface') + ->getMockForAbstractClass(); + + $requestMock->expects(static::once()) + ->method('getParam') + ->with('isAjax') + ->willReturn($result); + + return $requestMock; + } +} diff --git a/app/code/Magento/Braintree/Test/Unit/Model/PaymentMethod/PayPalTest.php b/app/code/Magento/Braintree/Test/Unit/Model/PaymentMethod/PayPalTest.php index 1e9f0a53010af9bb7f5a3b322048d617b9d83e40..15a689c8663a0819986f0051996d903297b8848e 100644 --- a/app/code/Magento/Braintree/Test/Unit/Model/PaymentMethod/PayPalTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Model/PaymentMethod/PayPalTest.php @@ -761,8 +761,8 @@ class PayPalTest extends \PHPUnit_Framework_TestCase ->method('critical'); $this->model->capture($paymentObject, $amount); - $this->assertEquals(0, $paymentObject->getIsTransactionClosed()); - $this->assertFalse($paymentObject->getShouldCloseParentTransaction()); + $this->assertEquals(false, $paymentObject->getIsTransactionClosed()); + $this->assertEquals(true, $paymentObject->getShouldCloseParentTransaction()); } /** diff --git a/app/code/Magento/Braintree/Test/Unit/Model/PaymentMethodTest.php b/app/code/Magento/Braintree/Test/Unit/Model/PaymentMethodTest.php index 7260ba71c79d704b81acb210d35a797f7c49845f..f8f0494c128672811a883a0f832ae464b5f663dc 100644 --- a/app/code/Magento/Braintree/Test/Unit/Model/PaymentMethodTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Model/PaymentMethodTest.php @@ -119,6 +119,14 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase */ protected $appStateMock; + /** + * @var \Magento\Sales\Api\OrderRepositoryInterface|\PHPUnit_Framework_MockObject_MockObject + */ + protected $orderRepository; + + /** + * @SuppressWarnings(PHPMD.ExcessiveMethodLength) + */ protected function setUp() { $this->contextMock = $this->getMockBuilder('\Magento\Framework\Model\Context') @@ -169,6 +177,8 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase $this->contextMock->expects($this->any()) ->method('getAppState') ->willReturn($this->appStateMock); + $this->orderRepository = $this->getMockBuilder('Magento\Sales\Api\OrderRepositoryInterface') + ->getMockForAbstractClass(); $this->objectManagerHelper = new ObjectManagerHelper($this); $this->model = $this->objectManagerHelper->getObject( 'Magento\Braintree\Model\PaymentMethod', @@ -185,6 +195,7 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase 'logger' => $this->loggerMock, 'braintreeTransaction' => $this->braintreeTransactionMock, 'braintreeCreditCard' => $this->braintreeCreditCardMock, + 'orderRepository' => $this->orderRepository ] ); $this->infoInstanceMock = $this->getMockForAbstractClass( @@ -785,6 +796,16 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase ->willReturn($appState); } + $paymentObject->setParentId('1'); + $order = $this->getMockBuilder('Magento\Sales\Api\Data\OrderInterface') + ->getMockForAbstractClass(); + $order->expects($this->once()) + ->method('getTotalDue') + ->willReturn(10.02); + $this->orderRepository->expects($this->once()) + ->method('get') + ->willReturn($order); + $this->assertEquals($this->model, $this->model->authorize($paymentObject, $amount)); foreach ($expectedPaymentFields as $key => $value) { if ($key == 'getTransactionAdditionalInfo') { @@ -1751,6 +1772,16 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase $this->psrLoggerMock->expects($this->never()) ->method('critical'); + $paymentObject->setParentId('1'); + $order = $this->getMockBuilder('Magento\Sales\Api\Data\OrderInterface') + ->getMockForAbstractClass(); + $order->expects($this->once()) + ->method('getTotalDue') + ->willReturn(10.02); + $this->orderRepository->expects($this->once()) + ->method('get') + ->willReturn($order); + $this->model->capture($paymentObject, $amount); $this->assertEquals(0, $paymentObject->getIsTransactionClosed()); $this->assertFalse($paymentObject->getShouldCloseParentTransaction()); @@ -1893,6 +1924,16 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase ->method('sale') ->willReturn($result); + $paymentObject->setParentId('1'); + $order = $this->getMockBuilder('Magento\Sales\Api\Data\OrderInterface') + ->getMockForAbstractClass(); + $order->expects($this->once()) + ->method('getTotalDue') + ->willReturn(10.02); + $this->orderRepository->expects($this->once()) + ->method('get') + ->willReturn($order); + $this->model->capture($paymentObject, $amount); $this->assertEquals(0, $paymentObject->getIsTransactionClosed()); $this->assertFalse($paymentObject->getShouldCloseParentTransaction()); @@ -2075,6 +2116,16 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase ] )->willReturn($resultSuccess); + $paymentObject->setParentId('1'); + $order = $this->getMockBuilder('Magento\Sales\Api\Data\OrderInterface') + ->getMockForAbstractClass(); + $order->expects($this->once()) + ->method('getTotalDue') + ->willReturn(10.02); + $this->orderRepository->expects($this->once()) + ->method('get') + ->willReturn($order); + $this->model->capture($paymentObject, $amount); $this->assertEquals(PaymentMethod::STATUS_APPROVED, $paymentObject->getStatus()); $this->assertEquals($amount, $paymentObject->getAmount()); diff --git a/app/code/Magento/Braintree/Test/Unit/Model/System/Config/Backend/CountrycreditcardTest.php b/app/code/Magento/Braintree/Test/Unit/Model/System/Config/Backend/CountrycreditcardTest.php index 8857a72b6da584eccbe376bb79ab2e989db3bb83..e970b41d856f8f6c9e08cf340f666f99819c61fc 100644 --- a/app/code/Magento/Braintree/Test/Unit/Model/System/Config/Backend/CountrycreditcardTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Model/System/Config/Backend/CountrycreditcardTest.php @@ -38,7 +38,7 @@ class CountrycreditcardTest extends \PHPUnit_Framework_TestCase protected function setUp() { - $this->resourceMock = $this->getMockForAbstractClass('\Magento\Framework\Model\ModelResource\AbstractResource'); + $this->resourceMock = $this->getMockForAbstractClass('\Magento\Framework\Model\ResourceModel\AbstractResource'); $this->mathRandomMock = $this->getMockBuilder( '\Magento\Framework\Math\Random' )->disableOriginalConstructor() diff --git a/app/code/Magento/Braintree/Test/Unit/Observer/AddPaypalShortcutsTest.php b/app/code/Magento/Braintree/Test/Unit/Observer/AddPaypalShortcutsTest.php index 1fd4c902eaf0ed8d2d99d0d939018bc178171eef..0182982ce8a1e9302a1ad2ce5ec1032230e6c4e7 100644 --- a/app/code/Magento/Braintree/Test/Unit/Observer/AddPaypalShortcutsTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Observer/AddPaypalShortcutsTest.php @@ -6,6 +6,7 @@ namespace Magento\Braintree\Test\Unit\Observer; +use Magento\Braintree\Block\PayPal\Shortcut; use Magento\Braintree\Observer\AddPaypalShortcuts; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper; @@ -53,7 +54,13 @@ class AddPaypalShortcutsTest extends \PHPUnit_Framework_TestCase ); } - public function testAddPaypalShortcuts() + /** + * @param bool $isCatalogProduct + * @param bool $isInMiniCart + * + * @dataProvider dataProviderTestAddPaypalShortcuts + */ + public function testAddPaypalShortcuts($isCatalogProduct, $isInMiniCart) { $orPosition = 'before'; @@ -63,7 +70,7 @@ class AddPaypalShortcutsTest extends \PHPUnit_Framework_TestCase $event = new \Magento\Framework\DataObject( [ - 'is_catalog_product' => false, + 'is_catalog_product' => $isCatalogProduct, 'container' => $containerMock, 'or_position' => $orPosition, ] @@ -100,7 +107,7 @@ class AddPaypalShortcutsTest extends \PHPUnit_Framework_TestCase '', [ 'data' => [ - 'container' => $containerMock, + Shortcut::MINI_CART_FLAG_KEY => $isInMiniCart, ] ] )->willReturn($shortcutMock); @@ -116,6 +123,17 @@ class AddPaypalShortcutsTest extends \PHPUnit_Framework_TestCase $this->addPaypalShortcutsObserver->execute($observer); } + /** + * @return array + */ + public function dataProviderTestAddPaypalShortcuts() + { + return [ + ['isCatalogProduct' => true, 'isInMiniCart' => false], + ['isCatalogProduct' => false, 'isInMiniCart' => true], + ]; + } + public function testAddPaypalShortcutsNotActive() { $observer = new \Magento\Framework\Event\Observer( @@ -166,38 +184,4 @@ class AddPaypalShortcutsTest extends \PHPUnit_Framework_TestCase $this->addPaypalShortcutsObserver->execute($observer); } - - public function testAddPaypalShortcutsSkipProductView() - { - $orPosition = 'before'; - - $containerMock = $this->getMockBuilder('\Magento\Catalog\Block\ShortcutButtons') - ->disableOriginalConstructor() - ->getMock(); - - $event = new \Magento\Framework\DataObject( - [ - 'is_catalog_product' => true, - 'container' => $containerMock, - 'or_position' => $orPosition, - ] - ); - $observer = new \Magento\Framework\Event\Observer( - [ - 'event' => $event, - ] - ); - - $this->paypalMethodMock->expects($this->once()) - ->method('isActive') - ->willReturn(true); - $this->paypalConfigMock->expects($this->once()) - ->method('isShortcutCheckoutEnabled') - ->willReturn(true); - - $containerMock->expects($this->never()) - ->method('getLayout'); - - $this->addPaypalShortcutsObserver->execute($observer); - } } diff --git a/app/code/Magento/Braintree/etc/events.xml b/app/code/Magento/Braintree/etc/events.xml index 843cf78f7cf0cd2d6c7d74e1ef36d86cb3bc9509..835d6b407b01484554470ae8a606dff6cdedb20a 100644 --- a/app/code/Magento/Braintree/etc/events.xml +++ b/app/code/Magento/Braintree/etc/events.xml @@ -7,12 +7,12 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="sales_order_shipment_save_after"> - <observer name="braintree" instance="Magento\Braintree\Observer\ProcessBraintreePayment" method="execute" /> + <observer name="braintree" instance="Magento\Braintree\Observer\ProcessBraintreePayment" /> </event> <event name="customer_delete_commit_after"> - <observer name="braintree" instance="Magento\Braintree\Observer\DeleteBraintreeCustomer" method="execute" /> + <observer name="braintree" instance="Magento\Braintree\Observer\DeleteBraintreeCustomer" /> </event> <event name="checkout_submit_before"> - <observer name="braintree" instance="Magento\Braintree\Observer\ProcessBraintreeAddress" method="execute" /> + <observer name="braintree" instance="Magento\Braintree\Observer\ProcessBraintreeAddress" /> </event> </config> diff --git a/app/code/Magento/Braintree/etc/frontend/di.xml b/app/code/Magento/Braintree/etc/frontend/di.xml index ddc18722e8df532bf34fb3e30b4122e24e4e8445..83dc6607ed3160f5719646521ffcb74b8a822c34 100644 --- a/app/code/Magento/Braintree/etc/frontend/di.xml +++ b/app/code/Magento/Braintree/etc/frontend/di.xml @@ -21,4 +21,11 @@ </argument> </arguments> </type> + <type name="Magento\Framework\Url\SecurityInfo"> + <arguments> + <argument name="secureUrlList" xsi:type="array"> + <item name="braintree" xsi:type="string">/braintree/</item> + </argument> + </arguments> + </type> </config> diff --git a/app/code/Magento/Braintree/etc/frontend/events.xml b/app/code/Magento/Braintree/etc/frontend/events.xml index c9afec78aa4a43feb8841274ba8dd6dcc7a6e47c..6e7b06bf0c86e1a60bd062a3c9168e27ccca15f7 100644 --- a/app/code/Magento/Braintree/etc/frontend/events.xml +++ b/app/code/Magento/Braintree/etc/frontend/events.xml @@ -7,6 +7,6 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="shortcut_buttons_container"> - <observer name="braintree_paypal_shortcuts" instance="Magento\Braintree\Observer\AddPaypalShortcuts" method="execute" /> + <observer name="braintree_paypal_shortcuts" instance="Magento\Braintree\Observer\AddPaypalShortcuts" /> </event> </config> diff --git a/app/code/Magento/Braintree/view/adminhtml/templates/data_js.phtml b/app/code/Magento/Braintree/view/adminhtml/templates/data_js.phtml index cbfe3dcda5f9f52c183a7382e9cf4c33d5a50811..70634e81b0992114ed262c1781c46dd5c4f1fb07 100644 --- a/app/code/Magento/Braintree/view/adminhtml/templates/data_js.phtml +++ b/app/code/Magento/Braintree/view/adminhtml/templates/data_js.phtml @@ -7,21 +7,20 @@ /** * @var $block \Magento\Braintree\Block\Datajs */ -?> -<?php + $arrayData = [ "kountId" => $this->helper('Magento\Braintree\Helper\Data')->getKountId() ? $this->helper('Magento\Braintree\Helper\Data')->getKountId() : false, "formId" =>$block->getFormId(), "merchantId" => $block->getMerchantId(), - "braintreeDataJs" => $block->getJsSrc(), + "braintreeDataJs" => $block->escapeUrl($block->getJsSrc()), ]; $serializedFormData = $this->helper('Magento\Framework\Json\Helper\Data')->jsonEncode($arrayData); ?> <script type="text/x-magento-init"> { "body": { - "braintreeDataJs": <?php /* @escapeNotVerified */ echo $serializedFormData ?> + "braintreeDataJs": <?php /* @noEscape */ echo $serializedFormData ?> } } </script> diff --git a/app/code/Magento/Braintree/view/adminhtml/templates/form.phtml b/app/code/Magento/Braintree/view/adminhtml/templates/form.phtml index f13f2d77b1c086e288bf87d21556e231f379c0b8..c27901cd4e8704fc7fdf044e47b8cc40db1a7e40 100644 --- a/app/code/Magento/Braintree/view/adminhtml/templates/form.phtml +++ b/app/code/Magento/Braintree/view/adminhtml/templates/form.phtml @@ -7,110 +7,143 @@ // @codingStandardsIgnoreFile /** @var \Magento\Braintree\Block\Form $block */ -$_form = $block; -$_code = $_form->getMethodCode(); -$_storedCards = $this->helper('\Magento\Braintree\Helper\Createorder')->getLoggedInCustomerCards(); -$_useVault = $block->useVault(); -$_useCvv = $block->useCvv(); -$clientToken = $block->getClientToken(); +$code = $block->getMethodCode(); +$storedCards = $this->helper('\Magento\Braintree\Helper\Createorder')->getLoggedInCustomerCards(); +$useVault = $block->useVault(); +$useCvv = $block->useCvv(); +$clientToken = $block->escapeHtml($block->getClientToken()); $isFraudDetectionEnabled = $block->isFraudDetectionEnabled(); $braintreeDataJs = $block->getBraintreeDataJs(); $formData = [ - "useVault" => $_useVault, - "useCvv" => $_useCvv, + "useVault" => $useVault, + "useCvv" => $useCvv, "clientToken" => $clientToken, - "code" => $_code, + "code" => $code, "isFraudDetectionEnabled" => $isFraudDetectionEnabled, "braintreeDataJs"=> $braintreeDataJs, ]; $serializedFormData = $this->helper('Magento\Framework\Json\Helper\Data')->jsonEncode($formData); +$ccType = $block->getInfoData('cc_type'); +$ccExpMonth = $block->getInfoData('cc_exp_month'); +$ccExpYear = $block->getInfoData('cc_exp_year'); ?> -<input id="<?php /* @escapeNotVerified */ echo $_code ?>_payment_method" type="hidden" name="payment[method]" value="<?php /* @escapeNotVerified */ echo $_code ?>" /> -<div id="payment_form_<?php /* @escapeNotVerified */ echo $_code ?>" class="admin__page-section-item" style="display:none;" - data-mage-init='{"braintreeCcForm":<?php /* @escapeNotVerified */ echo $serializedFormData ?>}' +<input id="<?php /* @noEscape */ echo $code; ?>_payment_method" type="hidden" name="payment[method]" + value="<?php /* @noEscape */ echo $code; ?>" /> +<div id="payment_form_<?php /* @noEscape */ echo $code; ?>" class="admin__page-section-item" style="display:none;" + data-mage-init='{"braintreeCcForm":<?php /* @noEscape */ echo $serializedFormData; ?>}' > <input type="hidden" name="payment[payment_method_nonce]" id="braintree_nonce" value="" /> <input type="hidden" name="payment[cc_last4]" id="cc_last4" value="" /> <?php if ($isFraudDetectionEnabled): ?> - <input type="hidden" name="payment[device_data]" id="braintree_device_id" value="" /> + <input type="hidden" name="payment[device_data]" id="braintree_device_id" value="" /> <?php endif; ?> - <?php if ($_storedCards): ?> - <fieldset class="admin__fieldset"> - <div class="admin__field" id="<?php /* @escapeNotVerified */ echo $_code ?>_token_selector"> - <label class="admin__field-label" for="<?php /* @escapeNotVerified */ echo $_code ?>_cc_token"><?php /* @escapeNotVerified */ echo __('Payment Information') ?></label> - <div class="admin__field-control control"> - <select id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_token" name="payment[cc_token]" class="select admin__control-select"> - <?php foreach ($_storedCards as $creditCard): ?> - <option value="<?php /* @escapeNotVerified */ echo $creditCard->token?>" <?php echo $creditCard->default ? 'selected="selected"' : '' ?>> - <?php /* @escapeNotVerified */ echo $creditCard->maskedNumber . ' - ' . $creditCard->cardType ?> - </option> - <?php endforeach; ?> - <option value=''><?php /* @escapeNotVerified */ echo __('Add new card') ?></option> - </select> + <?php if ($storedCards): ?> + <fieldset class="admin__fieldset"> + <div class="admin__field" id="<?php /* @noEscape */ echo $code; ?>_token_selector"> + <label class="admin__field-label" for="<?php /* @noEscape */ echo $code; ?>_cc_token"> + <?php echo $block->escapeHtml(__('Payment Information')); ?> + </label> + <div class="admin__field-control control"> + <select id="<?php /* @noEscape */ echo $code; ?>_cc_token" name="payment[cc_token]" + class="select admin__control-select"> + <?php foreach ($storedCards as $creditCard): ?> + <option value="<?php echo $block->escapeHtml($creditCard->token); ?>" + <?php /* @noEscape */ echo $creditCard->default ? ' selected="selected"' : ''; ?>> + <?php echo $block->escapeHtml($creditCard->maskedNumber); ?> - <?php echo $block->escapeHtml($creditCard->cardType); ?> + </option> + <?php endforeach; ?> + <option value=''><?php echo $block->escapeHtml(__('Add new card')); ?></option> + </select> + </div> </div> - </div> - </fieldset> + </fieldset> <?php endif; ?> <fieldset class="admin__fieldset hide_if_token_selected"> <div class="admin__field"> - <label class="label admin__field-label" for="<?php /* @escapeNotVerified */ echo $_code ?>_cc_type" ><?php /* @escapeNotVerified */ echo __('Credit Card Type') ?><span class="required">*</span></label> + <label class="label admin__field-label" for="<?php /* @noEscape */ echo $code; ?>_cc_type" > + <?php echo $block->escapeHtml(__('Credit Card Type')); ?><span class="required">*</span> + </label> <div class="admin__field-control control"> - <select id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_type" name="payment[cc_type]" class="required-entry _required select admin__control-select validate-cc-type-select"> - <option value="">--<?php /* @escapeNotVerified */ echo __('Please Select')?>--</option> - <?php $_ccType = $_form->getInfoData('cc_type') ?> - <?php foreach ($_form->getCcAvailableTypes() as $_typeCode => $_typeName): ?> - <option value="<?php /* @escapeNotVerified */ echo $_typeCode ?>"<?php if($_typeCode==$_ccType): ?> selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $_typeName ?></option> - <?php endforeach ?> + <select id="<?php /* @noEscape */ echo $code; ?>_cc_type" name="payment[cc_type]" + class="required-entry _required select admin__control-select validate-cc-type-select"> + <option value="">--<?php echo $block->escapeHtml(__('Please Select')); ?>--</option> + <?php foreach ($block->getCcAvailableTypes() as $typeCode => $typeName): ?> + <option value="<?php echo $block->escapeHtml($typeCode); ?>" + <?php if($typeCode == $ccType): ?> selected="selected"<?php endif; ?>> + <?php echo $block->escapeHtml($typeName); ?> + </option> + <?php endforeach; ?> </select> </div> </div> </fieldset> <fieldset class="admin__fieldset hide_if_token_selected"> <div class="admin__field"> - <label class="label admin__field-label" for="<?php /* @escapeNotVerified */ echo $_code ?>_cc_number"><?php /* @escapeNotVerified */ echo __('Credit Card Number') ?><span class="required">*</span></label> + <label class="label admin__field-label" for="<?php /* @noEscape */ echo $code; ?>_cc_number"> + <?php echo $block->escapeHtml(__('Credit Card Number')); ?><span class="required">*</span> + </label> <div class="admin__field-control control"> - <input type="text" id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_number" data-encrypted-name="payment[cc_number]" title="<?php /* @escapeNotVerified */ echo __('Credit Card Number') ?>" class="input-text admin__control-text validate-cc-number validate-cc-type" value="" /> + <input type="text" id="<?php /* @noEscape */ echo $code; ?>_cc_number" data-encrypted-name="payment[cc_number]" + title="<?php echo $block->escapeHtml(__('Credit Card Number')); ?>" + class="input-text admin__control-text validate-cc-number validate-cc-type" value="" /> </div> </div> </fieldset> <fieldset class="admin__fieldset hide_if_token_selected"> - <div id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_type_exp_div" class="admin__field"> - <label class="label admin__field-label" for="<?php /* @escapeNotVerified */ echo $_code ?>_expiration" ><?php /* @escapeNotVerified */ echo __('Expiration Date') ?><span class="required">*</span></label> + <div id="<?php /* @noEscape */ echo $code; ?>_cc_type_exp_div" class="admin__field"> + <label class="label admin__field-label" for="<?php /* @noEscape */ echo $code; ?>_expiration"> + <?php echo $block->escapeHtml(__('Expiration Date')); ?><span class="required">*</span> + </label> <div class="admin__field-control control"> - <select id="<?php /* @escapeNotVerified */ echo $_code ?>_expiration" name="payment[cc_exp_month]" class="month validate-cc-exp required-entry _required select admin__control-select"> - <?php $_ccExpMonth = $_form->getInfoData('cc_exp_month') ?> - <?php foreach ($_form->getCcMonths() as $k=>$v): ?> - <option value="<?php echo $k?$k:'' ?>"<?php if($k==$_ccExpMonth): ?> selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $v ?></option> - <?php endforeach ?> + <select id="<?php /* @noEscape */ echo $code; ?>_expiration" name="payment[cc_exp_month]" + class="month validate-cc-exp required-entry _required select admin__control-select"> + <?php foreach ($block->getCcMonths() as $k=>$v): ?> + <option value="<?php /* @noEscape */ echo $k ? $block->escapeHtml($k) : ''; ?>" + <?php if ($k == $ccExpMonth): ?> selected="selected"<?php endif; ?>> + <?php echo $block->escapeHtml($v); ?></option> + <?php endforeach; ?> </select> - <?php $_ccExpYear = $_form->getInfoData('cc_exp_year') ?> - <select id="<?php /* @escapeNotVerified */ echo $_code ?>_expiration_yr" name="payment[cc_exp_year]" class="year required-entry _required select admin__control-select"> - <?php foreach ($_form->getCcYears() as $k=>$v): ?> - <option value="<?php echo $k?$k:'' ?>"<?php if($k==$_ccExpYear): ?> selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $v ?></option> + <select id="<?php /* @noEscape */ echo $code; ?>_expiration_yr" name="payment[cc_exp_year]" + class="year required-entry _required select admin__control-select"> + <?php foreach ($block->getCcYears() as $k => $v): ?> + <option value="<?php /* @noEscape */ echo $k ? $block->escapeHtml($k) : ''; ?>" + <?php if ($k == $ccExpYear): ?> selected="selected"<?php endif; ?>> + <?php echo $block->escapeHtml($v); ?> + </option> <?php endforeach ?> </select> </div> </div> </fieldset> - <?php echo $_form->getChildHtml() ?> - <?php if($_form->hasVerification()): ?> - <fieldset class="admin__fieldset hide_if_token_selected"> - <div id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_type_cvv_div" class="admin__field"> - <label class="label admin__field-label" for="<?php /* @escapeNotVerified */ echo $_code ?>_cc_cid" ><?php /* @escapeNotVerified */ echo __('Card Verification Number') ?><span class="required">*</span></label> - <div class="admin__field-control control"> - <div class="v-fix"> - <input type="text" title="<?php /* @escapeNotVerified */ echo __('Card Verification Number') ?>" class="input-text admin__control-text cvv required-entry validate-cc-cvn" id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_cid" data-encrypted-name="payment[cc_cid]" value="" /> + <?php echo $block->getChildHtml(); ?> + <?php if ($block->hasVerification()): ?> + <fieldset class="admin__fieldset hide_if_token_selected"> + <div id="<?php /* @noEscape */ echo $code; ?>_cc_type_cvv_div" class="admin__field"> + <label class="label admin__field-label" for="<?php /* @noEscape */ echo $code; ?>_cc_cid"> + <?php echo $block->escapeHtml(__('Card Verification Number')); ?><span class="required">*</span> + </label> + + <div class="admin__field-control control"> + <div class="v-fix"> + <input type="text" title="<?php echo $block->escapeHtml(__('Card Verification Number')); ?>" + class="input-text admin__control-text cvv required-entry validate-cc-cvn" + id="<?php /* @noEscape */ echo $code; ?>_cc_cid" data-encrypted-name="payment[cc_cid]" value=""/> + </div> </div> </div> - </div> - </fieldset> + </fieldset> <?php endif; ?> <?php if($_useVault): ?> - <fieldset class="admin__fieldset hide_if_token_selected"> - <div id="<?php /* @escapeNotVerified */ echo $_code ?>_store_in_vault_div" style="text-align:left;" class=""> - <input type="checkbox" title="<?php /* @escapeNotVerified */ echo __('Save this card for future use') ?>" class="input-checkbox" id="<?php /* @escapeNotVerified */ echo $_code ?>_store_in_vault" name="payment[store_in_vault]" value="1" /> - <label for="<?php /* @escapeNotVerified */ echo $_code ?>_store_in_vault" style="float:none;"><?php /* @escapeNotVerified */ echo __('Save this card for future use') ?></label> - </div> - </fieldset> + <fieldset class="admin__fieldset hide_if_token_selected"> + <div id="<?php /* @noEscape */ echo $code; ?>_store_in_vault_div" style="text-align:left;" class=""> + <input type="checkbox" title="<?php echo $block->escapeHtml(__('Save this card for future use')); ?>" + class="input-checkbox" id="<?php /* @noEscape */ echo $code; ?>_store_in_vault" + name="payment[store_in_vault]" value="1"/> + <label for="<?php /* @noEscape */ echo $code; ?>_store_in_vault" style="float:none;"> + <?php echo $block->escapeHtml(__('Save this card for future use')); ?> + + </label> + </div> + </fieldset> <?php endif; ?> </div> \ No newline at end of file diff --git a/app/code/Magento/Braintree/view/frontend/requirejs-config.js b/app/code/Magento/Braintree/view/frontend/requirejs-config.js index 648712b448fd9e8c3e73985d2ade0b05c840edd4..3282418cf1c1b600afd84fab5a560a0dac0e4d3c 100644 --- a/app/code/Magento/Braintree/view/frontend/requirejs-config.js +++ b/app/code/Magento/Braintree/view/frontend/requirejs-config.js @@ -10,7 +10,8 @@ var config = { braintreeDataJs: 'Magento_Braintree/js/cc-data', braintreeForm: 'Magento_Braintree/js/cc-form', braintreeEditForm: 'Magento_Braintree/js/cc-edit-form', - braintreePayPalShortcut: 'Magento_Braintree/js/braintree-paypal-shortcut', + braintreePayPalMinicart: 'Magento_Braintree/js/button/braintree-paypal-minicart', + braintreePayPal: 'Magento_Braintree/js/button/braintree-paypal', transparent: 'Magento_Payment/transparent' } } diff --git a/app/code/Magento/Braintree/view/frontend/templates/PayPal/shortcut.phtml b/app/code/Magento/Braintree/view/frontend/templates/PayPal/shortcut.phtml index 88b9a8397782dd282dea81cb933a0e8ed23730ea..267a6fede0644551bf2e45c5027bf2aebc9effe4 100644 --- a/app/code/Magento/Braintree/view/frontend/templates/PayPal/shortcut.phtml +++ b/app/code/Magento/Braintree/view/frontend/templates/PayPal/shortcut.phtml @@ -4,39 +4,45 @@ * See COPYING.txt for license details. */ -// @codingStandardsIgnoreFile - /** @var \Magento\Braintree\Block\PayPal\Shortcut $block */ + $containerId = $block->getContainerId(); -$submitFormId = $block->getSubmitFormId(); -$paymentMethodNonceId = $block->getPaymentMethodNonceId(); -$paymentDetailsId = $block->getPaymentDetailsId(); +$formId = $block->getSubmitFormId(); +$paymentId = $block->getPaymentMethodNonceId(); +$detailsId = $block->getPaymentDetailsId(); +$isMiniCart = (bool)(int)$block->isInMiniCart(); + +$widgetName = $isMiniCart ? 'braintreePayPalMinicart' : 'braintreePayPal'; + +$config = [ + $widgetName => [ + 'url' => $block->getButtonDataUrl(), + 'isMiniCart' => $isMiniCart, + 'formAction' => $block->escapeUrl($block->getReviewPageUrl()), + 'clientToken' => $block->escapeHtml($block->getClientToken()), + 'containerId' => ('#' . $containerId), + 'formId' => ('#' . $formId), + 'paymentId' => ('#' . $paymentId), + 'detailsId' => ('#' . $detailsId), + 'options' => [ + 'amount' => $block->getAmount(), + 'currency' => $block->getCurrency(), + 'container' => $containerId, + 'singleUse' => true, + 'enableShippingAddress' => true, + 'enableBillingAddress' => $block->enableBillingAddress(), + 'locale' => $block->getLocale(), + 'merchantName' => $block->escapeHtml($block->getMerchantName()), + ], + ] +]; + ?> <div data-label="<?php echo $block->escapeHtml(__('or')); ?>" class="paypal checkout <?php echo $block->escapeHtml($block->getShowOrPosition()) ?> paypal-logo" > - <fieldset class="fieldset paypal items" id="braintree_paypal_shortcut"> - <div - id="<?php /* @noEscape */ echo $containerId ?>" - data-mage-init='{ - "braintreePayPalShortcut":{ - "clientToken":"<?php echo $block->escapeHtml($block->getClientToken()) ?>", - "amount":"<?php /* @noEscape */ echo $block->getAmount() ?>", - "currency":"<?php /* @noEscape */ echo $block->getCurrency() ?>", - "locale":"<?php /* @noEscape */ echo $block->getLocale() ?>", - "merchantName":"<?php echo $block->escapeHtml($block->getMerchantName()) ?>", - "container":"<?php /* @noEscape */ echo $containerId ?>", - "submitFormId":"<?php /* @noEscape */ echo $submitFormId ?>", - "enableBillingAddress":"<?php /* @noEscape */ echo $block->enableBillingAddress() ?>", - "paymentMethodNonceId":"<?php /* @noEscape */ echo $paymentMethodNonceId ?>", - "paymentDetailsId":"<?php /* @noEscape */ echo $paymentDetailsId ?>" - } - }' - > - </div> - <form id="<?php /* @noEscape */ echo $submitFormId ?>" action="<?php echo $block->escapeUrl($block->getReviewPageUrl()) ?>" method="post" > - <input id="<?php /* @noEscape */ echo $paymentMethodNonceId ?>" type="hidden" name="payment_method_nonce" /> - <input id="<?php /* @noEscape */ echo $paymentDetailsId ?>" type="hidden" name="details" /> - </form> + <fieldset class="fieldset paypal items"> + <div id="<?php /* @noEscape */ echo $containerId ?>" + data-mage-init='<?php /* @noEscape */ echo json_encode($config); ?>'></div> </fieldset> -</div> \ No newline at end of file +</div> diff --git a/app/code/Magento/Braintree/view/frontend/templates/creditcard/delete.phtml b/app/code/Magento/Braintree/view/frontend/templates/creditcard/delete.phtml index b9011bdd4f54e009622789aa2992d42cd89f1fe9..cba8e56e5aa3366172f42663999757bfce6b5448 100644 --- a/app/code/Magento/Braintree/view/frontend/templates/creditcard/delete.phtml +++ b/app/code/Magento/Braintree/view/frontend/templates/creditcard/delete.phtml @@ -6,46 +6,54 @@ // @codingStandardsIgnoreFile - $creditCard = $block->creditCard(); - $token = $creditCard->token; +/** + * @var \Magento\Braintree\Block\Creditcard\Management $block + */ +$creditCard = $block->creditCard(); +$token = $block->escapeHtml($creditCard->token); ?> <?php echo $block->getLayout()->getMessagesBlock()->getGroupedHtml();?> -<form action="<?php /* @escapeNotVerified */ echo $block->getDeleteConfirmUrl() ?>" method="post" id="delete-form" +<form action="<?php echo $block->escapeUrl($block->getDeleteConfirmUrl()); ?>" method="post" id="delete-form" xmlns="http://www.w3.org/1999/html"> <fieldset class="fieldset info"> - <legend class="legend"><?php /* @escapeNotVerified */ echo __('Please confirm that you want to delete this credit card') ?></legend> + <legend class="legend"> + <?php echo $block->escapeHtml(__('Please confirm that you want to delete this credit card')); ?> + </legend> <div class="field"> <ul> <li> - <b><?php /* @escapeNotVerified */ echo __('Credit Card Number');?></b> + <b><?php echo $block->escapeHtml(__('Credit Card Number'));?></b> </li> <li> - <?php /* @escapeNotVerified */ echo $creditCard->maskedNumber;?> + <?php echo $block->escapeHtml($creditCard->maskedNumber);?> </li> <li> - <b><?php /* @escapeNotVerified */ echo __('Expiration Date');?></b> + <b><?php echo $block->escapeHtml(__('Expiration Date'));?></b> </li> <li> - <?php /* @escapeNotVerified */ echo $creditCard->expirationDate; ?> + <?php echo $block->escapeHtml($creditCard->expirationDate); ?> </li> <li> - <b><?php /* @escapeNotVerified */ echo __('Cardholder Name');?></b> + <b><?php echo $block->escapeHtml(__('Cardholder Name'));?></b> </li> <li> - <?php /* @escapeNotVerified */ echo $creditCard->cardholderName;?> + <?php echo $block->escapeHtml($creditCard->cardholderName);?> </li> </ul> </div> </fieldset> - <input type="hidden" name="token" value="<?php /* @escapeNotVerified */ echo $token ?>"> + <input type="hidden" name="token" value="<?php /* @noEscape */ echo $token; ?>"> <div class="actions-toolbar"> <div class="primary"> <button type="submit" id="opc-submit" data-role="opc-submit" class="action save primary" - title="<?php /* @escapeNotVerified */ echo __('Delete') ?>" ><?php /* @escapeNotVerified */ echo __('Delete') ?></span></button> + title="<?php echo $block->escapeHtml(__('Delete')); ?>" > + <?php echo $block->escapeHtml(__('Delete')); ?> + </button> </div> <div class="secondary"> - <a class="action back" href="<?php /* @escapeNotVerified */ echo $block->getBackUrl() ?>"><span><span><small>« </small> - <?php /* @escapeNotVerified */ echo __('Back') ?></span></a> + <a class="action back" href="<?php echo $block->escapeUrl($block->getBackUrl()); ?>"> + <span><small>« </small><?php echo $block->escapeHtml(__('Back')); ?></span> + </a> </div> </div> diff --git a/app/code/Magento/Braintree/view/frontend/templates/creditcard/edit.phtml b/app/code/Magento/Braintree/view/frontend/templates/creditcard/edit.phtml index 073009c4c6eb6de718c3d85c41270ebedfedfa85..6fcac2eae9c411929472c7b79ef1038836646183 100644 --- a/app/code/Magento/Braintree/view/frontend/templates/creditcard/edit.phtml +++ b/app/code/Magento/Braintree/view/frontend/templates/creditcard/edit.phtml @@ -53,21 +53,37 @@ if ($block->isEditMode()) { $defaultPostalCode = ''; $defaultCountryCodeAlpha2 = ''; } +$streetValidationClass = $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('street'); +$default = $defaultCountryCodeAlpha2; + +$clientToken = $block->getClientToken(); +$formData = [ + "clientToken" => $clientToken, + 'ajaxSaveUrl' => $block->escapeUrl($block->getAjaxSaveUrl()), + 'isEditMode' => $block->isEditMode() ? true : false, + 'cardToken' => $block->isEditMode() ? $block->escapeHtml($creditCard->token) : '', + 'backUrl' => $block->escapeUrl($block->getBackUrl()), + 'hasVerification' => $block->hasVerification(), + "countrySpecificCardTypes" => $countrySpecificCardTypeConfig, + "applicableCardTypes" => $applicableCardTypeConfig, + "cardTypes" => $block->getCcAvailableTypes(), + "isFraudDetectionEnabled" => $block->isFraudDetectionEnabled() +]; +$serializedFormData = $this->helper('Magento\Framework\Json\Helper\Data')->jsonEncode($formData); ?> <form - class="form form-edit-credit-card" - action='<?php /* @escapeNotVerified */ echo $block->getFormAction() ?>' + class="form form-edit-credit-card" action="<?php echo $block->escapeUrl($block->getFormAction()); ?>" method="post" id="form-validate" data-mage-init='{"validation":{}}'> <?php echo $block->getBlockHtml('formkey'); ?> - <fieldset class="fieldset info" data-hasrequired="<?php /* @escapeNotVerified */ echo __('* Required Fields') ?>"> + <fieldset class="fieldset info" data-hasrequired="<?php echo $block->escapeHtml(__('* Required Fields')); ?>"> <legend class="legend"> - <span><?php /* @escapeNotVerified */ echo __('Credit Card') ?></span> + <span><?php echo $block->escapeHtml(__('Credit Card')); ?></span> </legend> <br> <div class="field name required"> <label for="credit_card_cardholder_name" class="label"> - <span><?php /* @escapeNotVerified */ echo __('Cardholder Name') ?></span> + <span><?php echo $block->escapeHtml(__('Cardholder Name')); ?></span> </label> <div class="control"> @@ -75,40 +91,32 @@ if ($block->isEditMode()) { type="text" class="input-text required-entry" id="credit_card_cardholder_name" - value="<?php /* @escapeNotVerified */ echo $defaultCardholder ?>" + value="<?php echo $block->escapeHtml($defaultCardholder); ?>" data-validate="{required:true}"> </div> </div> <div class="field required type"> <label for="credit_card_type" class="label"> - <span><?php /* @escapeNotVerified */ echo __('Credit Card Type') ?></span> + <span><?php echo $block->escapeHtml(__('Credit Card Type')); ?></span> </label> <div class="control"> <select name="credit_card_type" id="credit_card_type" data-container="credit_card_type" data-validate='{required:true, "validate-cc-type-select":"#credit_card_number"}'> - <option value=""><?php /* @escapeNotVerified */ echo __('--Please Select--') ?></option> - <?php - foreach ($block->getCcAvailableTypes() as $_typeCode => $_typeName) : - ?> - <option value="<?php /* @escapeNotVerified */ echo $_typeCode ?>" - <?php - if (stripos($_typeName, $defaultCcType) !== false) : - ?> selected="selected" - <?php - endif; - ?>> - <?php /* @escapeNotVerified */ echo $_typeName ?> + <option value=""><?php echo $block->escapeHtml(__('--Please Select--')); ?></option> + <?php foreach ($block->getCcAvailableTypes() as $typeCode => $typeName): ?> + <option value="<?php echo $block->escapeHtml($typeCode); ?>" + <?php if (stripos($typeName, $defaultCcType) !== false): ?> selected="selected"<?php endif; ?>> + <?php echo $block->escapeHtml($typeName); ?> </option> - <?php - endforeach; + <?php endforeach; ?> </select> </div> </div> <div class="field name required"> - <label for="credit_card_number" class="label"><span> - <?php /* @escapeNotVerified */ echo __('Credit Card Number') ?></span> + <label for="credit_card_number" class="label"> + <span><?php echo $block->escapeHtml(__('Credit Card Number')); ?></span> </label> <div class="control"> @@ -118,19 +126,13 @@ if ($block->isEditMode()) { class="input-text required-entry validate-cc-number" id="credit_card_number" autocomplete="off" - <?php - if ($block->isEditMode()) : - ?> - placeholder="<?php /* @escapeNotVerified */ echo $maskedNumber ?>" - <?php - endif; - ?> + <?php if ($block->isEditMode()): ?> placeholder="<?php echo $block->escapeHtml($maskedNumber); ?>"<?php endif; ?> data-validate="{'required-number':true, 'validate-cc-number':'#credit_card_number', 'validate-cc-type':'#credit_card_type'}"> </div> </div> <div class="field sp-methods required"> <label for="credit_card_expiration_date" class="label"> - <span><?php /* @escapeNotVerified */ echo __('Expiration Date') ?></span> + <span><?php echo $block->escapeHtml(__('Expiration Date')); ?></span> </label> <div class="control"> @@ -143,14 +145,12 @@ if ($block->isEditMode()) { id="credit_card_expiration" class="month validate-cc-exp required-entry" data-validate="{'required-number':true, 'validate-cc-exp':'#credit_card_expiration_yr'}"> - <?php - foreach ($block->getCcMonths() as $k => $v) : - ?> - <option - value="<?php echo $k ? $k : '' ?>"<?php if ($k == $defaultExpMonth) : ?> selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $v ?></option> - <?php - endforeach; - ?> + <?php foreach ($block->getCcMonths() as $k => $v): ?> + <option value="<?php /* @noEscape */ echo $k ? $block->escapeHtml($k) : '' ?>" + <?php if ($k == $defaultExpMonth): ?> selected="selected"<?php endif; ?>> + <?php echo $block->escapeHtml($v); ?> + </option> + <?php endforeach; ?> </select> </div> </div> @@ -163,22 +163,12 @@ if ($block->isEditMode()) { id="credit_card_expiration_yr" class="year required-entry" data-validate="{required:true}"> - <?php - foreach ($block->getCcYears() as $k => $v) : - ?> - <option - value="<?php echo $k ? $k : ''; ?>" - <?php - if ($k == $defaultExpYear) : - ?> selected="selected" - <?php - endif; - ?>> - <?php /* @escapeNotVerified */ echo $v ?> + <?php foreach ($block->getCcYears() as $k => $v): ?> + <option value="<?php /* @noEscape */ echo $k ? $k : ''; ?>" + <?php if ($k == $defaultExpYear): ?> selected="selected"<?php endif; ?>> + <?php echo $block->escapeHtml($v); ?> </option> - <?php - endforeach; - ?> + <?php endforeach; ?> </select> </div> </div> @@ -189,13 +179,13 @@ if ($block->isEditMode()) { <?php if ($block->hasVerification()): ?> <div class="field sp-methods required"> <label for="credit_card_cvv" class="label"> - <span><?php /* @escapeNotVerified */ echo __('CVV') ?></span> + <span><?php echo $block->escapeHtml(__('CVV')); ?></span> </label> <div class="control"> <input type="text" - title="<?php /* @escapeNotVerified */ echo __('Card Verification Number') ?>" + title="<?php echo $block->escapeHtml(__('Card Verification Number')); ?>" class="input-text cvv required-entry validate-cc-cvn validate-cc-cvn-autodetect" name="credit_card_cvv" data-container="credit_card_cvv" @@ -203,14 +193,14 @@ if ($block->isEditMode()) { value="" autocomplete="off" data-validate="{'required-number':true, 'validate-cc-cvn':'#credit_card_type'}"> - <?php $_content = '<img src=\"' . $block->getViewFileUrl('Magento_Checkout::cvv.png') . - '\" alt=\"' . __('Card Verification Number Visual Reference') . '\" title=\"' . - __('Card Verification Number Visual Reference') . '\" />'; ?> + <?php $content = '<img src=\"' . $block->escapeUrl($block->getViewFileUrl('Magento_Checkout::cvv.png')) . + '\" alt=\"' . $block->escapeHtml(__('Card Verification Number Visual Reference')) . '\" title=\"' . + $block->escapeHtml(__('Card Verification Number Visual Reference')) . '\" />'; ?> <div class="note"> <a href="#" id="credit_card-cvv-what-is-this" class="action cvv" title="<?php echo $block->escapeHtml(__('What is this?')); ?>" - data-mage-init='{"tooltip": {"content": "<?php /* @escapeNotVerified */ echo $_content ?>"}}'> - <span><?php /* @escapeNotVerified */ echo __('What is this?') ?></span> + data-mage-init='{"tooltip": {"content": "<?php /* @noEscape */ echo $content; ?>"}}'> + <span><?php echo $block->escapeHtml(__('What is this?')); ?></span> </a> </div> </div> @@ -224,58 +214,61 @@ if ($block->isEditMode()) { <div class="control"> <input type="checkbox" name="credit_card[options][make_default]" id="credit_card_options_make_default" - value="1" <?php /* @escapeNotVerified */ echo $isCCDefault ? "checked" : "" ?>> + value="1" <?php /* @noEscape */ echo $isCCDefault ? "checked" : "" ?>> <label for="credit_card_options_make_default" class="label"> - <span><?php /* @escapeNotVerified */ echo __('Make Default') ?></span> + <span><?php echo $block->escapeHtml(__('Make Default')); ?></span> </label> </div> </div> </fieldset> <fieldset class="fieldset info"> <legend class="legend"> - <span><?php /* @escapeNotVerified */ echo __('Billing Address') ?></span> + <span><?php echo $block->escapeHtml(__('Billing Address')); ?></span> </legend> <div class="field name billing_address_first_name required"> <label for="billing_address_first_name" class="label"> - <span><?php /* @escapeNotVerified */ echo __('First Name') ?></span> + <span><?php echo $block->escapeHtml(__('First Name')); ?></span> </label> <div class="control"> <input type="text" class="input-text required-entry " name="credit_card[billing_address][first_name]" id="billing_address_first_name" - value="<?php /* @escapeNotVerified */ echo $defaultFirstName ?>" + value="<?php echo $block->escapeHtml($defaultFirstName); ?>" data-validate="{required:true}"> </div> </div> <div class="field name billing_address_last_name required"> - <label for="billing_address_last_name" class="label"><span><?php /* @escapeNotVerified */ echo __('Last Name') ?></span></label> + <label for="billing_address_last_name" class="label"> + <span><?php echo $block->escapeHtml(__('Last Name')); ?></span> + </label> <div class="control"> <input type="text" class="input-text required-entry " name="credit_card[billing_address][last_name]" id="billing_address_last_name" - value="<?php /* @escapeNotVerified */ echo $defaultLastName ?>" + value="<?php echo $block->escapeHtml($defaultLastName); ?>" data-validate="{required:true}"> </div> </div> <div class="field name billing_address_company"> - <label for="billing_address_company" class="label"><span><?php /* @escapeNotVerified */ echo __('Company') ?></span></label> + <label for="billing_address_company" class="label"> + <span><?php echo $block->escapeHtml(__('Company')); ?></span> + </label> <div class="control"> <input type="text" class="input-text " name="credit_card[billing_address][company]" id="billing_address_company" - value="<?php /* @escapeNotVerified */ echo $defaultCompany ?>"> + value="<?php echo $block->escapeHtml($defaultCompany); ?>"> </div> </div> - <?php $_streetValidationClass = $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('street'); ?> <div class="field name billing_address_street_address required"> <label for="billing_address_street_address" class="label"> - <span><?php /* @escapeNotVerified */ echo __('Address') ?></span> + <span><?php echo $block->escapeHtml(__('Address')); ?></span> </label> <div class="control"> <input type="text" class="input-text required-entry " name="credit_card[billing_address][street_address]" id="billing_address_street_address" - value="<?php /* @escapeNotVerified */ echo $defaultStreetAddress ?>" + value="<?php echo $block->escapeHtml($defaultStreetAddress); ?>" data-validate="{required:true}"> </div> </div> @@ -287,95 +280,78 @@ if ($block->isEditMode()) { <div class="control"> <input type="text" class="input-text " name="credit_card[billing_address][extended_address]" id="billing_address_extended_address" - value="<?php /* @escapeNotVerified */ echo $defaultExtendedAddress ?>"> + value="<?php echo $block->escapeHtml($defaultExtendedAddress); ?>"> </div> </div> <div class="field name billing_address_locality required"> <label for="billing_address_locality" class="label"> - <span><?php /* @escapeNotVerified */ echo __('City') ?></span> + <span><?php echo $block->escapeHtml(__('City')); ?></span> </label> <div class="control"> <input type="text" class="input-text required-entry " name="credit_card[billing_address][locality]" id="billing_address_locality" - value="<?php /* @escapeNotVerified */ echo $defaultLocality ?>" + value="<?php echo $block->escapeHtml($defaultLocality); ?>" data-validate="{required:true}"> </div> </div> <div class="field region billing_address_region required"> <label for="billing_address_region" class="label"> - <span><?php /* @escapeNotVerified */ echo __('State/Province') ?></span> + <span><?php echo $block->escapeHtml(__('State/Province')); ?></span> </label> <div class="control"> <select id="billing_address_region_id" name="credit_card[billing_address][region_id]" - title="<?php /* @escapeNotVerified */ echo __('State/Province') ?>" class="validate-select" style="display:none;" + title="<?php echo $block->escapeHtml(__('State/Province')); ?>" class="validate-select" style="display:none;" data-validate="{'validate-select':true}"> - <option value=""><?php /* @escapeNotVerified */ echo __('Please select region, state or province') ?></option> + <option value=""><?php echo $block->escapeHtml(__('Please select region, state or province')); ?></option> </select> <input type="text" class="input-text " name="credit_card[billing_address][region]" id="billing_address_region" - value="<?php /* @escapeNotVerified */ echo $block->getPostParam('customer.creditCard.billingAddress.region', $defaultRegion) ?>"> + value="<?php echo $block->escapeHtml($block->getPostParam('customer.creditCard.billingAddress.region', $defaultRegion)); ?>"> </div> </div> <div class="field zip billing_address_postal_code required"> <label for="billing_address_postal_code" class="label"> - <span><?php /* @escapeNotVerified */ echo __('Zip/Postal Code') ?></span> + <span><?php echo $block->escapeHtml(__('Zip/Postal Code')); ?></span> </label> <div class="control"> <input type="text" class="input-text required-entry validate-zip-international " name="credit_card[billing_address][postal_code]" id="billing_address_postal_code" - value="<?php /* @escapeNotVerified */ echo $defaultPostalCode ?>" + value="<?php echo $block->escapeHtml($defaultPostalCode); ?>" data-validate="{required:true, 'validate-zip-international':true}"> </div> </div> <div class="field name billing_address_country required"> <label for="billing_address_country" class="label"> - <span><?php /* @escapeNotVerified */ echo __('Country') ?></span> + <span><?php echo $block->escapeHtml(__('Country')); ?></span> </label> <div class="control"> - <?php $default = $defaultCountryCodeAlpha2 ?> - <?php /* @escapeNotVerified */ echo $block->countrySelect('credit_card' . '[billing_address][country_code_alpha2]', 'billing_address_country', $default) ?> + <?php echo $block->escapeHtml($block->countrySelect('credit_card[billing_address][country_code_alpha2]', 'billing_address_country', $default)); ?> </div> </div> </fieldset> <div class="actions-toolbar"> <div class="primary"> <button type="submit" id="opc-submit" data-role="opc-submit" class="action save primary" - title="<?php /* @escapeNotVerified */ echo __('Submit') ?>"> - <span><?php /* @escapeNotVerified */ echo __('Submit') ?></span> + title="<?php echo $block->escapeHtml(__('Submit')); ?>"> + <span><?php echo $block->escapeHtml(__('Submit')); ?></span> </button> </div> <div class="secondary"> - <a class="action back" href="<?php /* @escapeNotVerified */ echo $block->getBackUrl() ?>"> - <span><span><small>« </small><?php /* @escapeNotVerified */ echo __('Back') ?></span> + <a class="action back" href="<?php echo $block->escapeUrl($block->getBackUrl()); ?>"> + <span><span><small>« </small><?php echo $block->escapeUrl(__('Back')); ?></span> </a> </div> </div> </form> -<?php -$clientToken = $block->getClientToken(); -$formData = [ - "clientToken" => $clientToken, - 'ajaxSaveUrl' => $block->getAjaxSaveUrl(), - 'isEditMode' => $block->isEditMode() ? true : false, - 'cardToken' => $block->isEditMode() ? $creditCard->token : '', - 'backUrl' => $block->getBackUrl(), - 'hasVerification' => $block->hasVerification(), - "countrySpecificCardTypes" => $countrySpecificCardTypeConfig, - "applicableCardTypes" => $applicableCardTypeConfig, - "cardTypes" => $block->getCcAvailableTypes(), - "isFraudDetectionEnabled" => $block->isFraudDetectionEnabled() -]; -$serializedFormData = $this->helper('Magento\Framework\Json\Helper\Data')->jsonEncode($formData); -?> <script type="text/x-magento-init"> { "#form-validate": { "validation": {}, - "braintreeEditForm": <?php /* @escapeNotVerified */ echo $serializedFormData ?> + "braintreeEditForm": <?php /* @noEscape */ echo $serializedFormData; ?> }, "#billing_address_country": { "regionUpdater": { @@ -384,13 +360,11 @@ $serializedFormData = $this->helper('Magento\Framework\Json\Helper\Data')->jsonE "regionInputId": "#billing_address_region", "postcodeId": "#billing_address_region", "form": "#form-validate", - "regionJson": <?php /* @escapeNotVerified */ echo $this->helper('Magento\Directory\Helper\Data')->getRegionJson() ?>, - "defaultRegion": "<?php /* @escapeNotVerified */ echo $defaultRegionId ?>", + "regionJson": <?php /* @noEscape */ echo $this->helper('Magento\Directory\Helper\Data')->getRegionJson(); ?>, + "defaultRegion": "<?php echo $block->escapeHtml($defaultRegionId); ?>", "countriesWithOptionalZip": - <?php /* @escapeNotVerified */ echo $this->helper('Magento\Directory\Helper\Data')->getCountriesWithOptionalZip(true) ?> + <?php /* @noEscape */ echo $this->helper('Magento\Directory\Helper\Data')->getCountriesWithOptionalZip(true); ?> } } } - - </script> \ No newline at end of file diff --git a/app/code/Magento/Braintree/view/frontend/templates/creditcard/index.phtml b/app/code/Magento/Braintree/view/frontend/templates/creditcard/index.phtml index f4cef98141bd9a4f549dff973874bd8a63a706a3..fd9ee17028bb6eae399fe70103f3f8e82933681f 100644 --- a/app/code/Magento/Braintree/view/frontend/templates/creditcard/index.phtml +++ b/app/code/Magento/Braintree/view/frontend/templates/creditcard/index.phtml @@ -7,14 +7,18 @@ // @codingStandardsIgnoreFile /** @var $block \Magento\Braintree\Block\Creditcard\Management */ - $_storedCards = $block->getCurrentCustomerStoredCards(); +$storedCards = $block->getCurrentCustomerStoredCards(); ?> <div class="page-title title-buttons"> <?php if ($block->getUsesVault()): ?> - <button type="button" title="<?php /* @escapeNotVerified */ echo __('Add Credit Card') ?>" class="action subscribe primary" onclick="window.location='<?php /* @escapeNotVerified */ echo $block->getAddUrl() ?>';"><span><span><?php /* @escapeNotVerified */ echo __('Add Credit Card') ?></span></span></button> - <?php endif ?> + <button type="button" title="<?php echo $block->escapeHtml(__('Add Credit Card')); ?>" + class="action subscribe primary" + onclick="window.location='<?php echo $block->escapeUrl($block->getAddUrl()) ?>';"> + <span><span><?php echo $block->escapeHtml(__('Add Credit Card')); ?></span></span> + </button> + <?php endif; ?> </div> -<?php echo $block->getLayout()->getMessagesBlock()->getGroupedHtml() ?> +<?php echo $block->getLayout()->getMessagesBlock()->getGroupedHtml(); ?> <?php if (count($_storedCards)): ?> <table class="data-table" id="my-quotes-table"> <col width="1" /> @@ -24,23 +28,27 @@ <col width="1" /> <thead> <tr> - <th><?php /* @escapeNotVerified */ echo __('Type') ?></th> - <th><?php /* @escapeNotVerified */ echo __('Card Number') ?></th> - <th><?php /* @escapeNotVerified */ echo __('Is Default') ?></th> - <th colspan="2"><?php /* @escapeNotVerified */ echo __('Actions') ?></th> + <th><?php echo $block->escapeHtml(__('Type')); ?></th> + <th><?php echo $block->escapeHtml(__('Card Number')); ?></th> + <th><?php echo $block->escapeHtml(__('Is Default')); ?></th> + <th colspan="2"><?php echo $block->escapeHtml(__('Actions')); ?></th> </tr> </thead> <tbody> - <?php foreach ($_storedCards as $card):?> + <?php foreach ($storedCards as $card):?> <tr> - <td><?php /* @escapeNotVerified */ echo $card->cardType ?></td> - <td><?php /* @escapeNotVerified */ echo $card->maskedNumber ?></td> - <td><?php /* @escapeNotVerified */ echo ($card->default) ? __('Yes') : __('No') ?></td> + <td><?php echo $block->escapeHtml($card->cardType); ?></td> + <td><?php echo $block->escapeHtml($card->maskedNumber); ?></td> + <td><?php /* @noEscape */ echo ($card->default) ? $block->escapeHtml(__('Yes')) : $block->escapeHtml(__('No')); ?></td> <td> - <a href="<?php /* @escapeNotVerified */ echo $block->getEditUrl($card->token) ?>"><?php /* @escapeNotVerified */ echo __('Edit')?></a> + <a href="<?php echo $block->escapeUrl($block->getEditUrl($card->token)); ?>"> + <?php echo $block->escapeHtml(__('Edit')); ?> + </a> </td> <td> - <a href="<?php /* @escapeNotVerified */ echo $block->getDeleteUrl($card->token) ?>"><?php /* @escapeNotVerified */ echo __('Delete')?></a> + <a href="<?php echo $block->escapeUrl($block->getDeleteUrl($card->token)); ?>"> + <?php echo $block->escapeHtml(__('Delete'));?> + </a> </td> </tr> <?php endforeach; ?> diff --git a/app/code/Magento/Braintree/view/frontend/templates/data_js.phtml b/app/code/Magento/Braintree/view/frontend/templates/data_js.phtml index cbfe3dcda5f9f52c183a7382e9cf4c33d5a50811..14579540152c5ac6e53839cf17dfdd861f564d89 100644 --- a/app/code/Magento/Braintree/view/frontend/templates/data_js.phtml +++ b/app/code/Magento/Braintree/view/frontend/templates/data_js.phtml @@ -14,14 +14,14 @@ $arrayData = [ $this->helper('Magento\Braintree\Helper\Data')->getKountId() : false, "formId" =>$block->getFormId(), "merchantId" => $block->getMerchantId(), - "braintreeDataJs" => $block->getJsSrc(), + "braintreeDataJs" => $block->escapeUrl($block->getJsSrc()), ]; $serializedFormData = $this->helper('Magento\Framework\Json\Helper\Data')->jsonEncode($arrayData); ?> <script type="text/x-magento-init"> { "body": { - "braintreeDataJs": <?php /* @escapeNotVerified */ echo $serializedFormData ?> + "braintreeDataJs": <?php /* @noEscape */ echo $serializedFormData; ?> } } </script> diff --git a/app/code/Magento/Braintree/view/frontend/templates/form.phtml b/app/code/Magento/Braintree/view/frontend/templates/form.phtml index f740ad803b188d5c3c7b53b31021d2e2b8f0edde..459a61568cff7fa67f19d3146b1a2f7e0fb5ff5d 100644 --- a/app/code/Magento/Braintree/view/frontend/templates/form.phtml +++ b/app/code/Magento/Braintree/view/frontend/templates/form.phtml @@ -7,75 +7,112 @@ // @codingStandardsIgnoreFile /** @var \Magento\Braintree\Block\Form $block */ -$_code = $block->getMethodCode(); -$_loggedIn = $block->isCustomerLoggedIn(); -$_storedCards = $block->getStoredCards(); -$_useVault = $_loggedIn && $block->useVault() && count($_storedCards); -$_autoDetection = $block->isCcDetectionEnabled(); -$clientToken = $block->getClientToken(); +$code = $block->getMethodCode(); +$loggedIn = $block->isCustomerLoggedIn(); +$storedCards = $block->getStoredCards(); +$useVault = $loggedIn && $block->useVault() && count($storedCards); +$autoDetection = $block->isCcDetectionEnabled(); +$clientToken = $block->escapeHtml($block->getClientToken()); +$formData = [ + "useVault" => $useVault, + "clientToken" => $clientToken, + "autoDetection" => $autoDetection, + "loggedIn" => $loggedIn, +]; +$serializedFormData = $this->helper('Magento\Framework\Json\Helper\Data')->jsonEncode($formData); +$ccType = $block->getInfoData('cc_type'); +$ccExpMonth = $block->getInfoData('cc_exp_month'); +$ccExpYear = $block->getInfoData('cc_exp_year'); ?> -<fieldset class="fieldset items braintree" id="payment_form_<?php /* @escapeNotVerified */ echo $_code ?>" style="display:none;"> +<fieldset class="fieldset items braintree" id="payment_form_<?php /* @noEscape */ echo $code; ?>" style="display:none;"> <input type="hidden" name="payment[payment_method_nonce]" id="braintree_nonce" value="" /> - <input type="hidden" name="payment[cc_last4]" id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_last4" value="" /> - <?php if ($_autoDetection) : ?> + <input type="hidden" name="payment[cc_last4]" id="<?php /* @noEscape */ echo $code; ?>_cc_last4" value="" /> + <?php if ($autoDetection) : ?> <input type="hidden" id="card_type_autoselect" value="" /> <?php endif; ?> - <?php if ($_useVault): ?> - <li id="<?php /* @escapeNotVerified */ echo $_code ?>_token_selector"> - <label for="<?php /* @escapeNotVerified */ echo $_code ?>_cc_token"><?php /* @escapeNotVerified */ echo __('Payment Information') ?></label> + <?php if ($useVault): ?> + <li id="<?php /* @noEscape */ echo $code; ?>_token_selector"> + <label for="<?php /* @noEscape */ echo $code; ?>_cc_token"> + <?php echo $block->escapeHtml(__('Payment Information')); ?> + </label> <div class="input-box"> - <select id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_token" name="payment[cc_token]"> - <?php foreach ($_storedCards as $creditCard): ?> - <option value="<?php /* @escapeNotVerified */ echo $creditCard->token?>" <?php echo $creditCard->default ? 'selected="selected"' : '' ?>> - <?php /* @escapeNotVerified */ echo $creditCard->maskedNumber . ' - ' . $creditCard->cardType; ?> + <select id="<?php /* @noEscape */ echo $code; ?>_cc_token" name="payment[cc_token]"> + <?php foreach ($storedCards as $creditCard): ?> + <option value="<?php echo $block->escapeHtml($creditCard->token); ?>" + <?php /* @noEscape */ echo $creditCard->default ? ' selected="selected"' : ''; ?>> + <?php echo $block->escapeHtml($creditCard->maskedNumber); ?> - <?php echo $block->escapeHtml($creditCard->cardType); ?> </option> <?php endforeach; ?> - <option value=''><?php /* @escapeNotVerified */ echo __('Add new card') ?></option> + <option value=''><?php echo $block->escapeHtml(__('Add new card')); ?></option> </select> </div> </li> <?php endif; ?> <div class="field type required hide_if_token_selected"> - <label for="<?php /* @escapeNotVerified */ echo $_code ?>_cc_type" class="label"><span><?php /* @escapeNotVerified */ echo __('Credit Card Type') ?></span></label> + <label for="<?php /* @noEscape */ echo $code; ?>_cc_type" class="label"> + <span><?php echo $block->escapeHtml(__('Credit Card Type')); ?></span> + </label> <div class="control"> - <select id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_type" - data-mage-init='{"creditCardType":{"creditCardTypeContainer":"#<?php /* @escapeNotVerified */ echo $_code ?>_cc_type_ss_div"}}' - name="payment[cc_type]" data-validate='{required:true, "validate-cc-type-select":"#<?php /* @escapeNotVerified */ echo $_code ?>_cc_number"}' class="select"> - <option value=""><?php /* @escapeNotVerified */ echo __('--Please Select--')?></option> - <?php $_ccType = $block->getInfoData('cc_type') ?> - <?php foreach ($block->getCcAvailableTypes() as $_typeCode => $_typeName): ?> - <option value="<?php /* @escapeNotVerified */ echo $_typeCode ?>"<?php if ($_typeCode == $_ccType): ?> selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $_typeName ?></option> + <select id="<?php /* @noEscape */ echo $code; ?>_cc_type" + data-mage-init='{"creditCardType":{"creditCardTypeContainer":"#<?php /* @noEscape */ echo $code; ?>_cc_type_ss_div"}}' + name="payment[cc_type]" data-validate='{ + required:true, + "validate-cc-type-select":"#<?php /* @noEscape */ echo $code; ?>_cc_number" + }' class="select"> + <option value=""><?php echo $block->escapeHtml(__('--Please Select--')); ?></option> + <?php foreach ($block->getCcAvailableTypes() as $typeCode => $typeName): ?> + <option value="<?php echo $block->escapeHtml($typeCode); ?>" + <?php if ($typeCode == $ccType): ?> selected="selected"<?php endif; ?>> + <?php echo $block->escapeHtml($typeName); ?> + </option> <?php endforeach ?> </select> </div> </div> <div class="field number required hide_if_token_selected"> - <label for="<?php /* @escapeNotVerified */ echo $_code ?>_cc_number" class="label"><span><?php /* @escapeNotVerified */ echo __('Credit Card Number') ?></span></label> + <label for="<?php /* @noEscape */ echo $code; ?>_cc_number" class="label"> + <span><?php echo $block->escapeHtml(__('Credit Card Number')); ?></span> + </label> <div class="control"> - <input type="number" id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_number" name="payment[cc_number]" title="<?php /* @escapeNotVerified */ echo __('Credit Card Number') ?>" class="input-text" value="" data-validate='{"required-number":true, "validate-cc-number":"#<?php /* @escapeNotVerified */ echo $_code ?>_cc_type", "validate-cc-type":"#<?php /* @escapeNotVerified */ echo $_code ?>_cc_type"}'/> + <input type="number" id="<?php /* @noEscape */ echo $code; ?>_cc_number" name="payment[cc_number]" + title="<?php echo $block->escapeHtml(__('Credit Card Number')); ?>" class="input-text" value="" + data-validate='{ + "required-number":true, + "validate-cc-number":"#<?php /* @noEscape */ echo $code; ?>_cc_type", + "validate-cc-type":"#<?php /* @noEscape */ echo $code; ?>_cc_type" + }'/> </div> </div> - <div class="field date required hide_if_token_selected" id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_type_exp_div"> - <label for="<?php /* @escapeNotVerified */ echo $_code ?>_expiration" class="label"><span><?php /* @escapeNotVerified */ echo __('Expiration Date') ?></span></label> + <div class="field date required hide_if_token_selected" id="<?php /* @noEscape */ echo $code; ?>_cc_type_exp_div"> + <label for="<?php /* @noEscape */ echo $code; ?>_expiration" class="label"> + <span><?php echo $block->escapeHtml(__('Expiration Date')); ?></span> + </label> <div class="control"> <div class="fields group group-2"> <div class="field no-label month"> <div class="control"> - <select id="<?php /* @escapeNotVerified */ echo $_code ?>_expiration" name="payment[cc_exp_month]" class="select month" data-validate='{required:true, "validate-cc-exp":"#<?php /* @escapeNotVerified */ echo $_code ?>_expiration_yr"}'> - <?php $_ccExpMonth = $block->getInfoData('cc_exp_month') ?> + <select id="<?php /* @noEscape */ echo $code; ?>_expiration" name="payment[cc_exp_month]" + class="select month" data-validate='{ + required:true, "validate-cc-exp":"#<?php /* @noEscape */ echo $code; ?>_expiration_yr" + }'> <?php foreach ($block->getCcMonths() as $k => $v): ?> - <option value="<?php echo $k ? $k : '' ?>"<?php if ($k == $_ccExpMonth): ?> selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $v ?></option> - <?php endforeach ?> + <option value="<?php echo $k ? $block->escapeHtml($k) : ''; ?>" + <?php if ($k == $ccExpMonth): ?> selected="selected"<?php endif; ?>> + <?php echo $block->escapeHtml($v); ?> + </option> + <?php endforeach; ?> </select> </div> </div> <div class="field no-label year"> <div class="control"> - <?php $_ccExpYear = $block->getInfoData('cc_exp_year') ?> - <select id="<?php /* @escapeNotVerified */ echo $_code ?>_expiration_yr" name="payment[cc_exp_year]" class="select year" data-validate='{required:true}'> + <select id="<?php /* @noEscape */ echo $code; ?>_expiration_yr" name="payment[cc_exp_year]" class="select year" data-validate='{required:true}'> <?php foreach ($block->getCcYears() as $k => $v): ?> - <option value="<?php echo $k ? $k : '' ?>"<?php if ($k == $_ccExpYear): ?> selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $v ?></option> - <?php endforeach ?> + <option value="<?php /* @noEscape */ echo $k ? $block->escapeHtml($k) : '' ?>" + <?php if ($k == $ccExpYear): ?> selected="selected"<?php endif; ?>> + <?php echo $block->escapeHtml($v); ?> + </option> + <?php endforeach; ?> </select> </div> </div> @@ -83,39 +120,44 @@ $clientToken = $block->getClientToken(); </div> </div> <?php if ($block->hasVerification()): ?> - <div class="field cvv required hide_if_token_selected" id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_type_cvv_div"> - <label for="<?php /* @escapeNotVerified */ echo $_code ?>_cc_cid" class="label"><span><?php /* @escapeNotVerified */ echo __('Card Verification Number') ?></span></label> + <div class="field cvv required hide_if_token_selected" id="<?php /* @noEscape */ echo $code; ?>_cc_type_cvv_div"> + <label for="<?php /* @noEscape */ echo $code; ?>_cc_cid" class="label"> + <span><?php echo $block->escapeHtml(__('Card Verification Number')); ?></span> + </label> <div class="control"> - <input type="number" title="<?php /* @escapeNotVerified */ echo __('Card Verification Number') ?>" class="input-text cvv" id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_cid" name="payment[cc_cid]" value="" data-validate='{"required-number":true, "validate-cc-cvn":"#<?php /* @escapeNotVerified */ echo $_code ?>_cc_type"}' /> - <?php $_content = '<img src=\"' . $block->getViewFileUrl('Magento_Checkout::cvv.png') . '\" alt=\"' . __('Card Verification Number Visual Reference') . '\" title=\"' . __('Card Verification Number Visual Reference') . '\" />'; ?> + <input type="number" title="<?php echo $block->escapeHtml(__('Card Verification Number')); ?>" + class="input-text cvv" + id="<?php /* @noEscape */ echo $code; ?>_cc_cid" name="payment[cc_cid]" value="" + data-validate='{ + "required-number":true, "validate-cc-cvn":"#<?php /* @noEscape */ echo $code; ?>_cc_type" + }' /> + <?php $content = '<img src=\"' . $block->escapeUrl($block->getViewFileUrl('Magento_Checkout::cvv.png')) . + '\" alt=\"' . $block->escapeHtml(__('Card Verification Number Visual Reference')) . + '\" title=\"' . $block->escapeHtml(__('Card Verification Number Visual Reference')) . '\" />'; ?> <div class="note"> - <a href="#" class="action cvv" title="<?php /* @escapeNotVerified */ echo __('What is this?') ?>" data-mage-init='{"tooltip": {"content": "<?php /* @escapeNotVerified */ echo $_content ?>"}}'><span><?php /* @escapeNotVerified */ echo __('What is this?') ?></span></a> + <a href="#" class="action cvv" title="<?php echo $block->escapeHtml(__('What is this?')); ?>" + data-mage-init='{"tooltip": {"content": "<?php /* @noEscape */ echo $content; ?>"}}'> + <span><?php echo $block->escapeHtml(__('What is this?')); ?></span> + </a> </div> </div> </div> <?php endif; ?> <?php if($block->canSaveCard()): ?> - <li id="<?php /* @escapeNotVerified */ echo $_code ?>_store_in_vault_div" style="text-align:left;" class="hide_if_token_selected"> - <input type="checkbox" title="<?php /* @escapeNotVerified */ echo __('Save this card for future use') ?>" class="input-checkbox" id="<?php /* @escapeNotVerified */ echo $_code ?>_store_in_vault" checked="checked" name="payment[store_in_vault]" value="1" /> - <label for="<?php /* @escapeNotVerified */ echo $_code ?>_store_in_vault" class="required" style="float:none;"><?php /* @escapeNotVerified */ echo __('Save this card for future use') ?></label> + <li id="<?php /* @noEscape */ echo $code; ?>_store_in_vault_div" style="text-align:left;" class="hide_if_token_selected"> + <input type="checkbox" title="<?php echo $block->escapeHtml(__('Save this card for future use')); ?>" class="input-checkbox" + id="<?php /* @noEscape */ echo $code; ?>_store_in_vault" checked="checked" name="payment[store_in_vault]" value="1" /> + <label for="<?php /* @noEscape */ echo $code; ?>_store_in_vault" class="required" style="float:none;"> + <?php echo $block->escapeHtml(__('Save this card for future use')); ?> + </label> </li> <?php endif; ?> </fieldset> - -<?php - $formData = [ - "useVault" => $_useVault, - "clientToken" => $clientToken, - "autoDetection" => $_autoDetection, - "loggedIn" => $_loggedIn, - ]; - $serializedFormData = $this->helper('Magento\Framework\Json\Helper\Data')->jsonEncode($formData); -?> <script type="text/x-magento-init"> { "#payment_form_braintree": { - "braintreeForm": <?php /* @escapeNotVerified */ echo $serializedFormData ?> + "braintreeForm": <?php /* @noEscape */ echo $serializedFormData ?> } } </script> diff --git a/app/code/Magento/Braintree/view/frontend/web/js/braintree-paypal-shortcut.js b/app/code/Magento/Braintree/view/frontend/web/js/braintree-paypal-shortcut.js deleted file mode 100644 index 8880c65fd87bc3dea825691c9578efb337a6e604..0000000000000000000000000000000000000000 --- a/app/code/Magento/Braintree/view/frontend/web/js/braintree-paypal-shortcut.js +++ /dev/null @@ -1,65 +0,0 @@ -/** - * Copyright © 2015 Magento. All rights reserved. - * See COPYING.txt for license details. - */ -/*jshint jquery:true*/ -define([ - "jquery", - "braintree", - "jquery/ui" -], function($, braintree){ - "use strict"; - - $.widget('mage.braintreePayPalShortcut', { - options: { - clientToken : "", - currency : 'USD', - amount : 0, - locale: 'en_US', - merchantName: null, - container: '', - submitFormId: null, - enableBillingAddress: false, - paymentMethodNonceId: null, - paymentDetailsId: null - }, - - _create: function() { - var clientToken = this.options.clientToken; - var paymentDetailsId = this.options.paymentDetailsId; - var submitFormId = this.options.submitFormId; - var self = this; - var $container = $('#'.concat(this.options.container)); - $container.empty(); - - // braintree setup should be called only once, - // but widget._create() called twice (related to minicart observable attributes implementation) - if ($container.data('rendered')) { - return; - } - $container.data('rendered', true); - - - braintree.setup(clientToken, "paypal", { - container: this.options.container, - singleUse: true, - amount: this.options.amount, - currency: this.options.currency, - enableShippingAddress: true, - enableBillingAddress: this.options.enableBillingAddress, - locale: this.options.locale, - displayName: this.options.merchantName, - onPaymentMethodReceived: function (obj) { - var nonce = obj.nonce; - var details = JSON.stringify(obj.details); - $('#'.concat(self.options.paymentMethodNonceId)).val(nonce); - $('#'.concat(paymentDetailsId)).val(details); - var hiddenForm = $('#'.concat(submitFormId))[0]; - hiddenForm.submit(); - } - }); - } - }); - - return $.mage.braintreePayPalShortcut; -}); diff --git a/app/code/Magento/Braintree/view/frontend/web/js/button/action/get-data.js b/app/code/Magento/Braintree/view/frontend/web/js/button/action/get-data.js new file mode 100644 index 0000000000000000000000000000000000000000..564c5b7695028cc917077780fb2f59154c858e98 --- /dev/null +++ b/app/code/Magento/Braintree/view/frontend/web/js/button/action/get-data.js @@ -0,0 +1,38 @@ +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +define([ + 'jquery' +], function ($) { + 'use strict'; + + var when; + + return { + + /** + * @param {String} url + * @returns {*} + */ + when: function (url) { + if (!when) { + when = $.when($.get(url, { + isAjax: true + })); + } + + return when; + }, + + /** + * @param {String} url + * @returns {*} + */ + request: function (url) { + return $.get(url, { + isAjax: true + }); + } + }; +}); diff --git a/app/code/Magento/Braintree/view/frontend/web/js/button/braintree-paypal-minicart.js b/app/code/Magento/Braintree/view/frontend/web/js/button/braintree-paypal-minicart.js new file mode 100644 index 0000000000000000000000000000000000000000..c26f3536f6a3bd607476e4824d5c43cd759e263d --- /dev/null +++ b/app/code/Magento/Braintree/view/frontend/web/js/button/braintree-paypal-minicart.js @@ -0,0 +1,35 @@ +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +define([ + 'jquery', + 'Magento_Braintree/js/button/builder', + 'Magento_Ui/js/lib/view/utils/dom-observer', + 'mage/apply/main' +], function ($, builder, domObserver, mage) { + 'use strict'; + + return function (config) { + var $container = $(config.containerId); + + domObserver.off(config.containerId); + domObserver.get(config.containerId, function () { + mage.apply(); + }); + + if ($container.data('is_rendered')) { + return; + } + $container.data('is_rendered', true); + + builder.setClientToken(config.clientToken) + .setOptions(config.options) + .setName('paypal') + .setContainer(config.containerId) + .setPayment(config.paymentId) + .setDetails(config.detailsId) + .setFormAction(config.formAction) + .build(); + }; +}); diff --git a/app/code/Magento/Braintree/view/frontend/web/js/button/braintree-paypal.js b/app/code/Magento/Braintree/view/frontend/web/js/button/braintree-paypal.js new file mode 100644 index 0000000000000000000000000000000000000000..beb220e2f2c6f0a6f864b3f4fe357c50f0d0fe5b --- /dev/null +++ b/app/code/Magento/Braintree/view/frontend/web/js/button/braintree-paypal.js @@ -0,0 +1,114 @@ +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +define([ + 'jquery', + 'Magento_Braintree/js/button/builder', + 'Magento_Braintree/js/button/action/get-data', + 'Magento_Customer/js/customer-data', + 'Magento_Ui/js/lib/view/utils/dom-observer' +], function ($, builder, actionGetData, customerData, domObserver) { + 'use strict'; + + return function (config) { + + var button = { + isClick: false, + + isAfterClick: false, + + isRendered: false, + + /** + * @returns + */ + afterClickAction: function () { + var paypalButton = config.containerId + ' .paypal-button'; + + $('body').trigger('processStart'); + + domObserver.get(paypalButton, function () { + domObserver.off(paypalButton); + + if (this.isRendered) { + this.isRendered = false; + + return; + } + $('body').trigger('processStop'); + this.isAfterClick = true; + $(paypalButton).click(); + }.bind(this)); + }, + + /** + * @param {*} response + * @returns + */ + update: function (response) { + config.options.amount = response.isEmpty ? 1 : response.amount; + config.options.currency = response.isEmpty ? 'USD' : response.currency; + + if (this.isClick) { + this.isRendered = true; + this.afterClickAction(); + } + builder.setClientToken(config.clientToken) + .setOptions(config.options) + .setName('paypal') + .setContainer(config.containerId) + .setPayment(config.paymentId) + .setDetails(config.detailsId) + .setFormAction(config.formAction) + .build(); + }, + + /** + * @param {*} event + * @returns + */ + mousedown: function (event) { + this.isClick = true; + event.preventDefault(); + event.stopPropagation(); + + $(config.containerId).parents('form:first') + .find('.action.primary:first') + .click(); + }, + + /** + * @param {*} event + * @returns + */ + click: function (event) { + + if (this.isAfterClick) { + this.isAfterClick = false; + this.isClick = false; + + return; + } + + event.preventDefault(); + event.stopPropagation(); + } + }; + + $(config.containerId).on('mousedown', button.mousedown.bind(button)); + $(config.containerId).on('click', button.click.bind(button)); + + customerData.get('cart') + .subscribe(function () { + if (this.isClick) { + actionGetData.request(config.url) + .done(this.update.bind(this)); + } + }.bind(button)); + + actionGetData.when(config.url) + .promise() + .done(button.update.bind(button)); + }; +}); diff --git a/app/code/Magento/Braintree/view/frontend/web/js/button/builder.js b/app/code/Magento/Braintree/view/frontend/web/js/button/builder.js new file mode 100644 index 0000000000000000000000000000000000000000..75d4568e8968d20291e762c8c69a1c1c1ea77c90 --- /dev/null +++ b/app/code/Magento/Braintree/view/frontend/web/js/button/builder.js @@ -0,0 +1,170 @@ +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +define([ + 'jquery', + 'braintree', + 'underscore', + 'mage/template' +], function ($, braintree, _, mageTemplate) { + 'use strict'; + + // private + var payment = { + form: { + + /** + * @param {*} formData + * @returns {jQuery} + */ + build: function (formData) { + var formTmpl = mageTemplate('<form action="<%= data.action %>"' + + ' method="POST" hidden enctype="multipart/form-data">' + + '<% _.each(data.fields, function(val, key){ %>' + + '<input value=\'<%= val %>\' name="<%= key %>" type="hidden">' + + '<% }); %>' + + '</form>'); + + return $(formTmpl({ + data: { + action: formData.action, + fields: formData.fields + } + })).appendTo($('[data-container="body"]')); + } + }, + + /** + * @param {*} allow + * @returns {*} + */ + prepare: function (allow) { + var self = this, + config = { + + /** + * @param {*} paymentResult + * @returns + */ + onPaymentMethodReceived: function (paymentResult) { + self.form.build( + { + action: self.formAction, + fields: { + 'payment_method_nonce': paymentResult.nonce, + 'details': JSON.stringify(paymentResult.details) + } + } + ).submit(); + } + }; + + _.each(this.options, function (option, name) { + if (option !== null && _.indexOf(allow, name) !== -1) { + config[name] = option; + } + }); + + return config; + }, + + /** + * @returns {*} + */ + getConfig: function () { + return this.prepare([ + 'merchantName', + 'locale', + 'enableBillingAddress', + 'currency', + 'amount', + 'container', + 'singleUse', + 'enableShippingAddress' + ]); + } + }; + + // public + return { + + /** + * @param {String} clientToken + * @returns {*} + */ + setClientToken: function (clientToken) { + payment.clientToken = clientToken; + + return this; + }, + + /** + * @param {*} options + * @returns {*} + */ + setOptions: function (options) { + payment.options = options; + + return this; + }, + + /** + * @param {String} name + * @returns {*} + */ + setName: function (name) { + payment.name = name; + + return this; + }, + + /** + * @param {String} containerId + * @returns {*} + */ + setContainer: function (containerId) { + payment.containerId = containerId; + + return this; + }, + + /** + * @param {String} paymentId + * @returns {*} + */ + setPayment: function (paymentId) { + payment.paymentId = paymentId; + + return this; + }, + + /** + * @param {String} detailsId + * @returns {*} + */ + setDetails: function (detailsId) { + payment.detailsId = detailsId; + + return this; + }, + + /** + * @param {String} formAction + * @returns {*} + */ + setFormAction: function (formAction) { + payment.formAction = formAction; + + return this; + }, + + /** + * @returns + */ + build: function () { + $(payment.containerId).empty(); + braintree.setup(payment.clientToken, payment.name, payment.getConfig()); + } + }; +}); diff --git a/app/code/Magento/Braintree/view/frontend/web/js/cc-edit-form.js b/app/code/Magento/Braintree/view/frontend/web/js/cc-edit-form.js index 075a6418ab8ebc81099cbe1ff05f16108a14ff54..3d8e561448c4698cae2a2a044782fac59638a1de 100644 --- a/app/code/Magento/Braintree/view/frontend/web/js/cc-edit-form.js +++ b/app/code/Magento/Braintree/view/frontend/web/js/cc-edit-form.js @@ -7,8 +7,9 @@ define([ "jquery", "braintree", 'mage/translate', + 'Magento_Ui/js/modal/alert', "jquery/ui" -], function ($, braintree, $t) { +], function ($, braintree, $t, alert) { 'use strict'; $.widget('mage.braintreeEditForm', { @@ -199,13 +200,17 @@ define([ } }, error: function (response) { - alert($t('There was error during saving card data')); + alert({ + content: $t('There was error during saving card data') + }); } }); } else { //handle error $('body').trigger('processStop'); - alert($t('There was error during saving card data')); + alert({ + content: $t('There was error during saving card data') + }); } }); } diff --git a/app/code/Magento/Braintree/view/frontend/web/js/cc-form.js b/app/code/Magento/Braintree/view/frontend/web/js/cc-form.js index 303ead9b6546b14874f31a50681e0daf706e7e36..a922038eae6c0e2e299fb776587ced1d13ec1afa 100644 --- a/app/code/Magento/Braintree/view/frontend/web/js/cc-form.js +++ b/app/code/Magento/Braintree/view/frontend/web/js/cc-form.js @@ -7,8 +7,9 @@ define([ "jquery", "braintree", 'mage/translate', + 'Magento_Ui/js/modal/alert', "jquery/ui" -], function($, braintree, $t) { +], function($, braintree, $t, alert) { "use strict"; $.widget('mage.braintreeForm', { @@ -92,7 +93,9 @@ define([ var form = $(self.options.formSelector)[0]; form.submit(); } else { - alert($t("An error occured with payment processing.")); + alert({ + content: $t("An error occured with payment processing.") + }); } } ); diff --git a/app/code/Magento/Braintree/view/frontend/web/js/view/payment/method-renderer/braintree-paypal.js b/app/code/Magento/Braintree/view/frontend/web/js/view/payment/method-renderer/braintree-paypal.js index 3b5ea0e29bbb9ba0575c68d6a723dd9841585d9e..78cd0c4f0c8d256d8c514fe335b8964e8da09f72 100644 --- a/app/code/Magento/Braintree/view/frontend/web/js/view/payment/method-renderer/braintree-paypal.js +++ b/app/code/Magento/Braintree/view/frontend/web/js/view/payment/method-renderer/braintree-paypal.js @@ -47,11 +47,6 @@ define( return { 'method': this.item.method, 'po_number': null, - 'cc_owner': null, - 'cc_number': null, - 'cc_type': null, - 'cc_exp_year': null, - 'cc_exp_month': null, 'additional_data': { 'payment_method_nonce': this.paymentMethodNonce() } @@ -93,7 +88,7 @@ define( singleUse: true, amount: totals.base_grand_total, currency: totals.base_currency_code, - displayName: this.merchantName, + displayName: this.merchantName || '', locale: this.locale, onPaymentMethodReceived: function (response) { self.paymentMethodNonce(response.nonce); diff --git a/app/code/Magento/Braintree/view/frontend/web/js/view/payment/method-renderer/cc-form.js b/app/code/Magento/Braintree/view/frontend/web/js/view/payment/method-renderer/cc-form.js index ba203615d426260d4a37dc32b94c90dd3e9594c8..303c535e1b17a5fd2292ffc85a524e4127ec3cd1 100644 --- a/app/code/Magento/Braintree/view/frontend/web/js/view/payment/method-renderer/cc-form.js +++ b/app/code/Magento/Braintree/view/frontend/web/js/view/payment/method-renderer/cc-form.js @@ -173,15 +173,15 @@ define( getData: function () { return { 'method': this.item.method, - 'cc_type': this.creditCardType(), - 'cc_exp_year': this.creditCardExpYear(), - 'cc_exp_month': this.creditCardExpMonth(), 'additional_data': { 'cc_last4': this.creditCardNumber().slice(-4), 'store_in_vault': this.storeInVault(), 'payment_method_nonce': this.paymentMethodNonce(), 'cc_token': this.selectedCardToken(), - 'device_data': this.deviceData + 'device_data': this.deviceData, + 'cc_type': this.creditCardType(), + 'cc_exp_year': this.creditCardExpYear(), + 'cc_exp_month': this.creditCardExpMonth() } }; }, diff --git a/app/code/Magento/Bundle/Model/ResourceModel/Bundle.php b/app/code/Magento/Bundle/Model/ResourceModel/Bundle.php index c387f0839c4a289968d2aca04c849095c580bf47..b748c4419ea3fcfa829bcc3c85aa7bc844678c6c 100644 --- a/app/code/Magento/Bundle/Model/ResourceModel/Bundle.php +++ b/app/code/Magento/Bundle/Model/ResourceModel/Bundle.php @@ -10,7 +10,7 @@ namespace Magento\Bundle\Model\ResourceModel; * * @author Magento Core Team <core@magentocommerce.com> */ -class Bundle extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Bundle extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * @var \Magento\Catalog\Model\ResourceModel\Product\Relation @@ -23,13 +23,13 @@ class Bundle extends \Magento\Framework\Model\ModelResource\Db\AbstractDb protected $quoteResource; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Catalog\Model\ResourceModel\Product\Relation $productRelation * @param \Magento\Quote\Model\ResourceModel\Quote $quoteResource * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Catalog\Model\ResourceModel\Product\Relation $productRelation, \Magento\Quote\Model\ResourceModel\Quote $quoteResource, $connectionName = null diff --git a/app/code/Magento/Bundle/Model/ResourceModel/Option.php b/app/code/Magento/Bundle/Model/ResourceModel/Option.php index ad522bd83891d5b71b2660665b86c823b48ac3b5..7ef4bda626e835e661a83069c9f3a004f07a34fb 100644 --- a/app/code/Magento/Bundle/Model/ResourceModel/Option.php +++ b/app/code/Magento/Bundle/Model/ResourceModel/Option.php @@ -10,7 +10,7 @@ namespace Magento\Bundle\Model\ResourceModel; * * @author Magento Core Team <core@magentocommerce.com> */ -class Option extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Option extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * @var \Magento\Bundle\Model\Option\Validator @@ -18,12 +18,12 @@ class Option extends \Magento\Framework\Model\ModelResource\Db\AbstractDb private $validator; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Bundle\Model\Option\Validator $validator * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Bundle\Model\Option\Validator $validator, $connectionName = null ) { diff --git a/app/code/Magento/Bundle/Model/ResourceModel/Option/Collection.php b/app/code/Magento/Bundle/Model/ResourceModel/Option/Collection.php index a012f0d31331e82db35eeec32ed3396f0269d6c9..dee20a0d83ad6cf37f50a12a0eedb0986cb4314f 100644 --- a/app/code/Magento/Bundle/Model/ResourceModel/Option/Collection.php +++ b/app/code/Magento/Bundle/Model/ResourceModel/Option/Collection.php @@ -8,7 +8,7 @@ namespace Magento\Bundle\Model\ResourceModel\Option; /** * Bundle Options Resource Collection */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * All item ids cache diff --git a/app/code/Magento/Bundle/Model/ResourceModel/Selection.php b/app/code/Magento/Bundle/Model/ResourceModel/Selection.php index f387db965487c20ea3b18e1fa760230e534de570..22283c5ff323138bcb8f50b6aab72fa1e6efbd83 100644 --- a/app/code/Magento/Bundle/Model/ResourceModel/Selection.php +++ b/app/code/Magento/Bundle/Model/ResourceModel/Selection.php @@ -10,7 +10,7 @@ namespace Magento\Bundle\Model\ResourceModel; * * @author Magento Core Team <core@magentocommerce.com> */ -class Selection extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Selection extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Define main table and id field diff --git a/app/code/Magento/Bundle/Model/Sales/Order/Pdf/Items/Creditmemo.php b/app/code/Magento/Bundle/Model/Sales/Order/Pdf/Items/Creditmemo.php index fe9f10b3323c94c8069c1177eb0e1ed67cfbb13d..2b50f3f1683572ab227ac6cad8cad462bf986f9b 100644 --- a/app/code/Magento/Bundle/Model/Sales/Order/Pdf/Items/Creditmemo.php +++ b/app/code/Magento/Bundle/Model/Sales/Order/Pdf/Items/Creditmemo.php @@ -24,7 +24,7 @@ class Creditmemo extends AbstractItems * @param \Magento\Framework\Filesystem $filesystem * @param \Magento\Framework\Filter\FilterManager $filterManager * @param \Magento\Framework\Stdlib\StringUtils $string - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -35,7 +35,7 @@ class Creditmemo extends AbstractItems \Magento\Framework\Filesystem $filesystem, \Magento\Framework\Filter\FilterManager $filterManager, \Magento\Framework\Stdlib\StringUtils $string, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Bundle/Model/Sales/Order/Pdf/Items/Invoice.php b/app/code/Magento/Bundle/Model/Sales/Order/Pdf/Items/Invoice.php index 00e84863d30d1373b8dcfa81599fcf8a09dc6b7e..c4bcdb7616b9eb8df984d23bc510541aee273d2c 100644 --- a/app/code/Magento/Bundle/Model/Sales/Order/Pdf/Items/Invoice.php +++ b/app/code/Magento/Bundle/Model/Sales/Order/Pdf/Items/Invoice.php @@ -25,7 +25,7 @@ class Invoice extends AbstractItems * @param \Magento\Framework\Filesystem $filesystem * @param \Magento\Framework\Filter\FilterManager $filterManager * @param \Magento\Framework\Stdlib\StringUtils $coreString - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -36,7 +36,7 @@ class Invoice extends AbstractItems \Magento\Framework\Filesystem $filesystem, \Magento\Framework\Filter\FilterManager $filterManager, \Magento\Framework\Stdlib\StringUtils $coreString, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Bundle/Model/Sales/Order/Pdf/Items/Shipment.php b/app/code/Magento/Bundle/Model/Sales/Order/Pdf/Items/Shipment.php index 9b071f4fc809a522b975206ed63d2ef41a373341..4a8e83fd3cd19d866edbb28c14cddc2974a22142 100644 --- a/app/code/Magento/Bundle/Model/Sales/Order/Pdf/Items/Shipment.php +++ b/app/code/Magento/Bundle/Model/Sales/Order/Pdf/Items/Shipment.php @@ -22,7 +22,7 @@ class Shipment extends AbstractItems * @param \Magento\Framework\Filesystem $filesystem * @param \Magento\Framework\Filter\FilterManager $filterManager * @param \Magento\Framework\Stdlib\StringUtils $string - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -33,7 +33,7 @@ class Shipment extends AbstractItems \Magento\Framework\Filesystem $filesystem, \Magento\Framework\Filter\FilterManager $filterManager, \Magento\Framework\Stdlib\StringUtils $string, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Bundle/Model/Source/Option/Type.php b/app/code/Magento/Bundle/Model/Source/Option/Type.php index 17047b14c6a8f0ecda6b2bce7c26979b104b14e3..7269a9473d9f93f0c40d99b6296e6e52b0f299d7 100644 --- a/app/code/Magento/Bundle/Model/Source/Option/Type.php +++ b/app/code/Magento/Bundle/Model/Source/Option/Type.php @@ -37,7 +37,7 @@ class Type extends \Magento\Framework\Model\AbstractExtensibleModel implements * @param ExtensionAttributesFactory $extensionFactory * @param AttributeValueFactory $customAttributeFactory * @param array $options - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -47,7 +47,7 @@ class Type extends \Magento\Framework\Model\AbstractExtensibleModel implements ExtensionAttributesFactory $extensionFactory, AttributeValueFactory $customAttributeFactory, array $options, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Bundle/Test/Unit/Model/OptionRepositoryTest.php b/app/code/Magento/Bundle/Test/Unit/Model/OptionRepositoryTest.php index 577879a4d65c14b2f0890b4783623c51bcd76db7..2175303614ef6a6759a3c0844cc581e6096ce153 100644 --- a/app/code/Magento/Bundle/Test/Unit/Model/OptionRepositoryTest.php +++ b/app/code/Magento/Bundle/Test/Unit/Model/OptionRepositoryTest.php @@ -619,7 +619,7 @@ class OptionRepositoryTest extends \PHPUnit_Framework_TestCase ); $attributeValueFactoryMock = $this->getMock('Magento\Framework\Api\AttributeValueFactory', [], [], '', false); $resourceMock = $this->getMock( - 'Magento\Framework\Model\ModelResource\Db\AbstractDb', + 'Magento\Framework\Model\ResourceModel\Db\AbstractDb', [ '_construct', 'getIdFieldName' diff --git a/app/code/Magento/Bundle/Test/Unit/Model/OptionTest.php b/app/code/Magento/Bundle/Test/Unit/Model/OptionTest.php index 67303f8fd3812979e49099a8cb05a27e58453dd9..5af4e900beab282dcc054151121ac25fa725c493 100644 --- a/app/code/Magento/Bundle/Test/Unit/Model/OptionTest.php +++ b/app/code/Magento/Bundle/Test/Unit/Model/OptionTest.php @@ -20,7 +20,7 @@ class OptionTest extends \PHPUnit_Framework_TestCase protected $selectionSecond; /** - * @var \Magento\Framework\Model\ModelResource\AbstractResource|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Model\ResourceModel\AbstractResource|\PHPUnit_Framework_MockObject_MockObject */ protected $resource; @@ -46,7 +46,7 @@ class OptionTest extends \PHPUnit_Framework_TestCase false ); $this->resource = $this->getMock( - 'Magento\Framework\Model\ModelResource\AbstractResource', + 'Magento\Framework\Model\ResourceModel\AbstractResource', [ '_construct', 'getConnection', diff --git a/app/code/Magento/Bundle/Test/Unit/Model/Product/TypeTest.php b/app/code/Magento/Bundle/Test/Unit/Model/Product/TypeTest.php index 92e64885b724566a2dae7a1f8662e8bd6f0c33fe..1d08a80994f67291274ac78037863a48e01aa898 100644 --- a/app/code/Magento/Bundle/Test/Unit/Model/Product/TypeTest.php +++ b/app/code/Magento/Bundle/Test/Unit/Model/Product/TypeTest.php @@ -2093,7 +2093,7 @@ class TypeTest extends \PHPUnit_Framework_TestCase ->setMethods(['getResourceCollection']) ->disableOriginalConstructor() ->getMock(); - $resourceClassName = 'Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection'; + $resourceClassName = 'Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection'; $dbResourceMock = $this->getMockBuilder($resourceClassName) ->setMethods(['setProductIdFilter', 'setPositionOrder', 'joinValues', 'setIdFilter']) ->disableOriginalConstructor() @@ -2616,7 +2616,7 @@ class TypeTest extends \PHPUnit_Framework_TestCase $option = $this->getMockBuilder('\Magento\Bundle\Model\Option') ->disableOriginalConstructor() ->getMock(); - $resourceClassName = 'Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection'; + $resourceClassName = 'Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection'; $dbResourceMock = $this->getMockBuilder($resourceClassName) ->setMethods(['setProductIdFilter', 'setPositionOrder', 'joinValues']) ->disableOriginalConstructor() @@ -2741,7 +2741,7 @@ class TypeTest extends \PHPUnit_Framework_TestCase $product = $this->getMockBuilder('Magento\Catalog\Model\Product') ->disableOriginalConstructor() ->getMock(); - $resourceClassName = 'Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection'; + $resourceClassName = 'Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection'; $dbResourceMock = $this->getMockBuilder($resourceClassName) ->setMethods(['getItems']) ->disableOriginalConstructor() diff --git a/app/code/Magento/Bundle/etc/adminhtml/events.xml b/app/code/Magento/Bundle/etc/adminhtml/events.xml index 8b0ce8cd5a1d07aa588e693f822d6a1608182105..29b2a0e3861f592cb3d0ba9a58bbcacf760a0e38 100644 --- a/app/code/Magento/Bundle/etc/adminhtml/events.xml +++ b/app/code/Magento/Bundle/etc/adminhtml/events.xml @@ -7,9 +7,9 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="catalog_product_edit_action"> - <observer name="bundle_observer" instance="Magento\Bundle\Observer\SetAttributeTabBlockObserver" method="execute" /> + <observer name="bundle_observer" instance="Magento\Bundle\Observer\SetAttributeTabBlockObserver" /> </event> <event name="catalog_product_new_action"> - <observer name="bundle_observer" instance="Magento\Bundle\Observer\SetAttributeTabBlockObserver" method="execute" /> + <observer name="bundle_observer" instance="Magento\Bundle\Observer\SetAttributeTabBlockObserver" /> </event> </config> diff --git a/app/code/Magento/Bundle/etc/frontend/events.xml b/app/code/Magento/Bundle/etc/frontend/events.xml index 087214a11ede2c0cdf62a2a9b7065596b1e4b312..69aef0c5e5a2000badeb877f43ff54be28809226 100644 --- a/app/code/Magento/Bundle/etc/frontend/events.xml +++ b/app/code/Magento/Bundle/etc/frontend/events.xml @@ -7,12 +7,12 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="catalog_product_upsell"> - <observer name="bundle_observer" instance="Magento\Bundle\Observer\AppendUpsellProductsObserver" method="execute"/> + <observer name="bundle_observer" instance="Magento\Bundle\Observer\AppendUpsellProductsObserver"/> </event> <event name="catalog_product_collection_load_after"> - <observer name="bundle_observer" instance="Magento\Bundle\Observer\LoadProductOptionsObserver" method="execute"/> + <observer name="bundle_observer" instance="Magento\Bundle\Observer\LoadProductOptionsObserver"/> </event> <event name="product_option_renderer_init"> - <observer name="bundle_observer" instance="Magento\Bundle\Observer\InitOptionRendererObserver" method="execute"/> + <observer name="bundle_observer" instance="Magento\Bundle\Observer\InitOptionRendererObserver"/> </event> </config> diff --git a/app/code/Magento/Bundle/view/adminhtml/web/js/bundle-product.js b/app/code/Magento/Bundle/view/adminhtml/web/js/bundle-product.js index 4d4c1526c8aa49835fff12ac7b7d91a3bdef22a8..e66c9b35026b03ed3a78cc4cc42a3672ed54a547 100644 --- a/app/code/Magento/Bundle/view/adminhtml/web/js/bundle-product.js +++ b/app/code/Magento/Bundle/view/adminhtml/web/js/bundle-product.js @@ -9,11 +9,12 @@ define([ "jquery", "Magento_Catalog/js/product/weight-handler", + "Magento_Ui/js/modal/modal", "jquery/ui", "mage/translate", "Magento_Theme/js/sortable", "prototype" -], function ($, weightHandler) { +], function($, weightHandler, modal){ 'use strict'; $.widget('mage.bundleProduct', { @@ -81,7 +82,7 @@ define([ var widget = this; this._on({'click .add-selection': function (event) { var $optionBox = $(event.target).closest('.option-box'), - $selectionGrid = $optionBox.find('.selection-search'), + $selectionGrid = $optionBox.find('.selection-search').clone(), optionIndex = $optionBox.attr('id').replace('bundle_option_', ''), productIds = [], productSkus = [], @@ -114,21 +115,21 @@ define([ delete selectedProductList[$(this).val()]; } }); - $selectionGrid.dialog({ + + $selectionGrid.modal({ title: $optionBox.find('input[name$="[title]"]').val() === '' ? $.mage.__('Add Products to New Option') : $.mage.__('Add Products to Option "%1"') .replace('%1',($('<div>').text($optionBox.find('input[name$="[title]"]').val()).html())), - autoOpen: false, - minWidth: 980, - width: '75%', - dialogClass: 'bundle', - modal: true, - resizable: true, + modalClass: 'bundle', + type: 'slide', + closed: function(e, modal) { + modal.modal.remove(); + }, buttons: [{ text: $.mage.__('Add Selected Products'), 'class': 'action-primary action-add', - click: function() { + click: function () { $.each(selectedProductList, function() { window.bSelection.addRow(optionIndex, this); }); @@ -141,34 +142,10 @@ define([ ); widget.refreshSortableElements(); widget._updateSelectionsPositions.apply(widget.element); - $selectionGrid.dialog('close'); - } - }, { - text: $.mage.__('Cancel'), - 'class': 'action-close', - click: function() { - $selectionGrid.dialog('close'); + $selectionGrid.modal('closeModal'); } - }], - position: { - my: 'left top', - at: 'center top', - of: 'body' - }, - open: function () { - $(this).closest('.ui-dialog').addClass('ui-dialog-active'); - - var topMargin = $(this).closest('.ui-dialog').children('.ui-dialog-titlebar').outerHeight() + 45; - $(this).closest('.ui-dialog').css('margin-top', topMargin); - - $(this).addClass('admin__scope-old'); // ToDo UI: remove with old styles removal - }, - close: function() { - $(this).closest('.ui-dialog').removeClass('ui-dialog-active'); - $(this).dialog('destroy'); - } + }] }); - $.ajax({ url: bSelection.selectionSearchUrl, dataType: 'html', @@ -179,7 +156,7 @@ define([ form_key: FORM_KEY }, success: function(data) { - $selectionGrid.html(data).dialog('open'); + $selectionGrid.html(data).modal('openModal'); }, context: $('body'), showLoader: true diff --git a/app/code/Magento/CacheInvalidate/etc/events.xml b/app/code/Magento/CacheInvalidate/etc/events.xml index ff1a55ff609a9801e0cbe5eb0ce3f5c0ea3acffd..202f4332ca26d74e6538c3d4018f54784d3dee74 100644 --- a/app/code/Magento/CacheInvalidate/etc/events.xml +++ b/app/code/Magento/CacheInvalidate/etc/events.xml @@ -7,45 +7,45 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="clean_cache_by_tags"> - <observer name="invalidate_varnish" instance="Magento\CacheInvalidate\Observer\InvalidateVarnishObserver" method="execute"/> + <observer name="invalidate_varnish" instance="Magento\CacheInvalidate\Observer\InvalidateVarnishObserver"/> </event> <event name="adminhtml_cache_flush_system"> - <observer name="flush_varnish_pagecache" instance="Magento\CacheInvalidate\Observer\FlushAllCacheObserver" method="execute"/> + <observer name="flush_varnish_pagecache" instance="Magento\CacheInvalidate\Observer\FlushAllCacheObserver"/> </event> <event name="clean_media_cache_after"> - <observer name="flush_varnish_pagecache" instance="Magento\CacheInvalidate\Observer\FlushAllCacheObserver" method="execute"/> + <observer name="flush_varnish_pagecache" instance="Magento\CacheInvalidate\Observer\FlushAllCacheObserver"/> </event> <event name="clean_catalog_images_cache_after"> - <observer name="flush_varnish_pagecache" instance="Magento\CacheInvalidate\Observer\FlushAllCacheObserver" method="execute"/> + <observer name="flush_varnish_pagecache" instance="Magento\CacheInvalidate\Observer\FlushAllCacheObserver"/> </event> <event name="assigned_theme_changed"> - <observer name="flush_varnish_pagecache" instance="Magento\CacheInvalidate\Observer\InvalidateVarnishObserver" method="execute"/> + <observer name="flush_varnish_pagecache" instance="Magento\CacheInvalidate\Observer\InvalidateVarnishObserver"/> </event> <event name="catalogrule_after_apply"> - <observer name="flush_varnish_pagecache" instance="Magento\CacheInvalidate\Observer\InvalidateVarnishObserver" method="execute"/> + <observer name="flush_varnish_pagecache" instance="Magento\CacheInvalidate\Observer\InvalidateVarnishObserver"/> </event> <event name="adminhtml_cache_refresh_type"> - <observer name="flush_varnish_pagecache" instance="Magento\CacheInvalidate\Observer\FlushAllCacheObserver" method="execute"/> + <observer name="flush_varnish_pagecache" instance="Magento\CacheInvalidate\Observer\FlushAllCacheObserver"/> </event> <event name="adminhtml_cache_flush_all"> - <observer name="flush_varnish_pagecache" instance="Magento\CacheInvalidate\Observer\FlushAllCacheObserver" method="execute"/> + <observer name="flush_varnish_pagecache" instance="Magento\CacheInvalidate\Observer\FlushAllCacheObserver"/> </event> <event name="assign_theme_to_stores_after"> - <observer name="flush_varnish_pagecache" instance="Magento\CacheInvalidate\Observer\FlushAllCacheObserver" method="execute"/> + <observer name="flush_varnish_pagecache" instance="Magento\CacheInvalidate\Observer\FlushAllCacheObserver"/> </event> <event name="controller_action_postdispatch_adminhtml_system_currency_saveRates"> - <observer name="flush_varnish_pagecache" instance="Magento\CacheInvalidate\Observer\InvalidateVarnishObserver" method="execute"/> + <observer name="flush_varnish_pagecache" instance="Magento\CacheInvalidate\Observer\InvalidateVarnishObserver"/> </event> <event name="controller_action_postdispatch_adminhtml_system_config_save"> - <observer name="flush_varnish_pagecache" instance="Magento\CacheInvalidate\Observer\InvalidateVarnishObserver" method="execute"/> + <observer name="flush_varnish_pagecache" instance="Magento\CacheInvalidate\Observer\InvalidateVarnishObserver"/> </event> <event name="controller_action_postdispatch_adminhtml_catalog_product_action_attribute_save"> - <observer name="flush_varnish_pagecache" instance="Magento\CacheInvalidate\Observer\InvalidateVarnishObserver" method="execute"/> + <observer name="flush_varnish_pagecache" instance="Magento\CacheInvalidate\Observer\InvalidateVarnishObserver"/> </event> <event name="controller_action_postdispatch_adminhtml_catalog_product_massStatus"> - <observer name="flush_varnish_pagecache" instance="Magento\CacheInvalidate\Observer\InvalidateVarnishObserver" method="execute"/> + <observer name="flush_varnish_pagecache" instance="Magento\CacheInvalidate\Observer\InvalidateVarnishObserver"/> </event> <event name="controller_action_postdispatch_adminhtml_system_currencysymbol_save"> - <observer name="flush_varnish_pagecache" instance="Magento\CacheInvalidate\Observer\InvalidateVarnishObserver" method="execute"/> + <observer name="flush_varnish_pagecache" instance="Magento\CacheInvalidate\Observer\InvalidateVarnishObserver"/> </event> </config> \ No newline at end of file diff --git a/app/code/Magento/Captcha/Model/ResourceModel/Log.php b/app/code/Magento/Captcha/Model/ResourceModel/Log.php index de6d38876d0dab0a9d6bddd0ec925f73a598767a..cdd46fbb97d156df835d081b8657b0347bbc5a41 100644 --- a/app/code/Magento/Captcha/Model/ResourceModel/Log.php +++ b/app/code/Magento/Captcha/Model/ResourceModel/Log.php @@ -10,7 +10,7 @@ namespace Magento\Captcha\Model\ResourceModel; * * @author Magento Core Team <core@magentocommerce.com> */ -class Log extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Log extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Type Remote Address @@ -35,13 +35,13 @@ class Log extends \Magento\Framework\Model\ModelResource\Db\AbstractDb protected $_remoteAddress; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Framework\Stdlib\DateTime\DateTime $coreDate * @param \Magento\Framework\HTTP\PhpEnvironment\RemoteAddress $remoteAddress * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Framework\Stdlib\DateTime\DateTime $coreDate, \Magento\Framework\HTTP\PhpEnvironment\RemoteAddress $remoteAddress, $connectionName = null diff --git a/app/code/Magento/Captcha/etc/adminhtml/events.xml b/app/code/Magento/Captcha/etc/adminhtml/events.xml index 5a64fcb0125f055b5d1691b4288b605d0344fee0..b1742329fb0ab5f06de748d86d829e631ba86e14 100644 --- a/app/code/Magento/Captcha/etc/adminhtml/events.xml +++ b/app/code/Magento/Captcha/etc/adminhtml/events.xml @@ -7,9 +7,9 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="controller_action_predispatch_adminhtml_auth_forgotpassword"> - <observer name="captcha" instance="Magento\Captcha\Observer\CheckUserForgotPasswordBackendObserver" method="execute" /> + <observer name="captcha" instance="Magento\Captcha\Observer\CheckUserForgotPasswordBackendObserver" /> </event> <event name="controller_action_predispatch_customer_account_forgotpasswordpost"> - <observer name="captcha" instance="Magento\Captcha\Observer\CheckForgotpasswordObserver" method="execute" /> + <observer name="captcha" instance="Magento\Captcha\Observer\CheckForgotpasswordObserver" /> </event> </config> diff --git a/app/code/Magento/Captcha/etc/events.xml b/app/code/Magento/Captcha/etc/events.xml index 76e183742da5c2f36693a770b80f68a3726867d7..66595abf9780e0e1aa92e53ccffb3d7fc99e4c62 100644 --- a/app/code/Magento/Captcha/etc/events.xml +++ b/app/code/Magento/Captcha/etc/events.xml @@ -7,25 +7,25 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="controller_action_predispatch_customer_account_loginPost"> - <observer name="captcha" instance="Magento\Captcha\Observer\CheckUserLoginObserver" method="execute" /> + <observer name="captcha" instance="Magento\Captcha\Observer\CheckUserLoginObserver" /> </event> <event name="controller_action_predispatch_customer_account_createpost"> - <observer name="captcha" instance="Magento\Captcha\Observer\CheckUserCreateObserver" method="execute" /> + <observer name="captcha" instance="Magento\Captcha\Observer\CheckUserCreateObserver" /> </event> <event name="controller_action_predispatch_customer_account_forgotpasswordpost"> - <observer name="captcha" instance="Magento\Captcha\Observer\CheckForgotpasswordObserver" method="execute"/> + <observer name="captcha" instance="Magento\Captcha\Observer\CheckForgotpasswordObserver"/> </event> <event name="admin_user_authenticate_before"> - <observer name="captcha" instance="Magento\Captcha\Observer\CheckUserLoginBackendObserver" method="execute" /> + <observer name="captcha" instance="Magento\Captcha\Observer\CheckUserLoginBackendObserver" /> </event> <event name="controller_action_predispatch_checkout_onepage_saveBilling"> - <observer name="captcha_guest" instance="Magento\Captcha\Observer\CheckGuestCheckoutObserver" method="execute" /> - <observer name="captcha_register" instance="Magento\Captcha\Observer\CheckRegisterCheckoutObserver" method="execute" /> + <observer name="captcha_guest" instance="Magento\Captcha\Observer\CheckGuestCheckoutObserver" /> + <observer name="captcha_register" instance="Magento\Captcha\Observer\CheckRegisterCheckoutObserver" /> </event> <event name="customer_customer_authenticated"> - <observer name="captcha_reset_attempt" instance="Magento\Captcha\Observer\ResetAttemptForFrontendObserver" method="execute" /> + <observer name="captcha_reset_attempt" instance="Magento\Captcha\Observer\ResetAttemptForFrontendObserver" /> </event> <event name="backend_auth_user_login_success"> - <observer name="captcha_reset_attempt" instance="Magento\Captcha\Observer\ResetAttemptForBackendObserver" method="execute" /> + <observer name="captcha_reset_attempt" instance="Magento\Captcha\Observer\ResetAttemptForBackendObserver" /> </event> </config> diff --git a/app/code/Magento/Captcha/etc/frontend/events.xml b/app/code/Magento/Captcha/etc/frontend/events.xml index 7948d0932628c8bc70618aa4cc6e23da1f81be15..c2fdb7b0660852b2829bc3a8f13866f672968598 100644 --- a/app/code/Magento/Captcha/etc/frontend/events.xml +++ b/app/code/Magento/Captcha/etc/frontend/events.xml @@ -7,6 +7,6 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="controller_action_predispatch_contact_index_post"> - <observer name="captcha_contact_us_form" instance="Magento\Captcha\Observer\CheckContactUsFormObserver" method="execute" /> + <observer name="captcha_contact_us_form" instance="Magento\Captcha\Observer\CheckContactUsFormObserver" /> </event> </config> diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Category/AbstractCategory.php b/app/code/Magento/Catalog/Block/Adminhtml/Category/AbstractCategory.php index 06e26a33c1622b6c24b175c37d45f1d9f5a3ff2c..55b857949c7492620a79fb156198b1617636d983 100644 --- a/app/code/Magento/Catalog/Block/Adminhtml/Category/AbstractCategory.php +++ b/app/code/Magento/Catalog/Block/Adminhtml/Category/AbstractCategory.php @@ -170,7 +170,7 @@ class AbstractCategory extends \Magento\Backend\Block\Template } /** - * @return \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection + * @return \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection */ public function getCategoryCollection() { @@ -279,7 +279,7 @@ class AbstractCategory extends \Magento\Backend\Block\Template { $ids = $this->getData('root_ids'); if ($ids === null) { - $ids = []; + $ids = [\Magento\Catalog\Model\Category::TREE_ROOT_ID]; foreach ($this->_storeManager->getGroups() as $store) { $ids[] = $store->getRootCategoryId(); } diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Options/Popup/Grid.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Options/Popup/Grid.php index d1683071dd1b1b9cb500d9ff6a049c7b68e1482d..53bcc298732f9d804846b252f950e4e9c5d3b936 100644 --- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Options/Popup/Grid.php +++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Options/Popup/Grid.php @@ -56,6 +56,17 @@ class Grid extends \Magento\Catalog\Block\Adminhtml\Product\Grid return $this; } + /** + * @return $this + */ + protected function _prepareCollection() + { + parent::_prepareCollection(); + $this->getCollection()->addFieldToFilter('has_options', 1); + + return $this; + } + /** * Define grid update URL for ajax queries * diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Websites.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Websites.php index 32b04c6279096acaa0c0f42227ceee7fc29e2453..853c0c760e7da6f3be6b1c06a39cc02361b1906b 100644 --- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Websites.php +++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Websites.php @@ -131,7 +131,10 @@ class Websites extends \Magento\Backend\Block\Store\Switcher public function getChooseFromStoreHtml($storeTo) { if (!$this->_storeFromHtml) { - $this->_storeFromHtml = '<select name="copy_to_stores[__store_identifier__]" disabled="disabled">'; + $this->_storeFromHtml = '<select ' . + 'class="admin__control-select" ' . + 'name="copy_to_stores[__store_identifier__]" ' . + 'disabled="disabled">'; $this->_storeFromHtml .= '<option value="0">' . __('Default Values') . '</option>'; foreach ($this->getWebsiteCollection() as $_website) { if (!$this->hasWebsite($_website->getId())) { diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Grid.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Grid.php index 9c17e2b171eda191e3458fad3fe5461bf3de327b..e6f12259918729648a443e1310e05b196f2e7b25 100644 --- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Grid.php +++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Grid.php @@ -114,6 +114,8 @@ class Grid extends \Magento\Backend\Block\Widget\Grid\Extended */ protected function _prepareCollection() { + parent::_prepareCollection(); + $store = $this->_getStore(); $collection = $this->_productFactory->create()->getCollection()->addAttributeToSelect( 'sku' @@ -181,7 +183,6 @@ class Grid extends \Magento\Backend\Block\Widget\Grid\Extended $this->setCollection($collection); - parent::_prepareCollection(); $this->getCollection()->addWebsiteNamesToResult(); return $this; } diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Helper/Form/Weight.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Helper/Form/Weight.php index de677ca788b28f5d3d3fd9d393c4da47bec2b09f..22d35526703ed6092dd2f866f6ed42242a4e6c37 100644 --- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Helper/Form/Weight.php +++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Helper/Form/Weight.php @@ -26,11 +26,15 @@ class Weight extends \Magento\Framework\Data\Form\Element\Text */ protected $localeFormat; + /** @var \Magento\Directory\Helper\Data */ + protected $directoryHelper; + /** * @param \Magento\Framework\Data\Form\Element\Factory $factoryElement * @param \Magento\Framework\Data\Form\Element\CollectionFactory $factoryCollection * @param \Magento\Framework\Escaper $escaper * @param \Magento\Framework\Locale\Format $localeFormat + * @param \Magento\Directory\Helper\Data $directoryHelper * @param array $data */ public function __construct( @@ -38,8 +42,10 @@ class Weight extends \Magento\Framework\Data\Form\Element\Text \Magento\Framework\Data\Form\Element\CollectionFactory $factoryCollection, \Magento\Framework\Escaper $escaper, \Magento\Framework\Locale\Format $localeFormat, + \Magento\Directory\Helper\Data $directoryHelper, array $data = [] ) { + $this->directoryHelper = $directoryHelper; $this->localeFormat = $localeFormat; $this->weightSwitcher = $factoryElement->create('radios'); $this->weightSwitcher->setValue( @@ -85,7 +91,7 @@ class Weight extends \Magento\Framework\Data\Form\Element\Text '<label class="admin__addon-suffix" for="' . $this->getHtmlId() . '"><span>' . - __('lbs') . + $this->directoryHelper->getWeightUnit() . '</span></label>' . '</div>' . '</div>'; diff --git a/app/code/Magento/Catalog/Block/Product/ListProduct.php b/app/code/Magento/Catalog/Block/Product/ListProduct.php index 73beec6b2b2e1236434d304e1d0fe94e71091662..c28ab40b55364cb60cf301964fe9c6ffce30ce69 100644 --- a/app/code/Magento/Catalog/Block/Product/ListProduct.php +++ b/app/code/Magento/Catalog/Block/Product/ListProduct.php @@ -296,7 +296,7 @@ class ListProduct extends AbstractProduct implements IdentityInterface } $availableOrders = $this->getAvailableOrders(); if (!$this->getSortBy()) { - $categorySortBy = $category->getDefaultSortBy(); + $categorySortBy = $this->getDefaultSortBy() ?: $category->getDefaultSortBy(); if ($categorySortBy) { if (!$availableOrders) { $availableOrders = $this->_getConfig()->getAttributeUsedForSortByArray(); diff --git a/app/code/Magento/Catalog/Block/Product/ProductList/Toolbar.php b/app/code/Magento/Catalog/Block/Product/ProductList/Toolbar.php index c44c68e372aa3bcac5f36923db5470af1c797fe5..d4b02cfda69dd4e18fd5e8f79d713b8ca8f3f7a1 100644 --- a/app/code/Magento/Catalog/Block/Product/ProductList/Toolbar.php +++ b/app/code/Magento/Catalog/Block/Product/ProductList/Toolbar.php @@ -5,6 +5,7 @@ */ namespace Magento\Catalog\Block\Product\ProductList; +use Magento\Catalog\Helper\Product\ProductList; use Magento\Catalog\Model\Product\ProductList\Toolbar as ToolbarModel; /** @@ -19,7 +20,7 @@ class Toolbar extends \Magento\Framework\View\Element\Template /** * Products collection * - * @var \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection + * @var \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection */ protected $_collection = null; @@ -63,7 +64,7 @@ class Toolbar extends \Magento\Framework\View\Element\Template * * @var string */ - protected $_direction = \Magento\Catalog\Helper\Product\ProductList::DEFAULT_SORT_DIRECTION; + protected $_direction = ProductList::DEFAULT_SORT_DIRECTION; /** * Default View mode @@ -102,7 +103,7 @@ class Toolbar extends \Magento\Framework\View\Element\Template protected $_toolbarModel; /** - * @var \Magento\Catalog\Helper\Product\ProductList + * @var ProductList */ protected $_productListHelper; @@ -122,7 +123,7 @@ class Toolbar extends \Magento\Framework\View\Element\Template * @param \Magento\Catalog\Model\Config $catalogConfig * @param ToolbarModel $toolbarModel * @param \Magento\Framework\Url\EncoderInterface $urlEncoder - * @param \Magento\Catalog\Helper\Product\ProductList $productListHelper + * @param ProductList $productListHelper * @param \Magento\Framework\Data\Helper\PostHelper $postDataHelper * @param array $data */ @@ -132,7 +133,7 @@ class Toolbar extends \Magento\Framework\View\Element\Template \Magento\Catalog\Model\Config $catalogConfig, ToolbarModel $toolbarModel, \Magento\Framework\Url\EncoderInterface $urlEncoder, - \Magento\Catalog\Helper\Product\ProductList $productListHelper, + ProductList $productListHelper, \Magento\Framework\Data\Helper\PostHelper $postDataHelper, array $data = [] ) { @@ -197,7 +198,7 @@ class Toolbar extends \Magento\Framework\View\Element\Template /** * Return products collection instance * - * @return \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection + * @return \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection */ public function getCollection() { @@ -355,7 +356,7 @@ class Toolbar extends \Magento\Framework\View\Element\Template } /** - * Compare defined order field vith current order field + * Compare defined order field with current order field * * @param string $order * @return bool @@ -375,7 +376,7 @@ class Toolbar extends \Magento\Framework\View\Element\Template { $urlParams = []; $urlParams['_current'] = true; - $urlParams['_escape'] = true; + $urlParams['_escape'] = false; $urlParams['_use_rewrite'] = true; $urlParams['_query'] = $params; return $this->getUrl('*/*/*', $urlParams); @@ -678,7 +679,7 @@ class Toolbar extends \Magento\Framework\View\Element\Template 'order' => ToolbarModel::ORDER_PARAM_NAME, 'limit' => ToolbarModel::LIMIT_PARAM_NAME, 'modeDefault' => $defaultMode, - 'directionDefault' => \Magento\Catalog\Helper\Product\ProductList::DEFAULT_SORT_DIRECTION, + 'directionDefault' => $this->_direction ?: ProductList::DEFAULT_SORT_DIRECTION, 'orderDefault' => $this->_productListHelper->getDefaultSortField(), 'limitDefault' => $this->_productListHelper->getDefaultLimitPerPageValue($defaultMode), 'url' => $this->getPagerUrl(), diff --git a/app/code/Magento/Catalog/Block/Product/View/Gallery.php b/app/code/Magento/Catalog/Block/Product/View/Gallery.php index e7817243ac2a70c68d05dacb7b020cfc07e29c78..484dbb2cd646e9e4c42e382e30527c4f82d0336b 100644 --- a/app/code/Magento/Catalog/Block/Product/View/Gallery.php +++ b/app/code/Magento/Catalog/Block/Product/View/Gallery.php @@ -12,6 +12,7 @@ namespace Magento\Catalog\Block\Product\View; use Magento\Framework\Data\Collection; +use Magento\Framework\Json\EncoderInterface; use Magento\Catalog\Helper\Image; class Gallery extends \Magento\Catalog\Block\Product\View\AbstractView @@ -21,6 +22,27 @@ class Gallery extends \Magento\Catalog\Block\Product\View\AbstractView */ protected $configView; + /** + * @var \Magento\Framework\Json\EncoderInterface + */ + protected $jsonEncoder; + + /** + * @param \Magento\Catalog\Block\Product\Context $context + * @param \Magento\Framework\Stdlib\ArrayUtils $arrayUtils + * @param EncoderInterface $jsonEncoder + * @param array $data + */ + public function __construct( + \Magento\Catalog\Block\Product\Context $context, + \Magento\Framework\Stdlib\ArrayUtils $arrayUtils, + EncoderInterface $jsonEncoder, + array $data = [] + ) { + $this->jsonEncoder = $jsonEncoder; + parent::__construct($context, $arrayUtils, $data); + } + /** * Retrieve collection of gallery images * @@ -42,12 +64,14 @@ class Gallery extends \Magento\Catalog\Block\Product\View\AbstractView $image->setData( 'medium_image_url', $this->_imageHelper->init($product, 'product_page_image_medium') + ->constrainOnly(true)->keepAspectRatio(true)->keepFrame(false) ->setImageFile($image->getFile()) ->getUrl() ); $image->setData( 'large_image_url', $this->_imageHelper->init($product, 'product_page_image_large') + ->constrainOnly(true)->keepAspectRatio(true)->keepFrame(false) ->setImageFile($image->getFile()) ->getUrl() ); @@ -57,6 +81,26 @@ class Gallery extends \Magento\Catalog\Block\Product\View\AbstractView return $images; } + /** + * Return magnifier options + * + * @return string + */ + public function getMagnifier() + { + return $this->jsonEncoder->encode($this->getVar('magnifier')); + } + + /** + * Return breakpoints options + * + * @return string + */ + public function getBreakpoints() + { + return $this->jsonEncoder->encode($this->getVar('breakpoints')); + } + /** * Retrieve product images in JSON format * @@ -69,12 +113,22 @@ class Gallery extends \Magento\Catalog\Block\Product\View\AbstractView $imagesItems[] = [ 'thumb' => $image->getData('small_image_url'), 'img' => $image->getData('medium_image_url'), - 'original' => $image->getData('large_image_url'), + 'full' => $image->getData('large_image_url'), 'caption' => $image->getLabel(), 'position' => $image->getPosition(), 'isMain' => $this->isMainImage($image), ]; } + if (empty($imagesItems)) { + $imagesItems[] = [ + 'thumb' => $this->_imageHelper->getDefaultPlaceholderUrl('thumbnail'), + 'img' => $this->_imageHelper->getDefaultPlaceholderUrl('image'), + 'full' => $this->_imageHelper->getDefaultPlaceholderUrl('image'), + 'caption' => '', + 'position' => '0', + 'isMain' => true, + ]; + } return json_encode($imagesItems); } diff --git a/app/code/Magento/Catalog/Block/Product/Widget/Html/Pager.php b/app/code/Magento/Catalog/Block/Product/Widget/Html/Pager.php index ce0782bf21df3471e1bc105a3b913afdf2a5bf71..f069f70bad9af87601bea5423192162b3dbba763 100644 --- a/app/code/Magento/Catalog/Block/Product/Widget/Html/Pager.php +++ b/app/code/Magento/Catalog/Block/Product/Widget/Html/Pager.php @@ -98,7 +98,7 @@ class Pager extends \Magento\Theme\Block\Html\Pager /** * Connect collection to paging * - * @param \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection $collection + * @param \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection $collection * @return \Magento\Catalog\Block\Product\Widget\Html\Pager */ public function setCollection($collection) diff --git a/app/code/Magento/Catalog/Helper/Image.php b/app/code/Magento/Catalog/Helper/Image.php index c4ceb6bea1f0dc935d8f68ace714e707d81ce6ae..a847e8c42454a69984dff90c330a8fa39848f66e 100644 --- a/app/code/Magento/Catalog/Helper/Image.php +++ b/app/code/Magento/Catalog/Helper/Image.php @@ -436,11 +436,13 @@ class Image extends AbstractHelper */ public function getPlaceholder($placeholder = null) { - if (!$this->_placeholder) { - $placeholder = $placeholder ? : $this->_getModel()->getDestinationSubdir(); - $this->_placeholder = 'Magento_Catalog::images/product/placeholder/' . $placeholder . '.jpg'; + if ($placeholder) { + $placeholderFullPath = 'Magento_Catalog::images/product/placeholder/' . $placeholder . '.jpg'; + } else { + $placeholderFullPath = $this->_placeholder + ?: 'Magento_Catalog::images/product/placeholder/' . $this->_getModel()->getDestinationSubdir() . '.jpg'; } - return $this->_placeholder; + return $placeholderFullPath; } /** @@ -816,7 +818,7 @@ class Image extends AbstractHelper */ public function getHeight() { - return $this->getAttribute('height') ? : $this->getAttribute('width'); + return $this->getAttribute('height') ?: $this->getAttribute('width'); } /** diff --git a/app/code/Magento/Catalog/Model/AbstractModel.php b/app/code/Magento/Catalog/Model/AbstractModel.php index d42a0ed870ee92a9164d39b1ac7048f24037acc4..6b4d310b8293b443ca65cc21818a8fe0f03c1fbe 100644 --- a/app/code/Magento/Catalog/Model/AbstractModel.php +++ b/app/code/Magento/Catalog/Model/AbstractModel.php @@ -65,7 +65,7 @@ abstract class AbstractModel extends \Magento\Framework\Model\AbstractExtensible * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory * @param AttributeValueFactory $customAttributeFactory * @param \Magento\Store\Model\StoreManagerInterface $storeManager - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -75,7 +75,7 @@ abstract class AbstractModel extends \Magento\Framework\Model\AbstractExtensible \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory, AttributeValueFactory $customAttributeFactory, \Magento\Store\Model\StoreManagerInterface $storeManager, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Catalog/Model/Category.php b/app/code/Magento/Catalog/Model/Category.php index b27d233a2f875952c02bee5f8ad24118e17a9f85..b95b1e9da7424d3806837b07a89467186cc7a7fd 100644 --- a/app/code/Magento/Catalog/Model/Category.php +++ b/app/code/Magento/Catalog/Model/Category.php @@ -242,7 +242,7 @@ class Category extends \Magento\Catalog\Model\AbstractModel implements * @param UrlFinderInterface $urlFinder * @param \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry * @param CategoryRepositoryInterface $categoryRepository - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -266,7 +266,7 @@ class Category extends \Magento\Catalog\Model\AbstractModel implements UrlFinderInterface $urlFinder, \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry, CategoryRepositoryInterface $categoryRepository, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Catalog/Model/Config/Backend/Category.php b/app/code/Magento/Catalog/Model/Config/Backend/Category.php index 31baf9603a098582de9548126bb7f89fd1d5843b..9634b182bd4b25bb05a0be3af3b0cef28fcad5ab 100644 --- a/app/code/Magento/Catalog/Model/Config/Backend/Category.php +++ b/app/code/Magento/Catalog/Model/Config/Backend/Category.php @@ -26,7 +26,7 @@ class Category extends \Magento\Framework\App\Config\Value * @param \Magento\Framework\Registry $registry * @param \Magento\Framework\App\Config\ScopeConfigInterface $config * @param \Magento\Catalog\Model\Category $catalogCategory - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -35,7 +35,7 @@ class Category extends \Magento\Framework\App\Config\Value \Magento\Framework\Registry $registry, \Magento\Framework\App\Config\ScopeConfigInterface $config, \Magento\Catalog\Model\Category $catalogCategory, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Catalog/Model/Config/CatalogClone/Media/Image.php b/app/code/Magento/Catalog/Model/Config/CatalogClone/Media/Image.php index 2fd92365d14e1464bc343229c714274cbdb023db..2f0c8f4e2eefe51aeaff11820d53fb793265ea3e 100644 --- a/app/code/Magento/Catalog/Model/Config/CatalogClone/Media/Image.php +++ b/app/code/Magento/Catalog/Model/Config/CatalogClone/Media/Image.php @@ -32,7 +32,7 @@ class Image extends \Magento\Framework\App\Config\Value * @param \Magento\Framework\App\Config\ScopeConfigInterface $config * @param \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory $attributeCollectionFactory * @param \Magento\Eav\Model\Config $eavConfig - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -42,7 +42,7 @@ class Image extends \Magento\Framework\App\Config\Value \Magento\Framework\App\Config\ScopeConfigInterface $config, \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory $attributeCollectionFactory, \Magento\Eav\Model\Config $eavConfig, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Catalog/Model/CustomOptions/CustomOption.php b/app/code/Magento/Catalog/Model/CustomOptions/CustomOption.php index 7a31387ada6a34d315e2cdbc53c9c272fe629d9b..b04a2cffde7edd5752051e721c0477709ecf863e 100644 --- a/app/code/Magento/Catalog/Model/CustomOptions/CustomOption.php +++ b/app/code/Magento/Catalog/Model/CustomOptions/CustomOption.php @@ -11,7 +11,7 @@ use Magento\Framework\Api\AttributeValueFactory; use Magento\Framework\Model\Context; use Magento\Framework\Registry; use Magento\Framework\Api\ExtensionAttributesFactory; -use Magento\Framework\Model\ModelResource\AbstractResource; +use Magento\Framework\Model\ResourceModel\AbstractResource; use Magento\Framework\Data\Collection\AbstractDb; use Magento\Catalog\Model\Webapi\Product\Option\Type\File\Processor as FileProcessor; diff --git a/app/code/Magento/Catalog/Model/Design.php b/app/code/Magento/Catalog/Model/Design.php index 658336e9fdb04f06cc34c47dd3e4e3b14d216cde..fc992154c88eb2014fe2b098ba6709ab222984b6 100644 --- a/app/code/Magento/Catalog/Model/Design.php +++ b/app/code/Magento/Catalog/Model/Design.php @@ -33,7 +33,7 @@ class Design extends \Magento\Framework\Model\AbstractModel * @param \Magento\Framework\Registry $registry * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate * @param \Magento\Framework\View\DesignInterface $design - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -42,7 +42,7 @@ class Design extends \Magento\Framework\Model\AbstractModel \Magento\Framework\Registry $registry, \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate, \Magento\Framework\View\DesignInterface $design, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Catalog/Model/Entity/Attribute.php b/app/code/Magento/Catalog/Model/Entity/Attribute.php index d1f6dd922d521da2570059d6245c1bc213e25fc1..16550971a18bcbfea92bc61f57f24a027ec190da 100644 --- a/app/code/Magento/Catalog/Model/Entity/Attribute.php +++ b/app/code/Magento/Catalog/Model/Entity/Attribute.php @@ -88,7 +88,7 @@ class Attribute extends \Magento\Eav\Model\Entity\Attribute * @param \Magento\Framework\Locale\ResolverInterface $localeResolver * @param DateTimeFormatterInterface $dateTimeFormatter * @param LockValidatorInterface $lockValidator - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -111,7 +111,7 @@ class Attribute extends \Magento\Eav\Model\Entity\Attribute \Magento\Framework\Locale\ResolverInterface $localeResolver, DateTimeFormatterInterface $dateTimeFormatter, LockValidatorInterface $lockValidator, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Catalog/Model/Indexer/Category/Flat/Plugin/StoreGroup.php b/app/code/Magento/Catalog/Model/Indexer/Category/Flat/Plugin/StoreGroup.php index 61f7f1c7ca9c8f3ad6843c003a62dd3d6217b1d5..1f1cb50626bb3dbb4ae44803b3244516d47b93fb 100644 --- a/app/code/Magento/Catalog/Model/Indexer/Category/Flat/Plugin/StoreGroup.php +++ b/app/code/Magento/Catalog/Model/Indexer/Category/Flat/Plugin/StoreGroup.php @@ -39,15 +39,15 @@ class StoreGroup } /** - * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $subject + * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $subject * @param callable $proceed * @param \Magento\Framework\Model\AbstractModel $group * - * @return \Magento\Framework\Model\ModelResource\Db\AbstractDb + * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function aroundSave( - \Magento\Framework\Model\ModelResource\Db\AbstractDb $subject, + \Magento\Framework\Model\ResourceModel\Db\AbstractDb $subject, \Closure $proceed, \Magento\Framework\Model\AbstractModel $group ) { diff --git a/app/code/Magento/Catalog/Model/Indexer/Category/Flat/System/Config/Mode.php b/app/code/Magento/Catalog/Model/Indexer/Category/Flat/System/Config/Mode.php index 3d6eb24ce7d14e5e40227f41ceffe4941535ad88..e72004991e87503b23d9b565a534fcf00a72e4ca 100644 --- a/app/code/Magento/Catalog/Model/Indexer/Category/Flat/System/Config/Mode.php +++ b/app/code/Magento/Catalog/Model/Indexer/Category/Flat/System/Config/Mode.php @@ -22,7 +22,7 @@ class Mode extends \Magento\Framework\App\Config\Value * @param \Magento\Framework\App\Config\ScopeConfigInterface $config * @param \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry * @param \Magento\Indexer\Model\Indexer\State $indexerState - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -32,7 +32,7 @@ class Mode extends \Magento\Framework\App\Config\Value \Magento\Framework\App\Config\ScopeConfigInterface $config, \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry, \Magento\Indexer\Model\Indexer\State $indexerState, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Catalog/Model/Indexer/Category/Product/Plugin/StoreGroup.php b/app/code/Magento/Catalog/Model/Indexer/Category/Product/Plugin/StoreGroup.php index 1c6854fd8d2e72d4b91d50c4f26e9dd52895ed89..859bc2936e0983dccaad0daf41db07d86fbfb0d1 100644 --- a/app/code/Magento/Catalog/Model/Indexer/Category/Product/Plugin/StoreGroup.php +++ b/app/code/Magento/Catalog/Model/Indexer/Category/Product/Plugin/StoreGroup.php @@ -19,14 +19,14 @@ class StoreGroup } /** - * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $subject + * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $subject * @param callable $proceed * @param \Magento\Framework\Model\AbstractModel $group * @return mixed * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function aroundSave( - \Magento\Framework\Model\ModelResource\Db\AbstractDb $subject, + \Magento\Framework\Model\ResourceModel\Db\AbstractDb $subject, \Closure $proceed, \Magento\Framework\Model\AbstractModel $group ) { diff --git a/app/code/Magento/Catalog/Model/Indexer/Product/Flat/System/Config/Mode.php b/app/code/Magento/Catalog/Model/Indexer/Product/Flat/System/Config/Mode.php index e35b88dc0e72e16a76442462c076ba395a7de08a..1db9aae1325cc819a2639b53194bab135cf8552b 100644 --- a/app/code/Magento/Catalog/Model/Indexer/Product/Flat/System/Config/Mode.php +++ b/app/code/Magento/Catalog/Model/Indexer/Product/Flat/System/Config/Mode.php @@ -26,7 +26,7 @@ class Mode extends \Magento\Framework\App\Config\Value * @param \Magento\Framework\App\Config\ScopeConfigInterface $config * @param \Magento\Catalog\Model\Indexer\Product\Flat\Processor $productFlatIndexerProcessor * @param \Magento\Indexer\Model\Indexer\State $indexerState - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -36,7 +36,7 @@ class Mode extends \Magento\Framework\App\Config\Value \Magento\Framework\App\Config\ScopeConfigInterface $config, \Magento\Catalog\Model\Indexer\Product\Flat\Processor $productFlatIndexerProcessor, \Magento\Indexer\Model\Indexer\State $indexerState, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Catalog/Model/Indexer/Product/Price/System/Config/PriceScope.php b/app/code/Magento/Catalog/Model/Indexer/Product/Price/System/Config/PriceScope.php index f66ac598d465bd01d5f3497165c6935a64d4595d..148b5b7a99af73a355ec694df00a636156096fdf 100644 --- a/app/code/Magento/Catalog/Model/Indexer/Product/Price/System/Config/PriceScope.php +++ b/app/code/Magento/Catalog/Model/Indexer/Product/Price/System/Config/PriceScope.php @@ -18,7 +18,7 @@ class PriceScope extends \Magento\Framework\App\Config\Value * @param \Magento\Framework\Registry $registry * @param \Magento\Framework\App\Config\ScopeConfigInterface $config * @param \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -27,7 +27,7 @@ class PriceScope extends \Magento\Framework\App\Config\Value \Magento\Framework\Registry $registry, \Magento\Framework\App\Config\ScopeConfigInterface $config, \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Catalog/Model/Product.php b/app/code/Magento/Catalog/Model/Product.php index a67d5c4dabacc5f5e667a753ca39cef2beeb8033..99709b513ca2cf08167a07f76ac22169ec2001b7 100644 --- a/app/code/Magento/Catalog/Model/Product.php +++ b/app/code/Magento/Catalog/Model/Product.php @@ -19,6 +19,7 @@ use Magento\Catalog\Api\Data\ProductAttributeMediaGalleryEntryExtensionFactory; * Catalog product model * * @method Product setHasError(bool $value) + * @method \Magento\Catalog\Model\ResourceModel\Product getResource() * @method null|bool getHasError() * @method Product setAssociatedProductIds(array $productIds) * @method array getAssociatedProductIds() diff --git a/app/code/Magento/Catalog/Model/Product/Action.php b/app/code/Magento/Catalog/Model/Product/Action.php index ea58673a62f248828404cd003c75e69bc1ac8cc5..c3afb6a6334992e5127d9fb6cacfe2922b6e5ce9 100644 --- a/app/code/Magento/Catalog/Model/Product/Action.php +++ b/app/code/Magento/Catalog/Model/Product/Action.php @@ -42,7 +42,7 @@ class Action extends \Magento\Framework\Model\AbstractModel * @param \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry * @param \Magento\Eav\Model\Config $eavConfig * @param \Magento\Catalog\Model\Indexer\Product\Eav\Processor $productEavIndexerProcessor - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -53,7 +53,7 @@ class Action extends \Magento\Framework\Model\AbstractModel \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry, \Magento\Eav\Model\Config $eavConfig, \Magento\Catalog\Model\Indexer\Product\Eav\Processor $productEavIndexerProcessor, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Catalog/Model/Product/Attribute/Group.php b/app/code/Magento/Catalog/Model/Product/Attribute/Group.php index f1d69e377409cc8236180828f9ab8af765836b0d..ba141dc370cd451188425fcc2dd4ca3208a2680b 100644 --- a/app/code/Magento/Catalog/Model/Product/Attribute/Group.php +++ b/app/code/Magento/Catalog/Model/Product/Attribute/Group.php @@ -23,7 +23,7 @@ class Group extends \Magento\Eav\Model\Entity\Attribute\Group * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory * @param AttributeValueFactory $customAttributeFactory * @param \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory $attributeCollectionFactory - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -33,7 +33,7 @@ class Group extends \Magento\Eav\Model\Entity\Attribute\Group \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory, AttributeValueFactory $customAttributeFactory, \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory $attributeCollectionFactory, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Catalog/Model/Product/Compare/Item.php b/app/code/Magento/Catalog/Model/Product/Compare/Item.php index f81d1bcdaf56e957ee190820b2dc88a7f1d320d1..5ef5fca6a2cd8f1eb9e90218f11334304e188767 100644 --- a/app/code/Magento/Catalog/Model/Product/Compare/Item.php +++ b/app/code/Magento/Catalog/Model/Product/Compare/Item.php @@ -76,7 +76,7 @@ class Item extends \Magento\Framework\Model\AbstractModel implements \Magento\Fr * @param \Magento\Customer\Model\Visitor $customerVisitor * @param \Magento\Customer\Model\Session $customerSession * @param \Magento\Catalog\Helper\Product\Compare $catalogProductCompare - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -87,7 +87,7 @@ class Item extends \Magento\Framework\Model\AbstractModel implements \Magento\Fr \Magento\Customer\Model\Visitor $customerVisitor, \Magento\Customer\Model\Session $customerSession, \Magento\Catalog\Helper\Product\Compare $catalogProductCompare, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Catalog/Model/Product/Image.php b/app/code/Magento/Catalog/Model/Product/Image.php index 5ad174c1ae3fda4b6796ce8c80c668d4c8f96219..de0a0951e373c0a21af6cb977cf7ae17a6d0be5f 100644 --- a/app/code/Magento/Catalog/Model/Product/Image.php +++ b/app/code/Magento/Catalog/Model/Product/Image.php @@ -19,6 +19,9 @@ use Magento\Store\Model\Store; * @SuppressWarnings(PHPMD.TooManyFields) * @SuppressWarnings(PHPMD.ExcessiveClassComplexity) * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + * @method string getFile() + * @method string getLabel() + * @method string getPosition() */ class Image extends \Magento\Framework\Model\AbstractModel { @@ -178,7 +181,7 @@ class Image extends \Magento\Framework\Model\AbstractModel * @param \Magento\Framework\View\Asset\Repository $assetRepo * @param \Magento\Framework\View\FileSystem $viewFileSystem * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -195,7 +198,7 @@ class Image extends \Magento\Framework\Model\AbstractModel \Magento\Framework\View\Asset\Repository $assetRepo, \Magento\Framework\View\FileSystem $viewFileSystem, \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Catalog/Model/Product/Link.php b/app/code/Magento/Catalog/Model/Product/Link.php index b23f43022ad4da410b3c44123d11f09afbc894b2..63208fe83137b4f0de78b1505738eaee12862469 100644 --- a/app/code/Magento/Catalog/Model/Product/Link.php +++ b/app/code/Magento/Catalog/Model/Product/Link.php @@ -60,7 +60,7 @@ class Link extends \Magento\Framework\Model\AbstractModel * @param \Magento\Catalog\Model\ResourceModel\Product\Link\CollectionFactory $linkCollectionFactory * @param \Magento\Catalog\Model\ResourceModel\Product\Link\Product\CollectionFactory $productCollectionFactory * @param \Magento\CatalogInventory\Helper\Stock $stockHelper - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -70,7 +70,7 @@ class Link extends \Magento\Framework\Model\AbstractModel \Magento\Catalog\Model\ResourceModel\Product\Link\CollectionFactory $linkCollectionFactory, \Magento\Catalog\Model\ResourceModel\Product\Link\Product\CollectionFactory $productCollectionFactory, \Magento\CatalogInventory\Helper\Stock $stockHelper, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Catalog/Model/Product/Option.php b/app/code/Magento/Catalog/Model/Product/Option.php index 96bfc698df54c59a27b9309686f01bc805ccf5d8..8b981d6f0b86c19e3102ac34e0ccc0a69ae23a6e 100644 --- a/app/code/Magento/Catalog/Model/Product/Option.php +++ b/app/code/Magento/Catalog/Model/Product/Option.php @@ -122,7 +122,7 @@ class Option extends \Magento\Framework\Model\AbstractExtensibleModel * @param Option\Type\Factory $optionFactory * @param \Magento\Framework\Stdlib\StringUtils $string * @param Option\Validator\Pool $validatorPool - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -136,7 +136,7 @@ class Option extends \Magento\Framework\Model\AbstractExtensibleModel \Magento\Catalog\Model\Product\Option\Type\Factory $optionFactory, \Magento\Framework\Stdlib\StringUtils $string, Option\Validator\Pool $validatorPool, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { @@ -158,7 +158,7 @@ class Option extends \Magento\Framework\Model\AbstractExtensibleModel /** * Get resource instance * - * @return \Magento\Framework\Model\ModelResource\Db\AbstractDb + * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb */ protected function _getResource() { diff --git a/app/code/Magento/Catalog/Model/Product/Option/Value.php b/app/code/Magento/Catalog/Model/Product/Option/Value.php index 0bdc8968cb6d67b8d5f772d2baafae10607e69ce..863c3a374b1cd0e738415fd9b5b0ac65d863a8df 100644 --- a/app/code/Magento/Catalog/Model/Product/Option/Value.php +++ b/app/code/Magento/Catalog/Model/Product/Option/Value.php @@ -66,7 +66,7 @@ class Value extends AbstractModel implements \Magento\Catalog\Api\Data\ProductCu * @param \Magento\Framework\Model\Context $context * @param \Magento\Framework\Registry $registry * @param \Magento\Catalog\Model\ResourceModel\Product\Option\Value\CollectionFactory $valueCollectionFactory - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -74,7 +74,7 @@ class Value extends AbstractModel implements \Magento\Catalog\Api\Data\ProductCu \Magento\Framework\Model\Context $context, \Magento\Framework\Registry $registry, \Magento\Catalog\Model\ResourceModel\Product\Option\Value\CollectionFactory $valueCollectionFactory, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Attribute.php b/app/code/Magento/Catalog/Model/ResourceModel/Attribute.php index 2b349fa7dbdf58355ca90d466aedd69e34cdeb2d..dd522da5888643ed495a7c2e1039d828400cc04c 100644 --- a/app/code/Magento/Catalog/Model/ResourceModel/Attribute.php +++ b/app/code/Magento/Catalog/Model/ResourceModel/Attribute.php @@ -27,7 +27,7 @@ class Attribute extends \Magento\Eav\Model\ResourceModel\Entity\Attribute protected $attrLockValidator; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param \Magento\Eav\Model\ResourceModel\Entity\Type $eavEntityType * @param \Magento\Eav\Model\Config $eavConfig @@ -35,7 +35,7 @@ class Attribute extends \Magento\Eav\Model\ResourceModel\Entity\Attribute * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Eav\Model\ResourceModel\Entity\Type $eavEntityType, \Magento\Eav\Model\Config $eavConfig, diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Category/Attribute/Collection.php b/app/code/Magento/Catalog/Model/ResourceModel/Category/Attribute/Collection.php index 85b65b8075b11c7a8aacb1ff8b8c3aa112d1ffe0..6583e3e60b25e1fef63cf6bee0fb414b772cc20f 100644 --- a/app/code/Magento/Catalog/Model/ResourceModel/Category/Attribute/Collection.php +++ b/app/code/Magento/Catalog/Model/ResourceModel/Category/Attribute/Collection.php @@ -27,7 +27,7 @@ class Collection extends \Magento\Eav\Model\ResourceModel\Entity\Attribute\Colle * @param \Magento\Eav\Model\EntityFactory $eavEntityFactory * @param \Magento\Eav\Model\Config $eavConfig * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection - * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource + * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource */ public function __construct( \Magento\Framework\Data\Collection\EntityFactory $entityFactory, @@ -37,7 +37,7 @@ class Collection extends \Magento\Eav\Model\ResourceModel\Entity\Attribute\Colle \Magento\Eav\Model\Config $eavConfig, \Magento\Eav\Model\EntityFactory $eavEntityFactory, \Magento\Framework\DB\Adapter\AdapterInterface $connection = null, - \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null + \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null ) { $this->_eavEntityFactory = $eavEntityFactory; parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $eavConfig, $connection, $resource); diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Category/Flat.php b/app/code/Magento/Catalog/Model/ResourceModel/Category/Flat.php index 089bfbc10e01a48af44078632e6641ede00c58fd..82000fb03d1703e6e34dfeb854e6d1ad6aca80ee 100644 --- a/app/code/Magento/Catalog/Model/ResourceModel/Category/Flat.php +++ b/app/code/Magento/Catalog/Model/ResourceModel/Category/Flat.php @@ -81,7 +81,7 @@ class Flat extends \Magento\Indexer\Model\ResourceModel\AbstractResource /** * Class constructor * - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Framework\Indexer\Table\StrategyInterface $tableStrategy * @param \Magento\Catalog\Model\CategoryFactory $categoryFactory * @param CollectionFactory $categoryCollectionFactory @@ -91,7 +91,7 @@ class Flat extends \Magento\Indexer\Model\ResourceModel\AbstractResource * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Framework\Indexer\Table\StrategyInterface $tableStrategy, \Magento\Catalog\Model\CategoryFactory $categoryFactory, \Magento\Catalog\Model\ResourceModel\Category\CollectionFactory $categoryCollectionFactory, diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Category/Flat/Collection.php b/app/code/Magento/Catalog/Model/ResourceModel/Category/Flat/Collection.php index b522f1cad89646262ab351ae1113c6e564bfb7f7..83a09410278b83c48de33b8b8b5d70b986fc0723 100644 --- a/app/code/Magento/Catalog/Model/ResourceModel/Category/Flat/Collection.php +++ b/app/code/Magento/Catalog/Model/ResourceModel/Category/Flat/Collection.php @@ -9,7 +9,7 @@ use Magento\CatalogUrlRewrite\Model\CategoryUrlRewriteGenerator; use Magento\Framework\Data\Collection\EntityFactory; use Magento\Framework\Event\ManagerInterface; use Magento\Framework\Data\Collection\Db\FetchStrategyInterface; -use Magento\Framework\Model\ModelResource\Db\AbstractDb; +use Magento\Framework\Model\ResourceModel\Db\AbstractDb; use Psr\Log\LoggerInterface as Logger; use Magento\Store\Model\StoreManagerInterface; @@ -18,7 +18,7 @@ use Magento\Store\Model\StoreManagerInterface; * * @author Magento Core Team <core@magentocommerce.com> */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Event prefix diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Config.php b/app/code/Magento/Catalog/Model/ResourceModel/Config.php index 625e74be6c5e318bb9c09ddf14fa72ce0463fb54..f3e72ab157025e52f2afda41b51b80f463025df3 100644 --- a/app/code/Magento/Catalog/Model/ResourceModel/Config.php +++ b/app/code/Magento/Catalog/Model/ResourceModel/Config.php @@ -10,7 +10,7 @@ namespace Magento\Catalog\Model\ResourceModel; * * @author Magento Core Team <core@magentocommerce.com> */ -class Config extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Config extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * catalog_product entity type id @@ -41,13 +41,13 @@ class Config extends \Magento\Framework\Model\ModelResource\Db\AbstractDb protected $_storeManager; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param \Magento\Eav\Model\Config $eavConfig * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Eav\Model\Config $eavConfig, $connectionName = null diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Eav/Attribute.php b/app/code/Magento/Catalog/Model/ResourceModel/Eav/Attribute.php index 23bb4f402b86bcdb7c2ea88858c69d5f9a72d5bc..2f4d6769131bda05483460e194fbffa9b8be0083 100644 --- a/app/code/Magento/Catalog/Model/ResourceModel/Eav/Attribute.php +++ b/app/code/Magento/Catalog/Model/ResourceModel/Eav/Attribute.php @@ -108,7 +108,7 @@ class Attribute extends \Magento\Eav\Model\Entity\Attribute implements * @param \Magento\Catalog\Helper\Product\Flat\Indexer $productFlatIndexerHelper * @param LockValidatorInterface $lockValidator * @param DateTimeFormatterInterface $dateTimeFormatter - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -134,7 +134,7 @@ class Attribute extends \Magento\Eav\Model\Entity\Attribute implements \Magento\Catalog\Model\Indexer\Product\Eav\Processor $indexerEavProcessor, \Magento\Catalog\Helper\Product\Flat\Indexer $productFlatIndexerHelper, LockValidatorInterface $lockValidator, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Layer/Filter/Attribute.php b/app/code/Magento/Catalog/Model/ResourceModel/Layer/Filter/Attribute.php index 317b92c854a63e69eca6dc7e8698db5197838b9f..b66b8c40629f9a7303ca0ee0f4baabbb3836e324 100644 --- a/app/code/Magento/Catalog/Model/ResourceModel/Layer/Filter/Attribute.php +++ b/app/code/Magento/Catalog/Model/ResourceModel/Layer/Filter/Attribute.php @@ -10,7 +10,7 @@ namespace Magento\Catalog\Model\ResourceModel\Layer\Filter; * * @author Magento Core Team <core@magentocommerce.com> */ -class Attribute extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Attribute extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Initialize connection and define main table name diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Layer/Filter/Decimal.php b/app/code/Magento/Catalog/Model/ResourceModel/Layer/Filter/Decimal.php index 16903344fa5dee9279883ac00fe398644d1f7a3b..5d20f30f20d2f097875ff28287dbd736eac397e4 100644 --- a/app/code/Magento/Catalog/Model/ResourceModel/Layer/Filter/Decimal.php +++ b/app/code/Magento/Catalog/Model/ResourceModel/Layer/Filter/Decimal.php @@ -10,7 +10,7 @@ namespace Magento\Catalog\Model\ResourceModel\Layer\Filter; * * @author Magento Core Team <core@magentocommerce.com> */ -class Decimal extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Decimal extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Initialize connection and define main table name diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Layer/Filter/Price.php b/app/code/Magento/Catalog/Model/ResourceModel/Layer/Filter/Price.php index 4b4c351b95ba3f6e75228c26a4acd15a5f35a563..ddadfcaa97d8b5a8eaac629877ff0187741ebef5 100644 --- a/app/code/Magento/Catalog/Model/ResourceModel/Layer/Filter/Price.php +++ b/app/code/Magento/Catalog/Model/ResourceModel/Layer/Filter/Price.php @@ -8,7 +8,7 @@ namespace Magento\Catalog\Model\ResourceModel\Layer\Filter; /** * Catalog Layer Price Filter resource model */ -class Price extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Price extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Minimal possible price @@ -38,7 +38,7 @@ class Price extends \Magento\Framework\Model\ModelResource\Db\AbstractDb private $storeManager; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Framework\Event\ManagerInterface $eventManager * @param \Magento\Catalog\Model\Layer\Resolver $layerResolver * @param \Magento\Customer\Model\Session $session @@ -46,7 +46,7 @@ class Price extends \Magento\Framework\Model\ModelResource\Db\AbstractDb * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Framework\Event\ManagerInterface $eventManager, \Magento\Catalog\Model\Layer\Resolver $layerResolver, \Magento\Customer\Model\Session $session, diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Backend/GroupPrice/AbstractGroupPrice.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Backend/GroupPrice/AbstractGroupPrice.php index 605667ba9455567aa5dbb72870c2a8813557b96a..95591c93e00676ce3f6b51fb4aaeafa2aaaf119b 100644 --- a/app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Backend/GroupPrice/AbstractGroupPrice.php +++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Backend/GroupPrice/AbstractGroupPrice.php @@ -11,7 +11,7 @@ */ namespace Magento\Catalog\Model\ResourceModel\Product\Attribute\Backend\GroupPrice; -abstract class AbstractGroupPrice extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +abstract class AbstractGroupPrice extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Load Tier Prices for product diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Backend/Media.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Backend/Media.php index bfc39cfe98b3b126b22c2aa25dfd4b0e7160b9d2..a77ea68ae16d5e42855e7e422ff3662eeba5bcf6 100644 --- a/app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Backend/Media.php +++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Backend/Media.php @@ -15,7 +15,7 @@ use Magento\Catalog\Model\Product; * * @author Magento Core Team <core@magentocommerce.com> */ -class Media extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Media extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { const GALLERY_TABLE = 'catalog_product_entity_media_gallery'; diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Collection.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Collection.php index db9e5f9886eb480455a0c1da5761afa0b5e33366..3f396b654f2813ab603231de51c506394aa012ff 100644 --- a/app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Collection.php +++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Collection.php @@ -25,7 +25,7 @@ class Collection extends \Magento\Eav\Model\ResourceModel\Entity\Attribute\Colle * @param \Magento\Eav\Model\EntityFactory $eavEntityFactory * @param \Magento\Eav\Model\Config $eavConfig * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection - * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource + * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource */ public function __construct( \Magento\Framework\Data\Collection\EntityFactory $entityFactory, @@ -35,7 +35,7 @@ class Collection extends \Magento\Eav\Model\ResourceModel\Entity\Attribute\Colle \Magento\Eav\Model\Config $eavConfig, \Magento\Eav\Model\EntityFactory $eavEntityFactory, \Magento\Framework\DB\Adapter\AdapterInterface $connection = null, - \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null + \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null ) { $this->_eavEntityFactory = $eavEntityFactory; parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $eavConfig, $connection, $resource); diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Product/Collection.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Collection.php index 924355cafcbb637c5189b2ad120335f5d86f99a6..0393bf02276257507ebd9f392ef6b499a7866bee 100644 --- a/app/code/Magento/Catalog/Model/ResourceModel/Product/Collection.php +++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Collection.php @@ -525,7 +525,7 @@ class Collection extends \Magento\Catalog\Model\ResourceModel\Collection\Abstrac */ public function setEntity($entity) { - if ($this->isEnabledFlat() && $entity instanceof \Magento\Framework\Model\ModelResource\Db\AbstractDb) { + if ($this->isEnabledFlat() && $entity instanceof \Magento\Framework\Model\ResourceModel\Db\AbstractDb) { $this->_entity = $entity; return $this; } diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Product/Compare/Item.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Compare/Item.php index 13af3192a26d9cb5cef934b14dd707060ef83b58..19aa5b02dd0874c3af7c8513b583aaab9448bee6 100644 --- a/app/code/Magento/Catalog/Model/ResourceModel/Product/Compare/Item.php +++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Compare/Item.php @@ -10,7 +10,7 @@ namespace Magento\Catalog\Model\ResourceModel\Product\Compare; * * @author Magento Core Team <core@magentocommerce.com> */ -class Item extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Item extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Initialize connection diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Product/Flat.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Flat.php index d4ef3ae5723c9563991b0f514e0e67b3ab836117..2a9f146e405a92b5c21bf20b2145cd064c5c427f 100644 --- a/app/code/Magento/Catalog/Model/ResourceModel/Product/Flat.php +++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Flat.php @@ -13,7 +13,7 @@ use Magento\Eav\Model\ResourceModel\Attribute\DefaultEntityAttributes\ProviderIn * * @author Magento Core Team <core@magentocommerce.com> */ -class Flat extends \Magento\Framework\Model\ModelResource\Db\AbstractDb implements DefaultAttributesProvider +class Flat extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb implements DefaultAttributesProvider { /** * Store scope Id @@ -42,14 +42,14 @@ class Flat extends \Magento\Framework\Model\ModelResource\Db\AbstractDb implemen protected $defaultAttributes; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param \Magento\Catalog\Model\Config $catalogConfig * @param \Magento\Catalog\Model\Product\Attribute\DefaultAttributes $defaultAttributes * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Catalog\Model\Config $catalogConfig, \Magento\Catalog\Model\Product\Attribute\DefaultAttributes $defaultAttributes, diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/AbstractIndexer.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/AbstractIndexer.php index ea9e44872e92f3451257f2c09315e027a354c9cf..0ed453173dcb49bfff29586193575d752c1514a2 100644 --- a/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/AbstractIndexer.php +++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/AbstractIndexer.php @@ -22,13 +22,13 @@ abstract class AbstractIndexer extends \Magento\Indexer\Model\ResourceModel\Abst /** * Class constructor * - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Framework\Indexer\Table\StrategyInterface $tableStrategy * @param \Magento\Eav\Model\Config $eavConfig * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Framework\Indexer\Table\StrategyInterface $tableStrategy, \Magento\Eav\Model\Config $eavConfig, $connectionName = null diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Eav/AbstractEav.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Eav/AbstractEav.php index 533653c823aa47fe832c43a206065382b08fbd8f..b07d355f418f09de5b7e5e356f0756af5d4ed3c1 100644 --- a/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Eav/AbstractEav.php +++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Eav/AbstractEav.php @@ -22,14 +22,14 @@ abstract class AbstractEav extends \Magento\Catalog\Model\ResourceModel\Product\ /** * Construct * - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Framework\Indexer\Table\StrategyInterface $tableStrategy * @param \Magento\Eav\Model\Config $eavConfig * @param \Magento\Framework\Event\ManagerInterface $eventManager * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Framework\Indexer\Table\StrategyInterface $tableStrategy, \Magento\Eav\Model\Config $eavConfig, \Magento\Framework\Event\ManagerInterface $eventManager, diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Eav/Source.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Eav/Source.php index 5db3e871c6d41e50ff518277ccb26ac8907186ac..dac3ab33b2524002f58d0cd7095371ec97050c50 100644 --- a/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Eav/Source.php +++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Eav/Source.php @@ -24,7 +24,7 @@ class Source extends AbstractEav /** * Construct * - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Framework\Indexer\Table\StrategyInterface $tableStrategy * @param \Magento\Eav\Model\Config $eavConfig * @param \Magento\Framework\Event\ManagerInterface $eventManager @@ -32,7 +32,7 @@ class Source extends AbstractEav * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Framework\Indexer\Table\StrategyInterface $tableStrategy, \Magento\Eav\Model\Config $eavConfig, \Magento\Framework\Event\ManagerInterface $eventManager, diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Price/DefaultPrice.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Price/DefaultPrice.php index e9f9a0a5b9eed29677eb3589e22679087856faab..0df889441d2624095043ca2bab26fd00e1b3feb4 100644 --- a/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Price/DefaultPrice.php +++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Price/DefaultPrice.php @@ -46,7 +46,7 @@ class DefaultPrice extends AbstractIndexer implements PriceInterface /** * Class constructor * - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Framework\Indexer\Table\StrategyInterface $tableStrategy * @param \Magento\Eav\Model\Config $eavConfig * @param \Magento\Framework\Event\ManagerInterface $eventManager @@ -54,7 +54,7 @@ class DefaultPrice extends AbstractIndexer implements PriceInterface * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Framework\Indexer\Table\StrategyInterface $tableStrategy, \Magento\Eav\Model\Config $eavConfig, \Magento\Framework\Event\ManagerInterface $eventManager, diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Product/Link.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Link.php index 477f98bd67c8c6c84501fb56781b138e7132f05b..de3811c120676cc7633e65204f56ff9b644fa02c 100644 --- a/app/code/Magento/Catalog/Model/ResourceModel/Product/Link.php +++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Link.php @@ -10,7 +10,7 @@ namespace Magento\Catalog\Model\ResourceModel\Product; * * @author Magento Core Team <core@magentocommerce.com> */ -class Link extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Link extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Product Link Attributes Table @@ -27,12 +27,12 @@ class Link extends \Magento\Framework\Model\ModelResource\Db\AbstractDb protected $_catalogProductRelation; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param Relation $catalogProductRelation * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, Relation $catalogProductRelation, $connectionName = null ) { diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Product/Link/Collection.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Link/Collection.php index 831b96b2ce3c3ffeefecd6371c62a7cc42cf26b4..011a3cda6ad740caf6326cdaa46afd22a007ce52 100644 --- a/app/code/Magento/Catalog/Model/ResourceModel/Product/Link/Collection.php +++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Link/Collection.php @@ -10,7 +10,7 @@ namespace Magento\Catalog\Model\ResourceModel\Product\Link; * * @author Magento Core Team <core@magentocommerce.com> */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Product object diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Product/Option.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Option.php index 0656139b1fc17523f696ce023935247c5f11c969..cf7445dabfec7f3016580fcd61f3a90b266beb24 100644 --- a/app/code/Magento/Catalog/Model/ResourceModel/Product/Option.php +++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Option.php @@ -10,7 +10,7 @@ namespace Magento\Catalog\Model\ResourceModel\Product; * * @author Magento Core Team <core@magentocommerce.com> */ -class Option extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Option extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Store manager @@ -36,14 +36,14 @@ class Option extends \Magento\Framework\Model\ModelResource\Db\AbstractDb /** * Class constructor * - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Directory\Model\CurrencyFactory $currencyFactory * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param \Magento\Framework\App\Config\ScopeConfigInterface $config * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Directory\Model\CurrencyFactory $currencyFactory, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Framework\App\Config\ScopeConfigInterface $config, @@ -69,7 +69,7 @@ class Option extends \Magento\Framework\Model\ModelResource\Db\AbstractDb * Save options store data * * @param \Magento\Framework\Model\AbstractModel $object - * @return \Magento\Framework\Model\ModelResource\Db\AbstractDb + * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb */ protected function _afterSave(\Magento\Framework\Model\AbstractModel $object) { diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Product/Option/Collection.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Option/Collection.php index 8b03136e4a14c64a71789753a6119a27b92a455c..ba2e7b2128d47b33ca0bdc85c813eabf1a6a99c0 100644 --- a/app/code/Magento/Catalog/Model/ResourceModel/Product/Option/Collection.php +++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Option/Collection.php @@ -10,7 +10,7 @@ namespace Magento\Catalog\Model\ResourceModel\Product\Option; * * @SuppressWarnings(PHPMD.LongVariable) */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Store manager @@ -34,7 +34,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab * @param \Magento\Catalog\Model\ResourceModel\Product\Option\Value\CollectionFactory $optionValueCollectionFactory * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection - * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource + * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource */ public function __construct( \Magento\Framework\Data\Collection\EntityFactory $entityFactory, @@ -44,7 +44,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab \Magento\Catalog\Model\ResourceModel\Product\Option\Value\CollectionFactory $optionValueCollectionFactory, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Framework\DB\Adapter\AdapterInterface $connection = null, - \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null + \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null ) { $this->_optionValueCollectionFactory = $optionValueCollectionFactory; $this->_storeManager = $storeManager; diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Product/Option/Value.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Option/Value.php index 791b83f081c95d48bb01e7c68306b9d44fb4060d..87ad710edc90f71eb85e9a4eeddf8e7b959566a4 100644 --- a/app/code/Magento/Catalog/Model/ResourceModel/Product/Option/Value.php +++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Option/Value.php @@ -10,7 +10,7 @@ namespace Magento\Catalog\Model\ResourceModel\Product\Option; * * @author Magento Core Team <core@magentocommerce.com> */ -class Value extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Value extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Store manager @@ -36,14 +36,14 @@ class Value extends \Magento\Framework\Model\ModelResource\Db\AbstractDb /** * Class constructor * - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Directory\Model\CurrencyFactory $currencyFactory * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param \Magento\Framework\App\Config\ScopeConfigInterface $config * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Directory\Model\CurrencyFactory $currencyFactory, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Framework\App\Config\ScopeConfigInterface $config, @@ -70,7 +70,7 @@ class Value extends \Magento\Framework\Model\ModelResource\Db\AbstractDb * Save options store data * * @param \Magento\Framework\Model\AbstractModel $object - * @return \Magento\Framework\Model\ModelResource\Db\AbstractDb + * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb */ protected function _afterSave(\Magento\Framework\Model\AbstractModel $object) { diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Product/Option/Value/Collection.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Option/Value/Collection.php index fa018d34952510866eb4a2a8c2bda5e113184aaa..c18eb0f0b58d3c2ce5a001793ffbe54088321322 100644 --- a/app/code/Magento/Catalog/Model/ResourceModel/Product/Option/Value/Collection.php +++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Option/Value/Collection.php @@ -10,7 +10,7 @@ namespace Magento\Catalog\Model\ResourceModel\Product\Option\Value; * * @author Magento Core Team <core@magentocommerce.com> */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Resource initialization diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Product/Relation.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Relation.php index a53b14ff6492429c734009d6b1ec2ca6970277bd..846a904a117b5378e92ffb417d37a77f2d8f2ca8 100644 --- a/app/code/Magento/Catalog/Model/ResourceModel/Product/Relation.php +++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Relation.php @@ -10,7 +10,7 @@ namespace Magento\Catalog\Model\ResourceModel\Product; * * @author Magento Core Team <core@magentocommerce.com> */ -class Relation extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Relation extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Initialize resource model and define main table diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Product/Website.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Website.php index 7cd4350c80b0d41af325549c78003e4e71c9ca49..9e55411448157ccd008a3437b8b401548d29f03e 100644 --- a/app/code/Magento/Catalog/Model/ResourceModel/Product/Website.php +++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Website.php @@ -8,7 +8,7 @@ namespace Magento\Catalog\Model\ResourceModel\Product; /** * Catalog Product Website Resource Model */ -class Website extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Website extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Store manager @@ -18,12 +18,12 @@ class Website extends \Magento\Framework\Model\ModelResource\Db\AbstractDb protected $_storeManager; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Store\Model\StoreManagerInterface $storeManager, $connectionName = null ) { diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Url.php b/app/code/Magento/Catalog/Model/ResourceModel/Url.php index 4748966e31b53929826f47c43634749edf083807..157edc0b176c0a9fd3d8bf233cda4d10b4aaa903 100644 --- a/app/code/Magento/Catalog/Model/ResourceModel/Url.php +++ b/app/code/Magento/Catalog/Model/ResourceModel/Url.php @@ -12,7 +12,7 @@ namespace Magento\Catalog\Model\ResourceModel; */ use Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator; -class Url extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Url extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Stores configuration array @@ -88,7 +88,7 @@ class Url extends \Magento\Framework\Model\ModelResource\Db\AbstractDb protected $productResource; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param \Magento\Eav\Model\Config $eavConfig * @param Product $productResource @@ -97,7 +97,7 @@ class Url extends \Magento\Framework\Model\ModelResource\Db\AbstractDb * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Eav\Model\Config $eavConfig, Product $productResource, diff --git a/app/code/Magento/Catalog/Model/System/Config/Backend/Catalog/Url/Rewrite/Suffix.php b/app/code/Magento/Catalog/Model/System/Config/Backend/Catalog/Url/Rewrite/Suffix.php index 42ddbde393fd807bd600672cc6cf0f119b9dc079..de1649851c6699987abb434a987843748b1f3e7d 100644 --- a/app/code/Magento/Catalog/Model/System/Config/Backend/Catalog/Url/Rewrite/Suffix.php +++ b/app/code/Magento/Catalog/Model/System/Config/Backend/Catalog/Url/Rewrite/Suffix.php @@ -39,7 +39,7 @@ class Suffix extends \Magento\Framework\App\Config\Value * @param \Magento\Framework\Model\Context $context * @param \Magento\Framework\Registry $registry * @param \Magento\Framework\App\Config\ScopeConfigInterface $config - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param \Magento\UrlRewrite\Helper\UrlRewrite $urlRewriteHelper * @param \Magento\Store\Model\StoreManagerInterface $storeManager @@ -56,7 +56,7 @@ class Suffix extends \Magento\Framework\App\Config\Value \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Framework\App\ResourceConnection $appResource, \Magento\UrlRewrite\Model\UrlFinderInterface $urlFinder, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Catalog/Setup/UpgradeData.php b/app/code/Magento/Catalog/Setup/UpgradeData.php index 5adf385101fc2e67d571c6a3421c46940c685ff8..c59635383719f1e21810929af146899695d32f39 100644 --- a/app/code/Magento/Catalog/Setup/UpgradeData.php +++ b/app/code/Magento/Catalog/Setup/UpgradeData.php @@ -35,6 +35,7 @@ class UpgradeData implements UpgradeDataInterface /** * {@inheritdoc} + * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function upgrade(ModuleDataSetupInterface $setup, ModuleContextInterface $context) { @@ -46,21 +47,31 @@ class UpgradeData implements UpgradeDataInterface $entityTypeId = $categorySetup->getEntityTypeId(\Magento\Catalog\Model\Product::ENTITY); $attributeSetId = $categorySetup->getDefaultAttributeSetId($entityTypeId); - $attributeGroupId = $categorySetup->getAttributeGroupId($entityTypeId, $attributeSetId, 'Images'); - - // update General Group - $categorySetup->updateAttributeGroup( + $attributeGroup = $categorySetup->getAttributeGroup( $entityTypeId, $attributeSetId, - $attributeGroupId, - 'attribute_group_name', - 'Images and Videos' + 'Images', + 'attribute_group_name' ); + if (isset($attributeGroup['attribute_group_name']) && $attributeGroup['attribute_group_name'] == 'Images') { + // update General Group + $categorySetup->updateAttributeGroup( + $entityTypeId, + $attributeSetId, + $attributeGroup['attribute_group_id'], + 'attribute_group_name', + 'Images and Videos' + ); + } + } + + if ($context->getVersion() + && version_compare($context->getVersion(), '2.0.1') < 0 + ) { $select = $setup->getConnection()->select() ->from( $setup->getTable('catalog_product_entity_group_price'), [ - 'value_id', 'entity_id', 'all_groups', 'customer_group_id', @@ -69,11 +80,10 @@ class UpgradeData implements UpgradeDataInterface 'website_id' ] ); - $setup->getConnection()->insertFromSelect( + $select = $setup->getConnection()->insertFromSelect( $select, - $setup->getTable('catalog_product_entity_group_price'), + $setup->getTable('catalog_product_entity_tier_price'), [ - 'value_id', 'entity_id', 'all_groups', 'customer_group_id', @@ -82,9 +92,53 @@ class UpgradeData implements UpgradeDataInterface 'website_id' ] ); + $setup->getConnection()->query($select); + $categorySetupManager = $this->categorySetupFactory->create(); $categorySetupManager->removeAttribute(\Magento\Catalog\Model\Product::ENTITY, 'group_price'); } + + if (version_compare($context->getVersion(), '2.0.2') < 0) { + // set new resource model paths + /** @var \Magento\Catalog\Setup\CategorySetup $categorySetup */ + $categorySetup = $this->categorySetupFactory->create(['setup' => $setup]); + $categorySetup->updateEntityType( + \Magento\Catalog\Model\Category::ENTITY, + 'entity_model', + 'Magento\Catalog\Model\ResourceModel\Category' + ); + $categorySetup->updateEntityType( + \Magento\Catalog\Model\Category::ENTITY, + 'attribute_model', + 'Magento\Catalog\Model\ResourceModel\Eav\Attribute' + ); + $categorySetup->updateEntityType( + \Magento\Catalog\Model\Category::ENTITY, + 'entity_attribute_collection', + 'Magento\Catalog\Model\ResourceModel\Category\Attribute\Collection' + ); + $categorySetup->updateAttribute( + \Magento\Catalog\Model\Category::ENTITY, + 'custom_design_from', + 'attribute_model', + 'Magento\Catalog\Model\ResourceModel\Eav\Attribute' + ); + $categorySetup->updateEntityType( + \Magento\Catalog\Model\Product::ENTITY, + 'entity_model', + 'Magento\Catalog\Model\ResourceModel\Product' + ); + $categorySetup->updateEntityType( + \Magento\Catalog\Model\Product::ENTITY, + 'attribute_model', + 'Magento\Catalog\Model\ResourceModel\Eav\Attribute' + ); + $categorySetup->updateEntityType( + \Magento\Catalog\Model\Product::ENTITY, + 'entity_attribute_collection', + 'Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection' + ); + } $setup->endSetup(); } } diff --git a/app/code/Magento/Catalog/Setup/UpgradeSchema.php b/app/code/Magento/Catalog/Setup/UpgradeSchema.php index 717f06a0cd58e7f701fd3ec35a829b481740a972..cf92de0f7e6bbe02a2e3b6c292abbcdaf5509cee 100644 --- a/app/code/Magento/Catalog/Setup/UpgradeSchema.php +++ b/app/code/Magento/Catalog/Setup/UpgradeSchema.php @@ -140,6 +140,10 @@ class UpgradeSchema implements UpgradeSchemaInterface */ private function addSupportVideoMediaAttributes(SchemaSetupInterface $setup) { + if ($setup->tableExists(Media::GALLERY_VALUE_TO_ENTITY_TABLE)) { + return; + }; + /** Add support video media attribute */ $this->createValueToEntityTable($setup); /** diff --git a/app/code/Magento/Catalog/Test/Unit/Block/Adminhtml/Category/AbstractCategoryTest.php b/app/code/Magento/Catalog/Test/Unit/Block/Adminhtml/Category/AbstractCategoryTest.php index 51ffc7e98d1be02fdcd1967fb027b3b79fe0010f..ee71282c4078261577e5f6ca0ba8502a0574b4bb 100644 --- a/app/code/Magento/Catalog/Test/Unit/Block/Adminhtml/Category/AbstractCategoryTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Block/Adminhtml/Category/AbstractCategoryTest.php @@ -119,4 +119,19 @@ class AbstractCategoryTest extends \PHPUnit_Framework_TestCase $this->assertEquals($saveUrl, $this->category->getSaveUrl()); } + public function testGetRootIdsFromCache() + { + $this->category->setData('root_ids', ['ids']); + $this->storeManagerMock->expects($this->never())->method('getGroups'); + + $this->assertEquals(['ids'], $this->category->getRootIds()); + } + + public function testGetRootIds() + { + $this->storeManagerMock->expects($this->once())->method('getGroups')->willReturn([$this->storeMock]); + $this->storeMock->expects($this->once())->method('getRootCategoryId')->willReturn('storeId'); + + $this->assertEquals([\Magento\Catalog\Model\Category::TREE_ROOT_ID, 'storeId'], $this->category->getRootIds()); + } } diff --git a/app/code/Magento/Catalog/Test/Unit/Block/Product/View/GalleryTest.php b/app/code/Magento/Catalog/Test/Unit/Block/Product/View/GalleryTest.php index 564e08a1cbc61d2b5cff9afbcfdc097de8457b0b..eec42410e2e81cdada1331e9827bcd966b78a4ed 100644 --- a/app/code/Magento/Catalog/Test/Unit/Block/Product/View/GalleryTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Block/Product/View/GalleryTest.php @@ -32,6 +32,11 @@ class GalleryTest extends \PHPUnit_Framework_TestCase */ protected $registry; + /** + * @var \Magento\Framework\Json\EncoderInterface|\PHPUnit_Framework_MockObject_MockObject + */ + protected $jsonEncoderMock; + protected function setUp() { $this->mockContext(); @@ -40,9 +45,14 @@ class GalleryTest extends \PHPUnit_Framework_TestCase ->disableOriginalConstructor() ->getMock(); + $this->jsonEncoderMock = $this->getMockBuilder('Magento\Framework\Json\EncoderInterface') + ->disableOriginalConstructor() + ->getMock(); + $this->model = new \Magento\Catalog\Block\Product\View\Gallery( $this->context, - $this->arrayUtils + $this->arrayUtils, + $this->jsonEncoderMock ); } @@ -103,7 +113,8 @@ class GalleryTest extends \PHPUnit_Framework_TestCase [$productMock, 'product_page_image_small', [], $this->imageHelper], [$productMock, 'product_page_image_medium', [], $this->imageHelper], [$productMock, 'product_page_image_large', [], $this->imageHelper], - ]); + ]) + ->willReturnSelf(); $this->imageHelper->expects($this->exactly(3)) ->method('setImageFile') ->with('test_file') @@ -118,6 +129,19 @@ class GalleryTest extends \PHPUnit_Framework_TestCase ->method('getUrl') ->willReturn('product_page_image_large_url'); + $this->imageHelper->expects($this->exactly(2)) + ->method('constrainOnly') + ->with(true) + ->willReturnSelf(); + $this->imageHelper->expects($this->exactly(2)) + ->method('keepAspectRatio') + ->with(true) + ->willReturnSelf(); + $this->imageHelper->expects($this->exactly(2)) + ->method('keepFrame') + ->with(false) + ->willReturnSelf(); + $images = $this->model->getGalleryImages(); $this->assertInstanceOf('Magento\Framework\Data\Collection', $images); } diff --git a/app/code/Magento/Catalog/Test/Unit/Model/CategoryTest.php b/app/code/Magento/Catalog/Test/Unit/Model/CategoryTest.php index fd1e11788335d15e4a152d5a5a2ab1cae1a865ce..3b24090d3ecf394401f6fca1d83af8171298a047 100644 --- a/app/code/Magento/Catalog/Test/Unit/Model/CategoryTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Model/CategoryTest.php @@ -73,7 +73,7 @@ class CategoryTest extends \PHPUnit_Framework_TestCase /** @var \Magento\UrlRewrite\Model\UrlFinderInterface|\PHPUnit_Framework_MockObject_MockObject */ protected $urlFinder; - /** @var \Magento\Framework\Model\ModelResource\AbstractResource|\PHPUnit_Framework_MockObject_MockObject */ + /** @var \Magento\Framework\Model\ResourceModel\AbstractResource|\PHPUnit_Framework_MockObject_MockObject */ protected $resource; /** @var \Magento\Framework\Indexer\IndexerRegistry|\PHPUnit_Framework_MockObject_MockObject */ diff --git a/app/code/Magento/Catalog/Test/Unit/Model/CustomOptions/CustomOptionTest.php b/app/code/Magento/Catalog/Test/Unit/Model/CustomOptions/CustomOptionTest.php index e5242c583834589217ecec62e9c71c4adef4cf9d..511edd774b4a213643d0d6c4396a17a55f26ca2c 100644 --- a/app/code/Magento/Catalog/Test/Unit/Model/CustomOptions/CustomOptionTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Model/CustomOptions/CustomOptionTest.php @@ -42,7 +42,7 @@ class CustomOptionTest extends \PHPUnit_Framework_TestCase ->disableOriginalConstructor() ->getMock(); - $resource = $this->getMockBuilder('Magento\Framework\Model\ModelResource\AbstractResource') + $resource = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\AbstractResource') ->disableOriginalConstructor() ->getMock(); diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Entity/AttributeTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Entity/AttributeTest.php index 56dddc969e17037a5d92e8946574800ff3d51a72..a396bcca4c0dbb7a7f7e1311b2c84ab4eb206e7d 100644 --- a/app/code/Magento/Catalog/Test/Unit/Model/Entity/AttributeTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Model/Entity/AttributeTest.php @@ -87,7 +87,7 @@ class AttributeTest extends \PHPUnit_Framework_TestCase protected $lockValidatorMock; /** - * @var \Magento\Framework\Model\ModelResource\AbstractResource|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Model\ResourceModel\AbstractResource|\PHPUnit_Framework_MockObject_MockObject */ private $resourceMock; @@ -179,7 +179,7 @@ class AttributeTest extends \PHPUnit_Framework_TestCase ->getMock(); $this->dateTimeFormatter = $this->getMock('Magento\Framework\Stdlib\DateTime\DateTimeFormatterInterface'); - $this->resourceMock = $this->getMockBuilder('Magento\Framework\Model\ModelResource\AbstractResource') + $this->resourceMock = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\AbstractResource') ->setMethods(['_construct', 'getConnection', 'getIdFieldName', 'saveInSetIncluding']) ->getMockForAbstractClass(); $this->cacheManager = $this->getMockBuilder('Magento\Framework\App\CacheInterface') diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Product/ActionTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Product/ActionTest.php index 41660300983e08ceb00018e94a457956596893df..18cd7be396c53304b2d700d3a545cbf724eede46 100644 --- a/app/code/Magento/Catalog/Test/Unit/Model/Product/ActionTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Model/Product/ActionTest.php @@ -58,7 +58,7 @@ class ActionTest extends \PHPUnit_Framework_TestCase false ); $this->resource = $this->getMock( - '\Magento\Framework\Model\ModelResource\AbstractResource', + '\Magento\Framework\Model\ResourceModel\AbstractResource', [ 'updateAttributes', 'getConnection', diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Product/Attribute/Backend/MediaTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Product/Attribute/Backend/MediaTest.php index 53accd9dde64895a04f7b6ca5373ec219e41bbcf..e3dc8a4d6e6bee8d97ae81402c0d0038424a4cd3 100644 --- a/app/code/Magento/Catalog/Test/Unit/Model/Product/Attribute/Backend/MediaTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Model/Product/Attribute/Backend/MediaTest.php @@ -146,7 +146,7 @@ class MediaTest extends \PHPUnit_Framework_TestCase false ); $attributeEntity = $this->getMock( - '\Magento\Framework\Model\ModelResource\AbstractResourceAbstractEntity', + '\Magento\Framework\Model\ResourceModel\AbstractResourceAbstractEntity', ['checkAttributeUniqueValue'] ); $attribute->expects($this->any())->method('getAttributeCode')->will($this->returnValue($attributeCode)); diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Product/LinkTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Product/LinkTest.php index 2a94798288dc7108213d2c4aed7cf14e7900a77f..eb86d59a886e566fc0f2d5314ebfa066c81304ad 100644 --- a/app/code/Magento/Catalog/Test/Unit/Model/Product/LinkTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Model/Product/LinkTest.php @@ -15,7 +15,7 @@ class LinkTest extends \PHPUnit_Framework_TestCase protected $model; /** - * @var \Magento\Framework\Model\ModelResource\AbstractResource|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Model\ResourceModel\AbstractResource|\PHPUnit_Framework_MockObject_MockObject */ protected $resource; @@ -61,7 +61,7 @@ class LinkTest extends \PHPUnit_Framework_TestCase ->will($this->returnValue($this->productCollection)); $this->resource = $this->getMock( - 'Magento\Framework\Model\ModelResource\AbstractResource', + 'Magento\Framework\Model\ResourceModel\AbstractResource', [ 'saveProductLinks', 'getAttributeTypeTable', diff --git a/app/code/Magento/Catalog/Test/Unit/Model/ProductTest.php b/app/code/Magento/Catalog/Test/Unit/Model/ProductTest.php index b96b178db6cd4f9916b11eddd27f715c32864973..c52c96470fd632390d55fa6f6f4f142c6e5e0f5d 100644 --- a/app/code/Magento/Catalog/Test/Unit/Model/ProductTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Model/ProductTest.php @@ -444,7 +444,7 @@ class ProductTest extends \PHPUnit_Framework_TestCase false ); - $abstractDbMock = $this->getMockBuilder('\Magento\Framework\Model\ModelResource\Db\AbstractDb') + $abstractDbMock = $this->getMockBuilder('\Magento\Framework\Model\ResourceModel\Db\AbstractDb') ->disableOriginalConstructor() ->setMethods([ 'getCategoryCollection', diff --git a/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Eav/AttributeTest.php b/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Eav/AttributeTest.php index c82859e578e1e946637abbf7067434c88f6312b6..ab8d0328ca6091522c1180ee7f3533936962a3ad 100644 --- a/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Eav/AttributeTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Eav/AttributeTest.php @@ -88,7 +88,7 @@ class AttributeTest extends \PHPUnit_Framework_TestCase $dbAdapterMock->expects($this->any())->method('getTransactionLevel')->will($this->returnValue(1)); $this->resourceMock = $this->getMock( - 'Magento\Framework\Model\ModelResource\AbstractResource', + 'Magento\Framework\Model\ResourceModel\AbstractResource', ['_construct', 'getConnection', 'getIdFieldName', 'save', 'saveInSetIncluding', 'isUsedBySuperProducts', 'delete'], [], '', false diff --git a/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Product/FlatTest.php b/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Product/FlatTest.php index 711939f0bf69af540471ad9bd7d2a3756119bd96..4b7ee54ac6bf4dcc77cf80d7dbe15a6c20b74c26 100644 --- a/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Product/FlatTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Product/FlatTest.php @@ -45,7 +45,7 @@ class FlatTest extends \PHPUnit_Framework_TestCase ); $this->_model = new \Magento\Catalog\Model\ResourceModel\Product\Flat( - $this->getMock('Magento\Framework\Model\ModelResource\Db\Context', [], [], '', false), + $this->getMock('Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false), $this->_storeManagerInterface, $this->getMock('Magento\Catalog\Model\Config', [], [], '', false), $this->getMock('Magento\Catalog\Model\Product\Attribute\DefaultAttributes') diff --git a/app/code/Magento/Catalog/Ui/Component/ColumnFactory.php b/app/code/Magento/Catalog/Ui/Component/ColumnFactory.php index 85eaaf679f02ff8a06f0d1200cc79ea572ad7ed6..58de2b262c8ab7489b6f37691e592484dd7d624b 100644 --- a/app/code/Magento/Catalog/Ui/Component/ColumnFactory.php +++ b/app/code/Magento/Catalog/Ui/Component/ColumnFactory.php @@ -53,7 +53,6 @@ class ColumnFactory $config = array_merge([ 'label' => __($attribute->getDefaultFrontendLabel()), 'dataType' => $this->getDataType($attribute), - 'align' => 'left', 'add_field' => true, 'visible' => $attribute->getIsVisibleInGrid(), ], $config); @@ -61,15 +60,16 @@ class ColumnFactory if ($attribute->usesSource()) { $config['options'] = $attribute->getSource()->getAllOptions(); } + + $config['component'] = $this->getJsComponent($config['dataType']); + $arguments = [ 'data' => [ - 'js_config' => [ - 'component' => $this->getJsComponent($config['dataType']), - ], 'config' => $config, ], 'context' => $context, ]; + return $this->componentFactory->create($columnName, 'column', $arguments); } diff --git a/app/code/Magento/Catalog/Ui/Component/Listing/Columns.php b/app/code/Magento/Catalog/Ui/Component/Listing/Columns.php index 2e0243e5875aaba35f44914ba5eebc908d7d1470..04e58709d402f67aa6a6a1fc96d2bfe143cd1438 100644 --- a/app/code/Magento/Catalog/Ui/Component/Listing/Columns.php +++ b/app/code/Magento/Catalog/Ui/Component/Listing/Columns.php @@ -15,6 +15,17 @@ class Columns extends \Magento\Ui\Component\Listing\Columns /** @var \Magento\Catalog\Ui\Component\Listing\Attribute\RepositoryInterface */ protected $attributeRepository; + /** + * @var array + */ + protected $filterMap = [ + 'default' => 'text', + 'select' => 'select', + 'boolean' => 'select', + 'multiselect' => 'select', + 'date' => 'dateRange', + ]; + /** * @param \Magento\Framework\View\Element\UiComponent\ContextInterface $context * @param \Magento\Catalog\Ui\Component\ColumnFactory $columnFactory @@ -41,8 +52,12 @@ class Columns extends \Magento\Ui\Component\Listing\Columns { $columnSortOrder = self::DEFAULT_COLUMNS_MAX_ORDER; foreach ($this->attributeRepository->getList() as $attribute) { + $config = []; if (!isset($this->components[$attribute->getAttributeCode()])) { $config['sortOrder'] = ++$columnSortOrder; + if ($attribute->getIsFilterableInGrid()) { + $config['filter'] = $this->getFilterType($attribute->getFrontendInput()); + } $column = $this->columnFactory->create($attribute, $this->getContext(), $config); $column->prepare(); $this->addComponent($attribute->getAttributeCode(), $column); @@ -50,4 +65,15 @@ class Columns extends \Magento\Ui\Component\Listing\Columns } parent::prepare(); } + + /** + * Retrieve filter type by $frontendInput + * + * @param string $frontendInput + * @return string + */ + protected function getFilterType($frontendInput) + { + return isset($this->filterMap[$frontendInput]) ? $this->filterMap[$frontendInput] : $this->filterMap['default']; + } } diff --git a/app/code/Magento/Catalog/Ui/Component/Listing/Columns/Price.php b/app/code/Magento/Catalog/Ui/Component/Listing/Columns/Price.php index ec0547e6f1b9e3377f0443016f95ea6a0823409c..2c4af877568c3d9d33dfb033d034c254e03b376f 100644 --- a/app/code/Magento/Catalog/Ui/Component/Listing/Columns/Price.php +++ b/app/code/Magento/Catalog/Ui/Component/Listing/Columns/Price.php @@ -13,7 +13,7 @@ class Price extends \Magento\Ui\Component\Listing\Columns\Column /** * Column name */ - const NAME = 'price'; + const NAME = 'column.price'; /** * @var \Magento\Framework\Locale\CurrencyInterface diff --git a/app/code/Magento/Catalog/Ui/Component/Listing/Filters.php b/app/code/Magento/Catalog/Ui/Component/Listing/Filters.php deleted file mode 100644 index ba70b679b5e4e4e44781ad1a8363b07e7ce05ad6..0000000000000000000000000000000000000000 --- a/app/code/Magento/Catalog/Ui/Component/Listing/Filters.php +++ /dev/null @@ -1,48 +0,0 @@ -<?php -/** - * Copyright © 2015 Magento. All rights reserved. - * See COPYING.txt for license details. - */ -namespace Magento\Catalog\Ui\Component\Listing; - -class Filters extends \Magento\Ui\Component\Filters -{ - /** - * @var \Magento\Catalog\Ui\Component\Listing\Attribute\RepositoryInterface - */ - protected $attributeRepository; - - /** - * @param \Magento\Framework\View\Element\UiComponent\ContextInterface $context - * @param \Magento\Catalog\Ui\Component\FilterFactory $filterFactory - * @param \Magento\Catalog\Ui\Component\Listing\Attribute\RepositoryInterface $attributeRepository - * @param array $components - * @param array $data - */ - public function __construct( - \Magento\Framework\View\Element\UiComponent\ContextInterface $context, - \Magento\Catalog\Ui\Component\FilterFactory $filterFactory, - \Magento\Catalog\Ui\Component\Listing\Attribute\RepositoryInterface $attributeRepository, - array $components = [], - array $data = [] - ) { - parent::__construct($context, $components, $data); - $this->filterFactory = $filterFactory; - $this->attributeRepository = $attributeRepository; - } - - /** - * {@inheritdoc} - */ - public function prepare() - { - foreach ($this->attributeRepository->getList() as $attribute) { - if (!isset($this->components[$attribute->getAttributeCode()]) && $attribute->getIsFilterableInGrid()) { - $filter = $this->filterFactory->create($attribute, $this->getContext()); - $filter->prepare(); - $this->addComponent($attribute->getAttributeCode(), $filter); - } - } - parent::prepare(); - } -} diff --git a/app/code/Magento/Catalog/etc/adminhtml/events.xml b/app/code/Magento/Catalog/etc/adminhtml/events.xml index 96670e412d9f50bb19760d13da29013687f0d6ad..bb23bd31ac398069a23da1b658606a92325a98d2 100644 --- a/app/code/Magento/Catalog/etc/adminhtml/events.xml +++ b/app/code/Magento/Catalog/etc/adminhtml/events.xml @@ -7,6 +7,6 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="cms_wysiwyg_images_static_urls_allowed"> - <observer name="catalog_wysiwyg" instance="Magento\Catalog\Observer\CatalogCheckIsUsingStaticUrlsAllowedObserver" method="execute" /> + <observer name="catalog_wysiwyg" instance="Magento\Catalog\Observer\CatalogCheckIsUsingStaticUrlsAllowedObserver" /> </event> </config> diff --git a/app/code/Magento/Catalog/etc/frontend/events.xml b/app/code/Magento/Catalog/etc/frontend/events.xml index 1cd4531d5adf995face225583b5f0c3258187454..a4ed910c845d21a86a7ae60117b78b2bfe4bd91e 100644 --- a/app/code/Magento/Catalog/etc/frontend/events.xml +++ b/app/code/Magento/Catalog/etc/frontend/events.xml @@ -7,12 +7,12 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="customer_login"> - <observer name="catalog" instance="Magento\Catalog\Observer\Compare\BindCustomerLoginObserver" method="execute" shared="false" /> + <observer name="catalog" instance="Magento\Catalog\Observer\Compare\BindCustomerLoginObserver" shared="false" /> </event> <event name="customer_logout"> - <observer name="catalog" instance="Magento\Catalog\Observer\Compare\BindCustomerLogoutObserver" method="execute" shared="false" /> + <observer name="catalog" instance="Magento\Catalog\Observer\Compare\BindCustomerLogoutObserver" shared="false" /> </event> <event name="page_block_html_topmenu_gethtml_before"> - <observer name="catalog_add_topmenu_items" instance="Magento\Catalog\Observer\AddCatalogToTopmenuItemsObserver" method="execute" /> + <observer name="catalog_add_topmenu_items" instance="Magento\Catalog\Observer\AddCatalogToTopmenuItemsObserver" /> </event> </config> diff --git a/app/code/Magento/Catalog/etc/module.xml b/app/code/Magento/Catalog/etc/module.xml index dd1aeca305761fc7a8a5e657ed18a9d15abace24..ee04bbc7431f4d853a6bcd6b81a5c129f19c3794 100644 --- a/app/code/Magento/Catalog/etc/module.xml +++ b/app/code/Magento/Catalog/etc/module.xml @@ -6,7 +6,7 @@ */ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"> - <module name="Magento_Catalog" setup_version="2.0.1"> + <module name="Magento_Catalog" setup_version="2.0.2"> <sequence> <module name="Magento_Eav"/> <module name="Magento_Cms"/> diff --git a/app/code/Magento/Catalog/view/adminhtml/layout/catalog_product_set_edit.xml b/app/code/Magento/Catalog/view/adminhtml/layout/catalog_product_set_edit.xml index 30d421cfe85949e262c51f087306b6d7a25933ee..9242521462141fa464e0e3bc68e1fabec241cb3a 100644 --- a/app/code/Magento/Catalog/view/adminhtml/layout/catalog_product_set_edit.xml +++ b/app/code/Magento/Catalog/view/adminhtml/layout/catalog_product_set_edit.xml @@ -8,7 +8,9 @@ <page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"> <body> <referenceContainer name="content"> - <block class="Magento\Catalog\Block\Adminhtml\Product\Attribute\Set\Main" name="adminhtml.catalog.product.set.edit" template="catalog/product/attribute/set/main.phtml"/> + <container name="adminhtml.catalog.product.set.edit.wrapper" htmlTag="div" htmlClass="admin__scope-old"><!-- @todo ui: remove arguments within .admin__scope-old --> + <block class="Magento\Catalog\Block\Adminhtml\Product\Attribute\Set\Main" name="adminhtml.catalog.product.set.edit" template="catalog/product/attribute/set/main.phtml"/> + </container> </referenceContainer> </body> </page> diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/edit.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/edit.phtml index fcf5ba45d80d69ecb9c336a785295eb6a4fb9734..569e0e88458c683f848c64595fa8159c30eeee59 100644 --- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/edit.phtml +++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/edit.phtml @@ -20,9 +20,11 @@ require([ "jquery", "tinymce", + 'Magento_Ui/js/modal/confirm', + 'Magento_Ui/js/modal/alert', "loadingPopup", "mage/backend/floating-header" -], function(jQuery, tinyMCE){ +], function(jQuery, tinyMCE, confirm, alert){ //<![CDATA[ function categoryReset(url,useAjax){ @@ -40,9 +42,14 @@ require([ * with this form, we surely delete same category in the tree and at backend */ function categoryDelete(url) { - if (confirm('<?php /* @escapeNotVerified */ echo __('Are you sure you want to delete this category?') ?>')){ - location.href = url; - } + confirm({ + content: '<?php /* @escapeNotVerified */ echo __('Are you sure you want to delete this category?') ?>', + actions: { + confirm: function () { + location.href = url; + } + } + }); } /** @@ -81,7 +88,9 @@ require([ }); $categoryContainer.html(''); } catch (e) { - alert(e.message); + alert({ + content: e.message + }); } $categoryContainer.html(data.content).trigger('contentUpdated'); setTimeout(function() { @@ -98,7 +107,9 @@ require([ window.refreshTreeArea(); } } catch (e) { - alert(e.message); + alert({ + content: e.message + }); }; }, 25); } diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml index eeefa9796b4f85dc48a98950a928717ceffb2ef6..9e1c939c542386dea232351f7be694945c4dd984 100644 --- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml +++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml @@ -16,536 +16,486 @@ </div> <div class="tree-actions"> <?php if ($block->getRoot()): ?> - <?php //echo $block->getCollapseButtonHtml() ?> - <?php //echo $block->getExpandButtonHtml() ?> - <a href="#" - onclick="tree.collapseTree(); return false;"><?php /* @escapeNotVerified */ echo __('Collapse All'); ?></a> - <span class="separator">|</span> <a href="#" - onclick="tree.expandTree(); return false;"><?php /* @escapeNotVerified */ echo __('Expand All'); ?></a> + <?php //echo $block->getCollapseButtonHtml() ?> + <?php //echo $block->getExpandButtonHtml() ?> + <a href="#" + onclick="tree.collapseTree(); return false;"><?php /* @escapeNotVerified */ echo __('Collapse All'); ?></a> + <span class="separator">|</span> <a href="#" + onclick="tree.expandTree(); return false;"><?php /* @escapeNotVerified */ echo __('Expand All'); ?></a> <?php endif; ?> </div> -<?php if ($block->getRoot()): ?> + <?php if ($block->getRoot()): ?> <div class="tree-holder"> <div id="tree-div" class="tree-wrapper"></div> </div> </div> -<div data-id="information-dialog-tree" class="messages" style="display: none;"> - <div class="message message-notice"> - <div><?php /* @escapeNotVerified */ echo __('This operation can take a long time'); ?></div> + <div data-id="information-dialog-tree" class="messages" style="display: none;"> + <div class="message message-notice"> + <div><?php /* @escapeNotVerified */ echo __('This operation can take a long time'); ?></div> + </div> </div> -</div> -<!--[if IE]> -<script id="ie-deferred-loader" defer="defer" src=""></script> -<![endif]--> -<script> -var tree; -require([ - "jquery", - "jquery/ui", - "prototype", - "extjs/ext-tree-checkbox", - "mage/adminhtml/form", - "mage/translate" -], function(jQuery){ - -/** - * Fix ext compatibility with prototype 1.6 - */ -Ext.lib.Event.getTarget = function (e) { - var ee = e.browserEvent || e; - return ee.target ? Event.element(ee) : null; -}; - -Ext.tree.TreePanel.Enhanced = function (el, config) { - Ext.tree.TreePanel.Enhanced.superclass.constructor.call(this, el, config); -}; - -Ext.extend(Ext.tree.TreePanel.Enhanced, Ext.tree.TreePanel, { - - loadTree:function (config, firstLoad) { - var parameters = config['parameters']; - var data = config['data']; - - this.storeId = parameters['store_id']; - - if (this.storeId != 0 && $('add_root_category_button')) { - $('add_root_category_button').hide(); - } - - if ((typeof parameters['root_visible']) != 'undefined') { - this.rootVisible = parameters['root_visible'] * 1; - } - - var root = new Ext.tree.TreeNode(parameters); - - this.nodeHash = {}; - this.setRootNode(root); - - if (firstLoad) { - this.addListener('click', this.categoryClick); - this.addListener('beforenodedrop', categoryMove.createDelegate(this)); - } - - this.loader.buildCategoryTree(root, data); - this.el.dom.innerHTML = ''; - // render the tree - this.render(); - if (parameters['expanded']) { - this.expandAll(); - } else { - root.expand(); - } - - var selectedNode = this.getNodeById(parameters['category_id']); - if (selectedNode) { - this.currentNodeId = parameters['category_id']; - } - this.selectCurrentNode(); - - // Temporary solution will be replaced after refactoring of tree functionality - jQuery('body').off('tabsactivate.tree').on('tabsactivate.tree', jQuery.proxy(function (e, ui) { - this.activeTab = jQuery(ui.newTab).find('a').prop('id'); - }, this)) - }, - - request:function (url, params) { - if (!params) { - if (this.activeTab) { - var params = {active_tab_id:this.activeTab}; - } - else { - var params = {}; - } - } - if (!params.form_key) { - params.form_key = FORM_KEY; - } - var result = new Ajax.Request( - url + (url.match(new RegExp('\\?')) ? '&isAjax=true' : '?isAjax=true' ), - { - parameters:params, - method:'post' - } - ); - - return result; - }, - - selectCurrentNode:function () { - if (this.currentNodeId) { - var selectedNode = this.getNodeById(this.currentNodeId); - if ((typeof selectedNode.attributes.path) != 'undefined') { - var path = selectedNode.attributes.path; - if (!this.storeId) { - path = '0/' + path; - } - this.selectPath(path); - } else { - this.getSelectionModel().select(selectedNode); - } - } - }, - - collapseTree:function () { - this.collapseAll(); - - this.selectCurrentNode(); - - if (!this.collapsed) { - this.collapsed = true; - this.loader.dataUrl = '<?php /* @escapeNotVerified */ echo $block->getLoadTreeUrl(false) ?>'; - this.request(this.loader.dataUrl, false); - } - }, - - expandTree:function () { - this.expandAll(); - if (this.collapsed) { - this.collapsed = false; - this.loader.dataUrl = '<?php /* @escapeNotVerified */ echo $block->getLoadTreeUrl(true) ?>'; - this.request(this.loader.dataUrl, false); - } - }, - - categoryClick:function (node, e) { - var url = this.buildUrl(node.id); - - this.currentNodeId = node.id; - if (!this.useAjax) { - setLocation(url); - return; - } - if (this.activeTab) { - var params = {active_tab_id:this.activeTab}; - } - updateContent(url, params); - }, - - buildUrl: function(id){ - var urlExt = (this.storeId ? 'store/' + this.storeId + '/' : '') + 'id/' + id + '/'; - - return parseSidUrl(this.baseUrl, urlExt); - }, - - getBaseUrl: function(){ - return this.baseUrl; - } -}); - -function reRenderTree(switcherParams) { - // re-render tree by store switcher - if (tree && switcherParams) { - var url; - if (switcherParams.useConfirm) { - if (!confirm("<?php /* @escapeNotVerified */ echo __('Please confirm site switching. All data that hasn\'t been saved will be lost.') ?>")) { - return false; - } - } + <!--[if IE]> + <script id="ie-deferred-loader" defer="defer" src=""></script> + <![endif]--> + <script> + var tree; + require([ + "jquery", + 'Magento_Ui/js/modal/modal', + "jquery/ui", + "prototype", + "extjs/ext-tree-checkbox", + "mage/adminhtml/form", + "mage/translate" + ], function (jQuery, modal) { + + /** + * Fix ext compatibility with prototype 1.6 + */ + Ext.lib.Event.getTarget = function (e) { + var ee = e.browserEvent || e; + return ee.target ? Event.element(ee) : null; + }; - if ($('add_root_category_button')) { - if (!switcherParams.scopeId) { - $('add_root_category_button').show(); - } - else { - $('add_root_category_button').hide(); - } - } - - if (tree.useAjax) { - // retain current selected category id - url = tree.switchTreeUrl + switcherParams.scopeParams + 'id/' + tree.currentNodeId + '/'; - // load from cache - // load from ajax - // add form key - var params = { - form_key : FORM_KEY + Ext.tree.TreePanel.Enhanced = function (el, config) { + Ext.tree.TreePanel.Enhanced.superclass.constructor.call(this, el, config); }; - new Ajax.Request(url + (url.match(new RegExp('\\?')) ? '&isAjax=true' : '?isAjax=true' ), { - parameters:params, - method:'post', - onComplete:function (transport) { - var response = eval('(' + transport.responseText + ')'); - if (!response['parameters']) { - return false; + + Ext.extend(Ext.tree.TreePanel.Enhanced, Ext.tree.TreePanel, { + + loadTree: function (config, firstLoad) { + var parameters = config['parameters']; + var data = config['data']; + + this.storeId = parameters['store_id']; + + if (this.storeId != 0 && $('add_root_category_button')) { + $('add_root_category_button').hide(); } - _renderNewTree(response, switcherParams.scopeParams); + if ((typeof parameters['root_visible']) != 'undefined') { + this.rootVisible = parameters['root_visible'] * 1; + } + + var root = new Ext.tree.TreeNode(parameters); + + this.nodeHash = {}; + this.setRootNode(root); + this.modal = modal; + + if (firstLoad) { + this.addListener('click', this.categoryClick); + this.addListener('beforenodedrop', categoryMove.bind(this)); + } + + this.loader.buildCategoryTree(root, data); + this.el.dom.innerHTML = ''; + // render the tree + this.render(); + if (parameters['expanded']) { + this.expandAll(); + } else { + root.expand(); + } + + var selectedNode = this.getNodeById(parameters['category_id']); + if (selectedNode) { + this.currentNodeId = parameters['category_id']; + } + this.selectCurrentNode(); + + // Temporary solution will be replaced after refactoring of tree functionality + jQuery('body').off('tabsactivate.tree').on('tabsactivate.tree', jQuery.proxy(function (e, ui) { + this.activeTab = jQuery(ui.newTab).find('a').prop('id'); + }, this)) + }, + + request: function (url, params) { + if (!params) { + if (this.activeTab) { + var params = {active_tab_id: this.activeTab}; + } + else { + var params = {}; + } + } + if (!params.form_key) { + params.form_key = FORM_KEY; + } + var result = new Ajax.Request( + url + (url.match(new RegExp('\\?')) ? '&isAjax=true' : '?isAjax=true' ), + { + parameters: params, + method: 'post' + } + ); + + return result; + }, + + selectCurrentNode: function () { + if (this.currentNodeId) { + var selectedNode = this.getNodeById(this.currentNodeId); + if ((typeof selectedNode.attributes.path) != 'undefined') { + var path = selectedNode.attributes.path; + if (!this.storeId) { + path = '0/' + path; + } + this.selectPath(path); + } else { + this.getSelectionModel().select(selectedNode); + } + } + }, + + collapseTree: function () { + this.collapseAll(); + + this.selectCurrentNode(); + + if (!this.collapsed) { + this.collapsed = true; + this.loader.dataUrl = '<?php /* @escapeNotVerified */ echo $block->getLoadTreeUrl(false) ?>'; + this.request(this.loader.dataUrl, false); + } + }, + + expandTree: function () { + this.expandAll(); + if (this.collapsed) { + this.collapsed = false; + this.loader.dataUrl = '<?php /* @escapeNotVerified */ echo $block->getLoadTreeUrl(true) ?>'; + this.request(this.loader.dataUrl, false); + } + }, + + categoryClick: function (node, e) { + var url = this.buildUrl(node.id); + + this.currentNodeId = node.id; + if (!this.useAjax) { + setLocation(url); + return; + } + if (this.activeTab) { + var params = {active_tab_id: this.activeTab}; + } + updateContent(url, params); + }, + + buildUrl: function (id) { + var urlExt = (this.storeId ? 'store/' + this.storeId + '/' : '') + 'id/' + id + '/'; + + return parseSidUrl(this.baseUrl, urlExt); + }, + + getBaseUrl: function () { + return this.baseUrl; } }); - } else { - var baseUrl = '<?php /* @escapeNotVerified */ echo $block->getEditUrl() ?>'; - var urlExt = switcherParams.scopeParams + 'id/' + tree.currentNodeId + '/'; - url = parseSidUrl(baseUrl, urlExt); - setLocation(url); - } - } - // render default tree - else { - _renderNewTree(); - } -} - -function _renderNewTree(config, scopeParams) { - if (!config) { - var config = defaultLoadTreeParams; - } - if (tree) { - tree.purgeListeners(); - tree.el.dom.innerHTML = ''; - } - tree = new Ext.tree.TreePanel.Enhanced('tree-div', newTreeParams); - - tree.loadTree(config, true); - - // try to select current category - var selectedNode = tree.getNodeById(config.parameters.category_id); - if (selectedNode) { - tree.currentNodeId = config.parameters.category_id; - } - tree.selectCurrentNode(); - - // update content area - var url = tree.editUrl; - if (scopeParams) { - url = url + scopeParams; - } - <?php if ($block->isClearEdit()): ?> - if (selectedNode) { - url = url + 'id/' + config.parameters.category_id; - } - <?php endif;?> - //updateContent(url); //commented since ajax requests replaced with http ones to load a category -} - -jQuery(function () { - categoryLoader = new Ext.tree.TreeLoader({ - dataUrl:'<?php /* @escapeNotVerified */ echo $block->getLoadTreeUrl() ?>' - }); - - categoryLoader.processResponse = function(response, parent, callback) { - var config = JSON.parse(response.responseText); - - this.buildCategoryTree(parent, config); - - if (typeof callback == "function") { - callback(this, parent); - } - }; - - categoryLoader.buildCategoryTree = function (parent, config) { - if (!config) return null; - - if (parent && config && config.length) { - for (var i = 0; i < config.length; i++) { - var node; - var _node = Object.clone(config[i]); - if (_node.children && !_node.children.length) { - delete(_node.children); - node = new Ext.tree.AsyncTreeNode(_node); - } else { - node = new Ext.tree.TreeNode(config[i]); + + function reRenderTree(switcherParams) { + // re-render tree by store switcher + if (tree && switcherParams) { + var url; + if (switcherParams.useConfirm) { + if (!confirm("<?php /* @escapeNotVerified */ echo __('Please confirm site switching. All data that hasn\'t been saved will be lost.') ?>")) { + return false; + } + } + + if ($('add_root_category_button')) { + if (!switcherParams.scopeId) { + $('add_root_category_button').show(); + } + else { + $('add_root_category_button').hide(); + } + } + + if (tree.useAjax) { + // retain current selected category id + url = tree.switchTreeUrl + switcherParams.scopeParams + 'id/' + tree.currentNodeId + '/'; + // load from cache + // load from ajax + // add form key + var params = { + form_key: FORM_KEY + }; + new Ajax.Request(url + (url.match(new RegExp('\\?')) ? '&isAjax=true' : '?isAjax=true' ), { + parameters: params, + method: 'post', + onComplete: function (transport) { + var response; + + try { + response = JSON.parse(transport.responseText); + } catch (e) { + console.warn('An error occured while parsing response'); + } + + if (!response || !response['parameters']) { + return false; + } + + _renderNewTree(response, switcherParams.scopeParams); + } + }); + } else { + var baseUrl = '<?php /* @escapeNotVerified */ echo $block->getEditUrl() ?>'; + var urlExt = switcherParams.scopeParams + 'id/' + tree.currentNodeId + '/'; + url = parseSidUrl(baseUrl, urlExt); + setLocation(url); + } } - parent.appendChild(node); - node.loader = node.getOwnerTree().loader; - if (_node.children) { - this.buildCategoryTree(node, _node.children); + // render default tree + else { + _renderNewTree(); } } - } - }; - categoryLoader.buildHash = function (node) { - var hash = {}; + function _renderNewTree(config, scopeParams) { + if (!config) { + var config = defaultLoadTreeParams; + } - hash = this.toArray(node.attributes); + if (tree) { + tree.purgeListeners(); + tree.el.dom.innerHTML = ''; + } + tree = new Ext.tree.TreePanel.Enhanced('tree-div', newTreeParams); - if (node.childNodes.length > 0 || (node.loaded == false && node.loading == false)) { - hash['children'] = new Array; + tree.loadTree(config, true); - for (var i = 0, len = node.childNodes.length; i < len; i++) { - if (!hash['children']) { - hash['children'] = new Array; + // try to select current category + var selectedNode = tree.getNodeById(config.parameters.category_id); + if (selectedNode) { + tree.currentNodeId = config.parameters.category_id; } - hash['children'].push(this.buildHash(node.childNodes[i])); + tree.selectCurrentNode(); + + // update content area + var url = tree.editUrl; + if (scopeParams) { + url = url + scopeParams; + } + <?php if ($block->isClearEdit()): ?> + if (selectedNode) { + url = url + 'id/' + config.parameters.category_id; + } + <?php endif;?> + //updateContent(url); //commented since ajax requests replaced with http ones to load a category } - } - - return hash; - }; - - categoryLoader.toArray = function (attributes) { - var data = {form_key:FORM_KEY}; - for (var key in attributes) { - var value = attributes[key]; - data[key] = value; - } - - return data; - }; - - categoryLoader.on("beforeload", function (treeLoader, node) { - treeLoader.baseParams.id = node.attributes.id; - treeLoader.baseParams.store = node.attributes.store; - treeLoader.baseParams.form_key = FORM_KEY; - }); - - categoryLoader.on("load", function (treeLoader, node, config) { - //varienWindowOnload(); - }); - - scopeSwitcherHandler = reRenderTree; - - newTreeParams = { - animate:false, - loader:categoryLoader, - enableDD:true, - containerScroll:true, - selModel:new Ext.tree.CheckNodeMultiSelectionModel(), - rootVisible:'<?php /* @escapeNotVerified */ echo $block->getRoot()->getIsVisible() ?>', - useAjax: <?php /* @escapeNotVerified */ echo $block->getUseAjax() ?>, - switchTreeUrl:'<?php /* @escapeNotVerified */ echo $block->getSwitchTreeUrl() ?>', - editUrl:'<?php /* @escapeNotVerified */ echo $block->getEditUrl() ?>', - currentNodeId: <?php echo (int)$block->getCategoryId() ?>, - baseUrl: '<?php /* @escapeNotVerified */ echo $block->getEditUrl() ?>' - }; - - defaultLoadTreeParams = { - parameters:{ - text:'<?php /* @escapeNotVerified */ echo htmlentities($block->getRoot()->getName()) ?>', - draggable:false, - allowDrop : <?php if ($block->getRoot()->getIsVisible()): ?>true<?php else : ?>false<?php endif; ?>, - id: <?php echo (int)$block->getRoot()->getId() ?>, - expanded: <?php echo (int)$block->getIsWasExpanded() ?>, - store_id: <?php echo (int)$block->getStore()->getId() ?>, - category_id: <?php echo (int)$block->getCategoryId() ?> - }, - data: <?php /* @escapeNotVerified */ echo $block->getTreeJson() ?> - }; - - reRenderTree(); -}); - -function addNew(url, isRoot) { - if (isRoot) { - tree.currentNodeId = tree.root.id; - } - - if (/store\/\d+/.test(url)) { - url = url.replace(/store\/\d+/, "store/" + tree.storeId); - } - else { - url += "store/" + tree.storeId + "/"; - } - - url += 'parent/' + tree.currentNodeId; - updateContent(url); -} - -var mageDialog = (function($) { - var self = {dialogOpened: false, callback: []}; - - self.callback = {ok: [], cancel: []}; - self.createDialog = function () { - var onEvent = function (type, dialog) { - self.callback[type].forEach(function(call) { - call(); - }); - $(dialog).dialog( "close" ); - }; - var _resetState = function() { - self.dialogOpened = false; - self.callback = {ok: [], cancel: []}; - delete self.dialog; - }; - self.dialog = $('[data-id="information-dialog-category"]').dialog({ - autoOpen: false, - modal: true, - dialogClass: 'popup-window ui-popup-message', - resizable: false, - width: '75%', - title: $.mage.__('Warning message'), - position: { - my: 'left top', - at: 'center top', - of: 'body' - }, - buttons: [{ - text: $.mage.__('Ok'), - 'class': 'action-primary', - click: function () { - onEvent('ok', this); + + jQuery(function () { + categoryLoader = new Ext.tree.TreeLoader({ + dataUrl: '<?php /* @escapeNotVerified */ echo $block->getLoadTreeUrl() ?>' + }); + + categoryLoader.processResponse = function (response, parent, callback) { + var config = JSON.parse(response.responseText); + + this.buildCategoryTree(parent, config); + + if (typeof callback == "function") { + callback(this, parent); } - }, { - text: $.mage.__('Cancel'), - 'class': 'action-close', - click: function () { - onEvent('cancel', this); + }; + + categoryLoader.buildCategoryTree = function (parent, config) { + if (!config) return null; + + if (parent && config && config.length) { + for (var i = 0; i < config.length; i++) { + var node; + var _node = Object.clone(config[i]); + if (_node.children && !_node.children.length) { + delete(_node.children); + node = new Ext.tree.AsyncTreeNode(_node); + } else { + node = new Ext.tree.TreeNode(config[i]); + } + parent.appendChild(node); + node.loader = node.getOwnerTree().loader; + if (_node.children) { + this.buildCategoryTree(node, _node.children); + } + } + } + }; + + categoryLoader.buildHash = function (node) { + var hash = {}; + + hash = this.toArray(node.attributes); + + if (node.childNodes.length > 0 || (node.loaded == false && node.loading == false)) { + hash['children'] = new Array; + + for (var i = 0, len = node.childNodes.length; i < len; i++) { + if (!hash['children']) { + hash['children'] = new Array; + } + hash['children'].push(this.buildHash(node.childNodes[i])); + } + } + + return hash; + }; + + categoryLoader.toArray = function (attributes) { + var data = {form_key: FORM_KEY}; + for (var key in attributes) { + var value = attributes[key]; + data[key] = value; } + + return data; + }; + + categoryLoader.on("beforeload", function (treeLoader, node) { + treeLoader.baseParams.id = node.attributes.id; + treeLoader.baseParams.store = node.attributes.store; + treeLoader.baseParams.form_key = FORM_KEY; + }); + + categoryLoader.on("load", function (treeLoader, node, config) { + //varienWindowOnload(); + }); + + scopeSwitcherHandler = reRenderTree; + + newTreeParams = { + animate: false, + loader: categoryLoader, + enableDD: true, + containerScroll: true, + selModel: new Ext.tree.CheckNodeMultiSelectionModel(), + rootVisible: '<?php /* @escapeNotVerified */ echo $block->getRoot()->getIsVisible() ?>', + useAjax: <?php /* @escapeNotVerified */ echo $block->getUseAjax() ?>, + switchTreeUrl: '<?php /* @escapeNotVerified */ echo $block->getSwitchTreeUrl() ?>', + editUrl: '<?php /* @escapeNotVerified */ echo $block->getEditUrl() ?>', + currentNodeId: <?php /* @escapeNotVerified */ echo (int)$block->getCategoryId() ?>, + baseUrl: '<?php /* @escapeNotVerified */ echo $block->getEditUrl() ?>' + }; + + defaultLoadTreeParams = { + parameters: { + text: '<?php /* @escapeNotVerified */ echo htmlentities($block->getRoot()->getName()) ?>', + draggable: false, + allowDrop: <?php if ($block->getRoot()->getIsVisible()): ?>true<?php else : ?>false<?php endif; ?>, + id: <?php /* @escapeNotVerified */ echo (int)$block->getRoot()->getId() ?>, + expanded: <?php /* @escapeNotVerified */ echo (int)$block->getIsWasExpanded() ?>, + store_id: <?php /* @escapeNotVerified */ echo (int)$block->getStore()->getId() ?>, + category_id: <?php /* @escapeNotVerified */ echo (int)$block->getCategoryId() ?> + }, + data: <?php /* @escapeNotVerified */ echo $block->getTreeJson() ?> + }; + + reRenderTree(); + }); + + function addNew(url, isRoot) { + if (isRoot) { + tree.currentNodeId = tree.root.id; } - ], - open: function () { - $(this).closest('.ui-dialog').addClass('ui-dialog-active'); - self.dialogOpened = true; - - var topMargin = $(this).closest('.ui-dialog').children('.ui-dialog-titlebar').outerHeight() + 30; - $(this).closest('.ui-dialog').css('margin-top', topMargin); - }, - close: function(event, ui) { - $(this).dialog('destroy'); - _resetState(); - } - }); - }; - - return { - onOk: function(call) { - self.callback.ok.push(call); - return this; - }, - onCancel: function(call) { - self.callback.cancel.push(call); - return this; - }, - show: function() { - if (self.dialog == undefined) { - self.createDialog(); - } - if (self.dialogOpened == false) { - self.dialog.dialog('open'); - } - return this; - } - }; -})(jQuery); - -function categoryMove(obj) { - var data = {id:obj.dropNode.id, form_key:FORM_KEY}; - - data.point = obj.point; - switch (obj.point) { - case 'above' : - data.pid = obj.target.parentNode.id; - data.paid = obj.dropNode.parentNode.id; - if (obj.target.previousSibling) { - data.aid = obj.target.previousSibling.id; - } else { - data.aid = 0; - } - break; - case 'below' : - data.pid = obj.target.parentNode.id; - data.aid = obj.target.id; - break; - case 'append' : - data.pid = obj.target.id; - data.paid = obj.dropNode.parentNode.id; - if (obj.target.lastChild) { - data.aid = obj.target.lastChild.id; - } else { - data.aid = 0; - } - break; - default : - obj.cancel = true; - return obj; - } - - var pd = []; - for (var key in data) { - pd.push(encodeURIComponent(key), "=", encodeURIComponent(data[key]), "&"); - } - pd.splice(pd.length - 1, 1); - - mageDialog.onOk(function() { - (function($){ - $.ajax({ - url: '<?php /* @escapeNotVerified */ echo $block->getMoveUrl() ?>', - method : 'POST', - data: pd.join(""), - showLoader: true - }).done(function(data) { - if (data.messages && data.messages.length > 0) { - $('[name=category-edit-form] .messages').html(data.messages); + + if (/store\/\d+/.test(url)) { + url = url.replace(/store\/\d+/, "store/" + tree.storeId); } - if (data.error) { - reRenderTree(); - } else { - $(obj.tree.container.dom).trigger('categoryMove.tree'); + else { + url += "store/" + tree.storeId + "/"; } - }).fail(function(jqXHR, textStatus) { - if (window.console) { - console.log(textStatus); + + url += 'parent/' + tree.currentNodeId; + updateContent(url); + } + + function categoryMove(obj) { + var data = {id: obj.dropNode.id, form_key: FORM_KEY}; + + data.point = obj.point; + switch (obj.point) { + case 'above' : + data.pid = obj.target.parentNode.id; + data.paid = obj.dropNode.parentNode.id; + if (obj.target.previousSibling) { + data.aid = obj.target.previousSibling.id; + } else { + data.aid = 0; + } + break; + case 'below' : + data.pid = obj.target.parentNode.id; + data.aid = obj.target.id; + break; + case 'append' : + data.pid = obj.target.id; + data.paid = obj.dropNode.parentNode.id; + if (obj.target.lastChild) { + data.aid = obj.target.lastChild.id; + } else { + data.aid = 0; + } + break; + default : + obj.cancel = true; + return obj; } - location.reload(); - }); - })(jQuery); - }).onCancel(function() { - reRenderTree(); - }).show(); -} - window.addNew = addNew; - -}); -</script> + + var pd = []; + for (var key in data) { + pd.push(encodeURIComponent(key), "=", encodeURIComponent(data[key]), "&"); + } + pd.splice(pd.length - 1, 1); + + jQuery('[data-id="information-dialog-category"]').modal({ + modalClass: 'confirm', + title: jQuery.mage.__('Warning message'), + buttons: [{ + text: 'Cancel', + class: 'action-secondary', + click: function () { + reRenderTree(); + this.closeModal(); + } + }, { + text: 'Ok', + class: 'action-primary', + click: function () { + (function ($) { + $.ajax({ + url: '<?php /* @escapeNotVerified */ echo $block->getMoveUrl() ?>//', + method: 'POST', + data: pd.join(""), + showLoader: true + }).done(function (data) { + if (data.messages && data.messages.length > 0) { + $('[name=category-edit-form] .messages').html(data.messages); + } + if (data.error) { + reRenderTree(); + } else { + $(obj.tree.container.dom).trigger('categoryMove.tree'); + } + }).fail(function (jqXHR, textStatus) { + if (window.console) { + console.log(textStatus); + } + location.reload(); + }); + })(jQuery); + this.closeModal(); + } + }] + + }).trigger('openModal'); + + } + + window.addNew = addNew; + + }); + </script> <?php endif; ?> diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/form.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/form.phtml index 98f5a0a65052f5e7cea257320245e1d4d21ecdff..8bc0b649753997c6813ce5d6ccf4a167273c5f3e 100644 --- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/form.phtml +++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/form.phtml @@ -13,14 +13,15 @@ */ ?> <?php /* @escapeNotVerified */ echo $block->getFormInitScripts() ?> +<div data-mage-init='{"floatingHeader": {}}' class="page-actions attribute-popup-actions" <?php /* @escapeNotVerified */ echo $block->getUiId('content-header') ?>> + <?php echo $block->getButtonsHtml('header') ?> +</div> + <form id="edit_form" class="admin__scope-old" action="<?php echo $block->escapeHtml($block->getSaveUrl()) ?>" method="post"> <input name="form_key" type="hidden" value="<?php echo $block->escapeHtml($block->getFormKey()) ?>" /> <?php echo $block->getChildHtml('form') ?> </form> -<div data-mage-init='{"floatingHeader": {}}' class="page-actions attribute-popup-actions" <?php /* @escapeNotVerified */ echo $block->getUiId('content-header') ?>> - <?php echo $block->getButtonsHtml('header') ?> -</div> <script> require(['jquery', "mage/mage"], function(jQuery){ diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/js.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/js.phtml index 1881699475464a9085b95334f9abe567467d75e5..dfc022ec9b6500efd6dde7e59efd84ffd0fe2411 100644 --- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/js.phtml +++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/js.phtml @@ -8,7 +8,13 @@ ?> <script> -require(["jquery", "collapsable", "prototype"], function(jQuery){ +require([ + "jquery", + 'Magento_Ui/js/modal/alert', + 'Magento_Ui/js/modal/prompt', + "collapsable", + "prototype" +], function(jQuery, alert, prompt){ function toggleApplyVisibility(select) { if ($(select).value == 1) { @@ -260,36 +266,48 @@ function updateRequriedOptions() function saveAttributeInNewSet(promptMessage) { - var newAttributeSetName = prompt(promptMessage, ''); - - if (newAttributeSetName == null) { - return; - } - - var rules = ['required-entry', 'validate-no-html-tags']; - for (var i = 0; i < rules.length; i++) { - if (!jQuery.validator.methods[rules[i]](newAttributeSetName)) { - alert(jQuery.validator.messages[rules[i]]); - return; + var newAttributeSetName; + + prompt({ + content: promptMessage, + actions: { + confirm: function(val) { + newAttributeSetName = val; + + if (!newAttributeSetName) { + return; + } + + var rules = ['required-entry', 'validate-no-html-tags']; + for (var i = 0; i < rules.length; i++) { + if (!jQuery.validator.methods[rules[i]](newAttributeSetName)) { + alert({ + content: jQuery.validator.messages[rules[i]] + }); + + return; + } + } + + var newAttributeSetNameInputId = 'new_attribute_set_name'; + + if ($(newAttributeSetNameInputId)) { + $(newAttributeSetNameInputId).value = newAttributeSetName; + } else { + $('edit_form').insert({ + top: new Element('input', { + type: 'hidden', + id: newAttributeSetNameInputId, + name: 'new_attribute_set_name', + value: newAttributeSetName + }) + }); + } + // Temporary solution will replaced after refactoring of attributes functionality + jQuery('#edit_form').triggerHandler('save'); + } } - } - - var newAttributeSetNameInputId = 'new_attribute_set_name'; - - if ($(newAttributeSetNameInputId)) { - $(newAttributeSetNameInputId).value = newAttributeSetName; - } else { - $('edit_form').insert({ - top: new Element('input', { - type: 'hidden', - id: newAttributeSetNameInputId, - name: 'new_attribute_set_name', - value: newAttributeSetName - }) - }); - } - // Temporary solution will replaced after refactoring of attributes functionality - jQuery('#edit_form').triggerHandler('save'); + }); } if($('frontend_input')){ diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/set/main.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/set/main.phtml index 4ccbec13fdbfe645adb9efea563360fe78d0a10d..06edcfbaa2588ae285fac4a456ec0ae5c05b8846 100644 --- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/set/main.phtml +++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/set/main.phtml @@ -11,23 +11,23 @@ <div class="edit-attribute-set attribute-set-col"> <?php echo $block->getSetFormHtml() ?> <script> -require([ - "jquery", - "mage/mage" -], function(jQuery){ + require([ + "jquery", + "mage/mage" + ], function(jQuery){ - jQuery('#set-prop-form').mage('validation', {errorClass: 'mage-error'}); + jQuery('#set-prop-form').mage('validation', {errorClass: 'mage-error'}); -}); -</script> + }); + </script> </div> <div class="attribute-set-col fieldset-wrapper"> <div class="fieldset-wrapper-title"> <span class="title"><?php /* @escapeNotVerified */ echo __('Groups') ?></span> </div> <?php if (!$block->getIsReadOnly()): ?> - <?php /* @escapeNotVerified */ echo $block->getAddGroupButton() ?> <?php /* @escapeNotVerified */ echo $block->getDeleteGroupButton() ?> - <p class="note-block"><?php /* @escapeNotVerified */ echo __('Double click on a group to rename it.') ?></p> + <?php /* @escapeNotVerified */ echo $block->getAddGroupButton() ?> <?php /* @escapeNotVerified */ echo $block->getDeleteGroupButton() ?> + <p class="note-block"><?php /* @escapeNotVerified */ echo __('Double click on a group to rename it.') ?></p> <?php endif; ?> <?php echo $block->getSetsFilterHtml() ?> @@ -41,339 +41,359 @@ require([ <!--[if IE]> <script id="ie-deferred-loader" defer="defer" src=""></script> <![endif]--> - <script> -define("tree-panel", ["jquery", "extjs/ext-tree-checkbox", "prototype"], function(jQuery){ - - //<![CDATA[ - var allowDragAndDrop = <?php /* @escapeNotVerified */ echo($block->getIsReadOnly() ? 'false' : 'true'); ?>; - var canEditGroups = <?php /* @escapeNotVerified */ echo($block->getIsReadOnly() ? 'false' : 'true'); ?>; - - var TreePanels = function() { - // shorthand - var Tree = Ext.tree; - - return { - init : function(){ - // yui-ext tree - - var tree = new Ext.tree.TreePanel('tree-div1', { - animate:false, - loader: false, - enableDD:allowDragAndDrop, - containerScroll: true, - rootVisible: false - }); - - // set the root node - this.root = new Ext.tree.TreeNode({ - text: 'ROOT', - allowDrug:false, - allowDrop:true, - id:'1' - }); - - tree.setRootNode(this.root); - buildCategoryTree(this.root, <?php /* @escapeNotVerified */ echo $block->getGroupTreeJson() ?>); - // render the tree - tree.render(); - this.root.expand(false, false); - tree.expandAll(); - - this.ge = new Ext.tree.TreeEditor(tree, { - allowBlank:false, - blankText:'<?php /* @escapeNotVerified */ echo __('A name is required.') ?>', - selectOnFocus:true, - cls:'folder' - }); - - this.root.addListener('beforeinsert', editSet.leftBeforeInsert); - this.root.addListener('beforeappend', editSet.leftBeforeInsert); - - //this.ge.addListener('beforerender', editSet.editGroup); - this.ge.addListener('beforeshow', editSet.editGroup); - this.ge.addListener('beforecomplete', editSet.beforeRenameGroup); - //this.ge.addListener('startedit', editSet.editGroup); - - //------------------------------------------------------------- - - var tree2 = new Ext.tree.TreePanel('tree-div2', { - animate:false, - loader: false, - enableDD:allowDragAndDrop, - containerScroll: true, - rootVisible: false, - lines:false - }); - - // set the root node - this.root2 = new Ext.tree.TreeNode({ - text: 'ROOT', - draggable:false, - id:'free' - }); - tree2.setRootNode(this.root2); - buildCategoryTree(this.root2, <?php /* @escapeNotVerified */ echo $block->getAttributeTreeJson() ?>); - - this.root2.addListener('beforeinsert', editSet.rightBeforeInsert); - this.root2.addListener('beforeappend', editSet.rightBeforeAppend); - - this.root2.addListener('append', editSet.rightAppend); - this.root2.addListener('remove', editSet.rightRemove); - // render the tree - tree2.render(); - this.root2.expand(false, false); - tree2.expandAll(); - }, - - rebuildTrees : function(){ - editSet.req.attributes = new Array(); - rootNode = TreePanels.root; - var gIterator = 0; - for( i in rootNode.childNodes ) { - if(rootNode.childNodes[i].id) { - var group = rootNode.childNodes[i]; - editSet.req.groups[gIterator] = new Array(group.id, group.attributes.text.strip(), (gIterator+1)); - var iterator = 0 - for( j in group.childNodes ) { - iterator ++; - if( group.childNodes[j].id > 0 ) { - editSet.req.attributes[group.childNodes[j].id] = new Array(group.childNodes[j].id, group.id, iterator, group.childNodes[j].attributes.entity_id); + <script> + define("tree-panel", + [ + "jquery", + "Magento_Ui/js/modal/prompt", + "Magento_Ui/js/modal/alert", + "extjs/ext-tree-checkbox", + "prototype" + ], function(jQuery, prompt, alert){ + + //<![CDATA[ + var allowDragAndDrop = <?php /* @escapeNotVerified */ echo($block->getIsReadOnly() ? 'false' : 'true'); ?>; + var canEditGroups = <?php /* @escapeNotVerified */ echo($block->getIsReadOnly() ? 'false' : 'true'); ?>; + + var TreePanels = function() { + // shorthand + var Tree = Ext.tree; + + return { + init : function(){ + // yui-ext tree + + var tree = new Ext.tree.TreePanel('tree-div1', { + animate:false, + loader: false, + enableDD:allowDragAndDrop, + containerScroll: true, + rootVisible: false + }); + + // set the root node + this.root = new Ext.tree.TreeNode({ + text: 'ROOT', + allowDrug:false, + allowDrop:true, + id:'1' + }); + + tree.setRootNode(this.root); + buildCategoryTree(this.root, <?php /* @escapeNotVerified */ echo $block->getGroupTreeJson() ?>); + // render the tree + tree.render(); + this.root.expand(false, false); + tree.expandAll(); + + this.ge = new Ext.tree.TreeEditor(tree, { + allowBlank:false, + blankText:'<?php /* @escapeNotVerified */ echo __('A name is required.') ?>', + selectOnFocus:true, + cls:'folder' + }); + + this.root.addListener('beforeinsert', editSet.leftBeforeInsert); + this.root.addListener('beforeappend', editSet.leftBeforeInsert); + + //this.ge.addListener('beforerender', editSet.editGroup); + this.ge.addListener('beforeshow', editSet.editGroup); + this.ge.addListener('beforecomplete', editSet.beforeRenameGroup); + //this.ge.addListener('startedit', editSet.editGroup); + + //------------------------------------------------------------- + + var tree2 = new Ext.tree.TreePanel('tree-div2', { + animate:false, + loader: false, + enableDD:allowDragAndDrop, + containerScroll: true, + rootVisible: false, + lines:false + }); + + // set the root node + this.root2 = new Ext.tree.TreeNode({ + text: 'ROOT', + draggable:false, + id:'free' + }); + tree2.setRootNode(this.root2); + buildCategoryTree(this.root2, <?php /* @escapeNotVerified */ echo $block->getAttributeTreeJson() ?>); + + this.root2.addListener('beforeinsert', editSet.rightBeforeInsert); + this.root2.addListener('beforeappend', editSet.rightBeforeAppend); + + this.root2.addListener('append', editSet.rightAppend); + this.root2.addListener('remove', editSet.rightRemove); + // render the tree + tree2.render(); + this.root2.expand(false, false); + tree2.expandAll(); + }, + + rebuildTrees : function(){ + editSet.req.attributes = new Array(); + rootNode = TreePanels.root; + var gIterator = 0; + for( i in rootNode.childNodes ) { + if(rootNode.childNodes[i].id) { + var group = rootNode.childNodes[i]; + editSet.req.groups[gIterator] = new Array(group.id, group.attributes.text.strip(), (gIterator+1)); + var iterator = 0 + for( j in group.childNodes ) { + iterator ++; + if( group.childNodes[j].id > 0 ) { + editSet.req.attributes[group.childNodes[j].id] = new Array(group.childNodes[j].id, group.id, iterator, group.childNodes[j].attributes.entity_id); + } } + iterator = 0; } - iterator = 0; + gIterator ++; } - gIterator ++; - } - editSet.req.not_attributes = new Array(); - rootNode = TreePanels.root2; + editSet.req.not_attributes = new Array(); + rootNode = TreePanels.root2; - var iterator = 0; - for( i in rootNode.childNodes ) { - if(rootNode.childNodes[i].id) { - if( rootNode.childNodes[i].id > 0 ) { - editSet.req.not_attributes[iterator] = rootNode.childNodes[i].attributes.entity_id; + var iterator = 0; + for( i in rootNode.childNodes ) { + if(rootNode.childNodes[i].id) { + if( rootNode.childNodes[i].id > 0 ) { + editSet.req.not_attributes[iterator] = rootNode.childNodes[i].attributes.entity_id; + } + iterator ++; } - iterator ++; } } - } - }; - }(); - - function buildCategoryTree(parent, config){ - if (!config) return null; - if (parent && config && config.length){ - for (var i = 0; i < config.length; i++) { - var node = new Ext.tree.TreeNode(config[i]); - parent.appendChild(node); - node.addListener('click', editSet.register); - node.addListener('beforemove', editSet.groupBeforeMove); - node.addListener('beforeinsert', editSet.groupBeforeInsert); - node.addListener('beforeappend', editSet.groupBeforeInsert); - if( config[i].children ) { - for( j in config[i].children ) { - if(config[i].children[j].id) { - newNode = new Ext.tree.TreeNode(config[i].children[j]); - node.appendChild(newNode); - newNode.addListener('click', editSet.unregister); + }; + }(); + + function buildCategoryTree(parent, config){ + if (!config) return null; + if (parent && config && config.length){ + for (var i = 0; i < config.length; i++) { + var node = new Ext.tree.TreeNode(config[i]); + parent.appendChild(node); + node.addListener('click', editSet.register); + node.addListener('beforemove', editSet.groupBeforeMove); + node.addListener('beforeinsert', editSet.groupBeforeInsert); + node.addListener('beforeappend', editSet.groupBeforeInsert); + if( config[i].children ) { + for( j in config[i].children ) { + if(config[i].children[j].id) { + newNode = new Ext.tree.TreeNode(config[i].children[j]); + node.appendChild(newNode); + newNode.addListener('click', editSet.unregister); + } } } } } } - } - - editSet = function() { - return { - register : function(node) { - editSet.currentNode = node; - }, - unregister : function() { - editSet.currentNode = false; - }, + editSet = function() { + return { + register : function(node) { + editSet.currentNode = node; + }, - submit : function() { - if( TreePanels.root.firstChild == TreePanels.root.lastChild ) { - return; - } + unregister : function() { + editSet.currentNode = false; + }, - if( editSet.SystemNodesExists(editSet.currentNode) ) { - alert('<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('This group contains system attributes. Please move system attributes to another group and try again.')) ?>'); - return; - } + submit : function() { + if( TreePanels.root.firstChild == TreePanels.root.lastChild ) { + return; + } + if( editSet.SystemNodesExists(editSet.currentNode) ) { + alert({ + content: '<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('This group contains system attributes. Please move system attributes to another group and try again.')) ?>' + }); + return; + } - if( editSet.currentNode && editSet.currentNode.attributes.cls == 'folder' ) { - TreePanels.root.removeChild(editSet.currentNode); - for( i in editSet.currentNode.childNodes ) { - if( editSet.currentNode.childNodes[i].id ) { - child = editSet.currentNode.childNodes[i]; - newNode = new Ext.tree.TreeNode(child.attributes); + if( editSet.currentNode && editSet.currentNode.attributes.cls == 'folder' ) { + TreePanels.root.removeChild(editSet.currentNode); + for( i in editSet.currentNode.childNodes ) { + if( editSet.currentNode.childNodes[i].id ) { + child = editSet.currentNode.childNodes[i]; + newNode = new Ext.tree.TreeNode(child.attributes); - if( child.attributes.is_user_defined == 1 ) { - TreePanels.root2.appendChild(newNode); + if( child.attributes.is_user_defined == 1 ) { + TreePanels.root2.appendChild(newNode); + } } } + editSet.req.removeGroups[editSet.currentNode.id] = editSet.currentNode.id; + editSet.currentNode = false; } - editSet.req.removeGroups[editSet.currentNode.id] = editSet.currentNode.id; - editSet.currentNode = false; - } - }, - - SystemNodesExists : function(currentNode) { - for (i in currentNode.childNodes) { - if (currentNode.childNodes[i].id) { - child = editSet.currentNode.childNodes[i]; - if (child.attributes.is_unassignable != 1) { - return true; + }, + + SystemNodesExists : function(currentNode) { + for (i in currentNode.childNodes) { + if (currentNode.childNodes[i].id) { + child = editSet.currentNode.childNodes[i]; + if (child.attributes.is_unassignable != 1) { + return true; + } } } - } - }, - - rightAppend : function(node) { - return; - }, + }, - addGroup : function() { - var group_name = prompt("<?php /* @escapeNotVerified */ echo __('Please enter a new group name.') ?>",""); - if (!group_name) { + rightAppend : function(node) { return; - } - group_name = group_name.strip(); - if( group_name == '' ) { - this.addGroup(); - } else if( group_name != false && group_name != null && group_name != '' ) { + }, + + addGroup : function() { + prompt({ + content: "<?php /* @escapeNotVerified */ echo __('Please enter a new group name.') ?>", + value: "", + actions: { + confirm: function (group_name) { + group_name = group_name.strip(); + if( group_name == '' ) { + self.addGroup(); + } else if( group_name != false && group_name != null && group_name != '' ) { + + if (!editSet.validateGroupName(group_name, 0)) { + return; + } + + var newNode = new Ext.tree.TreeNode({ + text : group_name.escapeHTML(), + cls : 'folder', + allowDrop : true, + allowDrag : true + }); + TreePanels.root.appendChild(newNode); + newNode.addListener('beforemove', editSet.groupBeforeMove); + newNode.addListener('beforeinsert', editSet.groupBeforeInsert); + newNode.addListener('beforeappend', editSet.groupBeforeInsert); + newNode.addListener('click', editSet.register); + } + } + } + }); + }, - if (!editSet.validateGroupName(group_name, 0)) { - return; + editGroup : function(obj) { + if( obj.editNode.attributes.cls != 'folder' || !canEditGroups) { + TreePanels.ge.cancelEdit(); + return false; } + }, - var newNode = new Ext.tree.TreeNode({ - text : group_name.escapeHTML(), - cls : 'folder', - allowDrop : true, - allowDrag : true - }); - TreePanels.root.appendChild(newNode); - newNode.addListener('beforemove', editSet.groupBeforeMove); - newNode.addListener('beforeinsert', editSet.groupBeforeInsert); - newNode.addListener('beforeappend', editSet.groupBeforeInsert); - newNode.addListener('click', editSet.register); - } - }, - - editGroup : function(obj) { - if( obj.editNode.attributes.cls != 'folder' || !canEditGroups) { - TreePanels.ge.cancelEdit(); - return false; - } - }, + beforeRenameGroup : function(obj, after, before) { + return editSet.validateGroupName(after, obj.editNode.id); + }, - beforeRenameGroup : function(obj, after, before) { - return editSet.validateGroupName(after, obj.editNode.id); - }, + validateGroupName : function(name, exceptNodeId) { + name = name.strip(); + var result = true; + if (name === '') { + result = false; + } + for (var i=0; i < TreePanels.root.childNodes.length; i++) { + if (TreePanels.root.childNodes[i].text.toLowerCase() == name.toLowerCase() && TreePanels.root.childNodes[i].id != exceptNodeId) { + errorText = '<?php /* @escapeNotVerified */ echo __('An attribute group named "/name/" already exists".') ?>'; + alert({ + content: errorText.replace("/name/",name) + }); + result = false; + } + } + return result; + }, - validateGroupName : function(name, exceptNodeId) { - name = name.strip(); - var result = true; - if (name === '') { - result = false; - } - for (var i=0; i < TreePanels.root.childNodes.length; i++) { - if (TreePanels.root.childNodes[i].text.toLowerCase() == name.toLowerCase() && TreePanels.root.childNodes[i].id != exceptNodeId) { - errorText = '<?php /* @escapeNotVerified */ echo __('An attribute group named "/name/" already exists".') ?>'; - alert(errorText.replace("/name/",name)); - result = false; + save : function() { + if ($('messages')) { + $('messages').update(); } - } - return result; - }, + TreePanels.rebuildTrees(); + if(!jQuery('#set-prop-form').valid()) { + return; + } + editSet.req.attribute_set_name = $('attribute_set_name').value; + if (!editSet.req.form_key) { + editSet.req.form_key = FORM_KEY; + } + var req = {data : Ext.util.JSON.encode(editSet.req)}; + var con = new Ext.lib.Ajax.request('POST', '<?php /* @escapeNotVerified */ echo $block->getMoveUrl() ?>', {success:editSet.success,failure:editSet.failure}, req); + }, + + success : function(o) { + var response = Ext.util.JSON.decode(o.responseText); + if( response.error ) { + $('messages').update(response.message); + } else if( response.ajaxExpired && response.ajaxRedirect ){ + setLocation(response.ajaxRedirect); + } else if( response.url ){ + setLocation(response.url); + } else if( response.message ) { + $('messages').update(response.message); + } + }, - save : function() { - if ($('messages')) { - $('messages').update(); - } - TreePanels.rebuildTrees(); - if(!jQuery('#set-prop-form').valid()) { - return; - } - editSet.req.attribute_set_name = $('attribute_set_name').value; - if (!editSet.req.form_key) { - editSet.req.form_key = FORM_KEY; - } - var req = {data : Ext.util.JSON.encode(editSet.req)}; - var con = new Ext.lib.Ajax.request('POST', '<?php /* @escapeNotVerified */ echo $block->getMoveUrl() ?>', {success:editSet.success,failure:editSet.failure}, req); - }, - - success : function(o) { - var response = Ext.util.JSON.decode(o.responseText); - if( response.error ) { - $('messages').update(response.message); - } else if( response.ajaxExpired && response.ajaxRedirect ){ - setLocation(response.ajaxRedirect); - } else if( response.url ){ - setLocation(response.url); - } else if( response.message ) { - $('messages').update(response.message); - } - }, + failure : function(o) { + alert({ + content: '<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('Sorry, we\'re unable to complete this request.')) ?>' + }); + }, - failure : function(o) { - alert('<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('Sorry, we\'re unable to complete this request.')) ?>'); - }, + groupBeforeMove : function(tree, nodeThis, oldParent, newParent) { + if( newParent.attributes.cls == 'folder' && nodeThis.attributes.cls == 'folder' ) { + return false; + } - groupBeforeMove : function(tree, nodeThis, oldParent, newParent) { - if( newParent.attributes.cls == 'folder' && nodeThis.attributes.cls == 'folder' ) { - return false; - } + if( newParent == TreePanels.root && nodeThis.attributes.cls != 'folder' ) { + return false; + } + }, - if( newParent == TreePanels.root && nodeThis.attributes.cls != 'folder' ) { - return false; - } - }, - - rightBeforeAppend : function(tree, nodeThis, node, newParent) { - if (node.attributes.is_user_defined == 0) { - alert('<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('You can\'t remove attributes from this product template.')) ?>'); - return false; - } else { - return true; - } - }, + rightBeforeAppend : function(tree, nodeThis, node, newParent) { + if (node.attributes.is_user_defined == 0) { + alert({ + content: '<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('You can\'t remove attributes from this product template.')) ?>' + }); + return false; + } else { + return true; + } + }, - rightBeforeInsert : function(tree, nodeThis, node, newParent) { - var empty = TreePanels.root2.findChild('id', 'empty'); - if (empty) { - return false; - } + rightBeforeInsert : function(tree, nodeThis, node, newParent) { + var empty = TreePanels.root2.findChild('id', 'empty'); + if (empty) { + return false; + } - if (node.attributes.is_unassignable == 0) { - alert('<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('You can\'t remove attributes from this product template.')) ?>'); - return false; - } else { - return true; - } - }, + if (node.attributes.is_unassignable == 0) { + alert({ + content: '<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('You can\'t remove attributes from this product template.')) ?>' + }); + return false; + } else { + return true; + } + }, - groupBeforeInsert : function(tree, nodeThis, node, newParent) { - if( node.allowChildren ) { - return false; - } - }, + groupBeforeInsert : function(tree, nodeThis, node, newParent) { + if( node.allowChildren ) { + return false; + } + }, - rightAppend : function(tree, nodeThis, node) { - var empty = TreePanels.root2.findChild('id', 'empty'); - if( empty && node.id != 'empty' ) { - TreePanels.root2.removeChild(empty); - } - }, + rightAppend : function(tree, nodeThis, node) { + var empty = TreePanels.root2.findChild('id', 'empty'); + if( empty && node.id != 'empty' ) { + TreePanels.root2.removeChild(empty); + } + }, - rightRemove : function(tree, nodeThis, node) { - if( nodeThis.firstChild == null && node.id != 'empty' ) { - var newNode = new Ext.tree.TreeNode({ + rightRemove : function(tree, nodeThis, node) { + if( nodeThis.firstChild == null && node.id != 'empty' ) { + var newNode = new Ext.tree.TreeNode({ text : '<?php /* @escapeNotVerified */ echo __('Empty') ?>', id : 'empty', cls : 'folder', @@ -381,35 +401,35 @@ define("tree-panel", ["jquery", "extjs/ext-tree-checkbox", "prototype"], functio allowDrop : false, allowDrag : false }); - TreePanels.root2.appendChild(newNode); - } - }, + TreePanels.root2.appendChild(newNode); + } + }, - leftBeforeInsert : function(tree, nodeThis, node, newParent) { - if( node.allowChildren == false ) { - return false; + leftBeforeInsert : function(tree, nodeThis, node, newParent) { + if( node.allowChildren == false ) { + return false; + } } } + }(); + + function initVars() { + editSet.req = {}; + editSet.req.attributes = false; + editSet.req.groups = new Array(); + editSet.req.not_attributes = false; + editSet.req.attribute_set_name = false; + editSet.req.removeGroups = new Array(); } - }(); - - function initVars() { - editSet.req = {}; - editSet.req.attributes = false; - editSet.req.groups = new Array(); - editSet.req.not_attributes = false; - editSet.req.attribute_set_name = false; - editSet.req.removeGroups = new Array(); - } - - jQuery(function() { - initVars(); - TreePanels.init(); - }); - //]]> -}); -require(["tree-panel"]); -</script> + jQuery(function() { + initVars(); + TreePanels.init(); + }); + //]]> + + }); + require(["tree-panel"]); + </script> </div> </div> diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/wysiwyg/js.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/wysiwyg/js.phtml index c7223ed509f4d6439fa3b9b1299c9ef3de99d91e..d6db808caccad1390c65cc00264cd80a2f6c3bb2 100644 --- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/wysiwyg/js.phtml +++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/wysiwyg/js.phtml @@ -5,15 +5,15 @@ */ // @codingStandardsIgnoreFile - ?> <script> require([ "jquery", "tinymce", + "Magento_Ui/js/modal/modal", "prototype", "mage/adminhtml/events" -], function(jQuery, tinyMCE){ +], function(jQuery, tinyMCE, modal){ //<![CDATA[ @@ -21,6 +21,7 @@ Window.keepMultiModalWindow = true; var catalogWysiwygEditor = { overlayShowEffectOptions : null, overlayHideEffectOptions : null, + modal: null, open : function(editorUrl, elementId) { if (editorUrl && elementId) { jQuery.ajax({ @@ -32,43 +33,40 @@ var catalogWysiwygEditor = { showLoader: true, dataType: 'html', success: function(data, textStatus, transport) { - try { - this.openDialogWindow(data, elementId); - } catch(e) { - alert(e.message); - } + this.openDialogWindow(data, elementId); }.bind(this) }); } }, - openDialogWindow : function(content, elementId) { - this.overlayShowEffectOptions = Windows.overlayShowEffectOptions; - this.overlayHideEffectOptions = Windows.overlayHideEffectOptions; - Windows.overlayShowEffectOptions = {duration:0}; - Windows.overlayHideEffectOptions = {duration:0}; - tinyMCE.editors[elementId].save(); - Dialog.confirm(content, { - draggable:true, - resizable:true, - closable:true, - className:"magento", - windowClassName:"popup-window", - title:'WYSIWYG Editor', - width:950, - height:555, - recenterAuto:false, - hideEffect:Element.hide, - showEffect:Element.show, - id:"catalog-wysiwyg-editor", - buttonClass:"form-button", - okLabel:"Submit", - ok: this.okDialogWindow.bind(this), - cancel: this.closeDialogWindow.bind(this), - onClose: this.closeDialogWindow.bind(this), - firedElementId: elementId - }); + openDialogWindow : function(data, elementId) { + var self = this; + + if (this.modal) { + this.modal.html(jQuery(data).html()); + } else { + this.modal = jQuery(data).modal({ + title: 'WYSIWYG Editor', + modalClass: 'magento', + type: 'slide', + firedElementId: elementId, + buttons: [{ + text: 'Cancel', + click: function () { + self.closeDialogWindow(this); + } + },{ + text: 'Submit', + click: function () { + self.okDialogWindow(this); + } + }], + close: function () { + self.closeDialogWindow(this); + } + }); + } + this.modal.modal('openModal'); $(elementId + '_editor').value = $(elementId).value; - content.evalScripts.bind(content).defer(); }, okDialogWindow : function(dialogWindow) { if (dialogWindow.options.firedElementId) { @@ -104,7 +102,7 @@ var catalogWysiwygEditor = { tinyMCE.execCommand('mceRemoveControl', true, wysiwygObj.id); } - dialogWindow.close(); + dialogWindow.closeModal(); Windows.overlayShowEffectOptions = this.overlayShowEffectOptions; Windows.overlayHideEffectOptions = this.overlayHideEffectOptions; } diff --git a/app/code/Magento/Catalog/view/adminhtml/ui_component/product_listing.xml b/app/code/Magento/Catalog/view/adminhtml/ui_component/product_listing.xml index f2d00351883df6eb81f8ae1148f1d2de4af8abd1..e1bdb4dbcb9be3a0a27e23813425161228673143 100644 --- a/app/code/Magento/Catalog/view/adminhtml/ui_component/product_listing.xml +++ b/app/code/Magento/Catalog/view/adminhtml/ui_component/product_listing.xml @@ -40,17 +40,13 @@ <bookmark name="bookmarks"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/controls/bookmarks/bookmarks</item> - <item name="displayArea" xsi:type="string">dataGridActions</item> <item name="storageConfig" xsi:type="array"> - <item name="saveUrl" xsi:type="url" path="mui/bookmark/save"/> - <item name="deleteUrl" xsi:type="url" path="mui/bookmark/delete"/> <item name="namespace" xsi:type="string">product_listing</item> </item> </item> </argument> </bookmark> - <container name="columns_controls"> + <component name="columns_controls"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> <item name="component" xsi:type="string">Magento_Ui/js/grid/controls/columns</item> @@ -60,129 +56,27 @@ </item> </item> </argument> - </container> - <filters name="listing_filters" class="Magento\Catalog\Ui\Component\Listing\Filters"> + </component> + <filters name="listing_filters"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> - <item name="displayArea" xsi:type="string">dataGridFilters</item> - <item name="dataScope" xsi:type="string">filters</item> + <item name="columnsProvider" xsi:type="string">product_listing.product_listing.product_columns</item> <item name="storageConfig" xsi:type="array"> <item name="provider" xsi:type="string">product_listing.product_listing.listing_top.bookmarks</item> <item name="namespace" xsi:type="string">current.filters</item> </item> - <item name="childDefaults" xsi:type="array"> - <item name="provider" xsi:type="string">product_listing.product_listing.listing_top.listing_filters</item> - <item name="imports" xsi:type="array"> - <item name="visible" xsi:type="string">product_listing.product_listing.listing_top.bookmarks:current.columns.${ $.index }.visible</item> - </item> - </item> </item> </argument> - <filterInput name="name"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">name</item> - <item name="label" xsi:type="string" translate="true">Name</item> - </item> - </argument> - </filterInput> - <filterSelect name="type_id"> - <argument name="optionsProvider" xsi:type="configurableObject"> - <argument name="class" xsi:type="string">Magento\Catalog\Model\Product\Type</argument> - </argument> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">type_id</item> - <item name="caption" xsi:type="string" translate="true">Select...</item> - <item name="label" xsi:type="string" translate="true">Type</item> - </item> - </argument> - </filterSelect> - <filterSelect name="attribute_set_id"> - <argument name="optionsProvider" xsi:type="configurableObject"> - <argument name="class" xsi:type="string">Magento\Catalog\Model\Product\AttributeSet\Options</argument> - </argument> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">attribute_set_id</item> - <item name="caption" xsi:type="string" translate="true">Select...</item> - <item name="label" xsi:type="string" translate="true">Attribute Set</item> - </item> - </argument> - </filterSelect> - <filterInput name="sku"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">sku</item> - <item name="label" xsi:type="string" translate="true">SKU</item> - </item> - </argument> - </filterInput> - <filterRange name="price"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">price</item> - <item name="label" xsi:type="string" translate="true">Price</item> - <item name="childDefaults" xsi:type="array"> - <item name="provider" xsi:type="string">product_listing.product_listing.listing_top.listing_filters</item> - </item> - </item> - </argument> - <filterInput name="from"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">from</item> - <item name="label" xsi:type="string" translate="true">from</item> - <item name="placeholder" xsi:type="string" translate="true">From</item> - </item> - </argument> - </filterInput> - <filterInput name="to"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">to</item> - <item name="label" xsi:type="string" translate="true">to</item> - <item name="placeholder" xsi:type="string" translate="true">To</item> - </item> - </argument> - </filterInput> - </filterRange> - <filterSelect name="visibility"> - <argument name="optionsProvider" xsi:type="configurableObject"> - <argument name="class" xsi:type="string">Magento\Catalog\Model\Product\Visibility</argument> - </argument> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">visibility</item> - <item name="caption" xsi:type="string" translate="true">Select...</item> - <item name="label" xsi:type="string" translate="true">Visibility</item> - </item> - </argument> - </filterSelect> - <filterSelect name="status"> - <argument name="optionsProvider" xsi:type="configurableObject"> - <argument name="class" xsi:type="string">Magento\Catalog\Model\Product\Attribute\Source\Status</argument> - </argument> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">status</item> - <item name="caption" xsi:type="string" translate="true">Select...</item> - <item name="label" xsi:type="string" translate="true">Status</item> - </item> - </argument> - </filterSelect> <filterSelect name="store_id"> <argument name="optionsProvider" xsi:type="configurableObject"> <argument name="class" xsi:type="string">Magento\Store\Ui\Component\Listing\Column\Store\Options</argument> </argument> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> + <item name="provider" xsi:type="string">product_listing.product_listing.listing_top.listing_filters</item> <item name="dataScope" xsi:type="string">store_id</item> - <item name="caption" xsi:type="string" translate="true">Select...</item> + <item name="caption" xsi:type="string" translate="true">All Store Views</item> <item name="label" xsi:type="string" translate="true">Store View</item> - <item name="imports" xsi:type="array"> - <item name="visible" xsi:type="string"></item> - </item> </item> </argument> </filterSelect> @@ -192,7 +86,6 @@ <item name="config" xsi:type="array"> <item name="selectProvider" xsi:type="string">product_listing.product_listing.product_columns.ids</item> <item name="component" xsi:type="string">Magento_Ui/js/grid/tree-massactions</item> - <item name="displayArea" xsi:type="string">bottom</item> <item name="indexField" xsi:type="string">entity_id</item> </item> </argument> @@ -251,7 +144,6 @@ <item name="provider" xsi:type="string">product_listing.product_listing.listing_top.bookmarks</item> <item name="namespace" xsi:type="string">current.paging</item> </item> - <item name="displayArea" xsi:type="string">bottom</item> </item> </argument> </paging> @@ -272,7 +164,6 @@ <item name="1" xsi:type="string">${ $.$data.rowIndex }</item> </item> </item> - <item name="controlVisibility" xsi:type="boolean">true</item> <item name="storageConfig" xsi:type="array"> <item name="provider" xsi:type="string">product_listing.product_listing.listing_top.bookmarks</item> <item name="root" xsi:type="string">columns.${ $.index }</item> @@ -281,27 +172,19 @@ </item> </item> </argument> - <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column"> + <selectionsColumn name="ids"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item> - </item> <item name="config" xsi:type="array"> - <item name="controlVisibility" xsi:type="boolean">false</item> <item name="indexField" xsi:type="string">entity_id</item> <item name="sortOrder" xsi:type="number">0</item> </item> </argument> - </column> + </selectionsColumn> <column name="entity_id"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> - <item name="dataType" xsi:type="string">text</item> + <item name="filter" xsi:type="string">textRange</item> <item name="sorting" xsi:type="string">asc</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">ID</item> <item name="sortOrder" xsi:type="number">10</item> </item> @@ -309,16 +192,12 @@ </column> <column name="thumbnail" class="Magento\Catalog\Ui\Component\Listing\Columns\Thumbnail"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/thumbnail</item> - </item> <item name="config" xsi:type="array"> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/thumbnail</item> <item name="add_field" xsi:type="boolean">true</item> <item name="sortable" xsi:type="boolean">false</item> <item name="altField" xsi:type="string">name</item> <item name="has_preview" xsi:type="string">1</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Thumbnail</item> <item name="sortOrder" xsi:type="number">20</item> </item> @@ -326,13 +205,9 @@ </column> <column name="name"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">text</item> <item name="add_field" xsi:type="boolean">true</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Name</item> <item name="sortOrder" xsi:type="number">30</item> </item> @@ -341,12 +216,10 @@ <column name="type_id"> <argument name="data" xsi:type="array"> <item name="options" xsi:type="object">Magento\Catalog\Model\Product\Type</item> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">select</item> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> <item name="dataType" xsi:type="string">select</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Type</item> <item name="sortOrder" xsi:type="number">40</item> </item> @@ -355,12 +228,10 @@ <column name="attribute_set_id"> <argument name="data" xsi:type="array"> <item name="options" xsi:type="object">Magento\Catalog\Model\Product\AttributeSet\Options</item> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">select</item> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> <item name="dataType" xsi:type="string">select</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Attribute Set</item> <item name="sortOrder" xsi:type="number">50</item> </item> @@ -368,12 +239,8 @@ </column> <column name="sku"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="filter" xsi:type="string">text</item> <item name="label" xsi:type="string" translate="true">SKU</item> <item name="sortOrder" xsi:type="number">60</item> </item> @@ -381,13 +248,9 @@ </column> <column name="price" class="Magento\Catalog\Ui\Component\Listing\Columns\Price"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">textRange</item> <item name="add_field" xsi:type="boolean">true</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Price</item> <item name="sortOrder" xsi:type="number">70</item> </item> @@ -396,13 +259,11 @@ <column name="visibility"> <argument name="data" xsi:type="array"> <item name="options" xsi:type="object">Magento\Catalog\Model\Product\Visibility</item> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">select</item> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> <item name="add_field" xsi:type="boolean">true</item> <item name="dataType" xsi:type="string">select</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Visibility</item> <item name="sortOrder" xsi:type="number">80</item> </item> @@ -411,46 +272,35 @@ <column name="status"> <argument name="data" xsi:type="array"> <item name="options" xsi:type="object">Magento\Catalog\Model\Product\Attribute\Source\Status</item> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">select</item> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> <item name="add_field" xsi:type="boolean">true</item> <item name="dataType" xsi:type="string">select</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Status</item> <item name="sortOrder" xsi:type="number">90</item> </item> </argument> </column> - <column name="websites" class="Magento\Catalog\Ui\Component\Listing\Columns\Websites"> + <column name="websites"> <argument name="data" xsi:type="array"> <item name="options" xsi:type="object">Magento\Store\Model\ResourceModel\Website\Collection</item> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> <item name="add_field" xsi:type="boolean">true</item> <item name="dataType" xsi:type="string">select</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Websites</item> <item name="sortOrder" xsi:type="number">100</item> </item> </argument> </column> - <column name="actions" class="Magento\Catalog\Ui\Component\Listing\Columns\ProductActions"> + <actionsColumn name="actions" class="Magento\Catalog\Ui\Component\Listing\Columns\ProductActions"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> + <item name="indexField" xsi:type="string">entity_id</item> <item name="sortOrder" xsi:type="number">200</item> - <item name="dataType" xsi:type="string">actions</item> - <item name="align" xsi:type="string">left</item> - <item name="label" xsi:type="string" translate="true">Action</item> - <item name="data_type" xsi:type="string">actions</item> - <item name="filterable" xsi:type="boolean">false</item> - <item name="sortable" xsi:type="boolean">false</item> - <item name="draggable" xsi:type="boolean">false</item> </item> </argument> - </column> + </actionsColumn> </columns> </listing> diff --git a/app/code/Magento/Catalog/view/adminhtml/web/catalog/base-image-uploader.js b/app/code/Magento/Catalog/view/adminhtml/web/catalog/base-image-uploader.js index 17b5f95205fdfaeb6269c411d2c254b838060e51..de62ea60219a74287c9d2846849f8a9d297a1c08 100644 --- a/app/code/Magento/Catalog/view/adminhtml/web/catalog/base-image-uploader.js +++ b/app/code/Magento/Catalog/view/adminhtml/web/catalog/base-image-uploader.js @@ -6,11 +6,12 @@ define([ 'jquery', 'mage/template', + 'Magento_Ui/js/modal/alert', 'jquery/ui', 'jquery/file-uploader', 'mage/translate', 'mage/backend/notification' -], function ($, mageTemplate) { +], function ($, mageTemplate, alert) { 'use strict'; $.widget('mage.baseImage', { @@ -131,7 +132,9 @@ define([ if (!data.result.error) { $galleryContainer.trigger('addItem', data.result); } else { - alert($.mage.__('We don\'t recognize or support this file extension type.')); + alert({ + content: $.mage.__('We don\'t recognize or support this file extension type.') + }); } }, change: function(e, data) { diff --git a/app/code/Magento/Catalog/view/adminhtml/web/catalog/category/form.js b/app/code/Magento/Catalog/view/adminhtml/web/catalog/category/form.js index 0d5be338a5a7a6ff1be672387a408459ca7ebfff..eaa65160561c9f589d1aaf2e2738a843d80069f0 100644 --- a/app/code/Magento/Catalog/view/adminhtml/web/catalog/category/form.js +++ b/app/code/Magento/Catalog/view/adminhtml/web/catalog/category/form.js @@ -6,10 +6,11 @@ /*global Ajax:true alert:true*/ define([ "jquery", + 'Magento_Ui/js/modal/alert', "mage/backend/form", "jquery/ui", "prototype" -], function($){ +], function($, alert){ "use strict"; $.widget("mage.categoryForm", $.mage.form, { @@ -55,7 +56,9 @@ define([ if (transport.responseText.isJSON()) { var response = transport.responseText.evalJSON(); if (response.error) { - alert(response.message); + alert({ + content: response.message + }); } else { if (this.element.find(this.options.categoryIdSelector).prop('value') == response.id) { this.element.find(this.options.categoryPathSelector) diff --git a/app/code/Magento/Catalog/view/adminhtml/web/catalog/product-attributes.js b/app/code/Magento/Catalog/view/adminhtml/web/catalog/product-attributes.js index f4624937f02556dc18dd44e07c6a6da77088de4f..b48cfec50ea7bb56bc379d4c68751745506934a6 100644 --- a/app/code/Magento/Catalog/view/adminhtml/web/catalog/product-attributes.js +++ b/app/code/Magento/Catalog/view/adminhtml/web/catalog/product-attributes.js @@ -4,8 +4,9 @@ */ define([ 'jquery', + 'underscore', 'jquery/ui' -], function ($) { +], function ($, _) { 'use strict'; $.widget('mage.productAttributes', { @@ -15,74 +16,69 @@ define([ }); }, - _prepareUrl: function () { - var name = $('[data-role=product-attribute-search]').val(); + _initModal: function () { + var self = this; - return this.options.url + - (/\?/.test(this.options.url) ? '&' : '?') + - 'set=' + $('#attribute_set_id').val() + - '&attribute[frontend_label]=' + - window.encodeURIComponent(name); - }, - - _showPopup: function (event) { - var wrapper, - iframe; - - wrapper = $('<div id="create_new_attribute"/>').appendTo('body').dialog({ - // ToDo: refactor to a sliding panel + this.modal = $('<div id="create_new_attribute"/>').modal({ title: 'New Attribute', - width: '75%', - minHeight: 650, - modal: true, - resizable: false, - resizeStop: function () { - iframe.height($(this).outerHeight() + 'px'); - iframe.width($(this).outerWidth() + 'px'); + type: 'slide', + buttons: [], + opened: function () { + self.iframe = $('<iframe id="create_new_attribute_container">').attr({ + src: self._prepareUrl(), + frameborder: 0 + }); + self.modal.append(self.iframe); + self._changeIframeSize(); + $(window).off().on('resize', _.debounce(self._changeIframeSize.bind(self), 400)); }, - position: { - my: 'left top', - at: 'center top', - of: 'body' - }, - open: function () { - $(this).closest('.ui-dialog').addClass('ui-dialog-active'); + closed: function () { + var doc = self.iframe.get(0).document; - var topMargin = jQuery(this).closest('.ui-dialog').children('.ui-dialog-titlebar').outerHeight() + 45; - jQuery(this).closest('.ui-dialog').css('margin-top', topMargin); - }, - close: function () { - $(this).closest('.ui-dialog').removeClass('ui-dialog-active'); + if (doc && $.isFunction(doc.execCommand)) { + //IE9 break script loading but not execution on iframe removing + doc.execCommand('stop'); + self.iframe.remove(); + } + self.modal.data('modal').modal.remove(); } }); + }, - iframe = $('<iframe id="create_new_attribute_container">').attr({ - src: this._prepareUrl(event), - frameborder: 0, - style: 'position:absolute;top:58px;left:0px;right:0px;bottom:0px' - }); + _getHeight: function () { + var modal = this.modal.data('modal').modal, + modalHead = modal.find('header'), + modalHeadHeight = modalHead.outerHeight(), + modalHeight = modal.outerHeight(), + modalContentPadding = this.modal.parent().outerHeight() - this.modal.parent().height(); - iframe.on('load', function () { - $(this).css({ - height: wrapper.outerHeight() + 'px', - width: wrapper.outerWidth() + 'px' - }); - }); + return modalHeight - modalHeadHeight - modalContentPadding; + }, - wrapper.append(iframe); + _getWidth: function () { + return this.modal.width(); + }, - wrapper.on('dialogclose', function () { - var dialog = this, - doc = iframe.get(0).document; + _changeIframeSize: function () { + this.modal.parent().outerHeight(this._getHeight()); + this.iframe.outerHeight(this._getHeight()); + this.iframe.outerWidth(this._getWidth()); - if (doc && $.isFunction(doc.execCommand)) { - //IE9 break script loading but not execution on iframe removing - doc.execCommand('stop'); - iframe.remove(); - } + }, - $(dialog).remove(); - }); + _prepareUrl: function () { + var name = $('[data-role=product-attribute-search]').val(); + + return this.options.url + + (/\?/.test(this.options.url) ? '&' : '?') + + 'set=' + $('#attribute_set_id').val() + + '&attribute[frontend_label]=' + + window.encodeURIComponent(name); + }, + + _showPopup: function () { + this._initModal(); + this.modal.modal('openModal'); } }); diff --git a/app/code/Magento/Catalog/view/adminhtml/web/catalog/product/composite/configure.js b/app/code/Magento/Catalog/view/adminhtml/web/catalog/product/composite/configure.js index 648632e2aacbe36150e3c99e4a9d22df2f136e8c..030962f2f06413a56129efbbbc6aa3c6d8b4830a 100644 --- a/app/code/Magento/Catalog/view/adminhtml/web/catalog/product/composite/configure.js +++ b/app/code/Magento/Catalog/view/adminhtml/web/catalog/product/composite/configure.js @@ -6,651 +6,627 @@ define([ "jquery", "jquery/ui", "mage/translate", - "prototype" + "prototype", + 'Magento_Ui/js/modal/modal' ], function(jQuery){ -window.ProductConfigure = Class.create(); - -ProductConfigure.prototype = { - - listTypes: $H({}), - current: $H({}), - itemsFilter: $H({}), - blockWindow: null, - blockForm: null, - blockFormFields: null, - blockFormAdd: null, - blockFormConfirmed: null, - blockConfirmed: null, - blockIFrame: null, - blockCancelBtn: null, - blockMask: null, - blockMsg: null, - blockMsgError: null, - windowHeight: null, - confirmedCurrentId: null, - confirmCallback: {}, - cancelCallback: {}, - onLoadIFrameCallback: {}, - showWindowCallback: {}, - beforeSubmitCallback: {}, - iFrameJSVarname: null, - _listTypeId: 1, - - /** - * Initialize object - */ - initialize: function() { - this._initWindowElements(); - var self = this; - this.dialog = jQuery('#product_composite_configure').dialog({ - autoOpen: false, - title: jQuery.mage.__('Configure Product'), - modal: true, - minWidth: 500, - width: '75%', - dialogClass: 'popup-window', - position: { - my: 'left top', - at: 'center top', - of: 'body' - }, - open: function () { - jQuery(this).addClass('magento_message').css('max-height', '500px'); - jQuery(this).closest('.ui-dialog').addClass('ui-dialog-active'); - - var topMargin = jQuery(this).closest('.ui-dialog').children('.ui-dialog-titlebar').outerHeight() + 30; - jQuery(this).closest('.ui-dialog').css('margin-top', topMargin); - }, - close: function() { - jQuery(this).closest('.ui-dialog').removeClass('ui-dialog-active'); - }, - buttons: [{ - text: jQuery.mage.__('OK'), - 'class': 'action-primary', - click: function() { - self.onConfirmBtn(); - } - }, { - id: "product_composite_configure_form_cancel", - text: "Cancel", - 'class': 'action-close', - click: function() { - jQuery(this).dialog("close"); - } - }] - }); - }, - - /** - * Initialize window elements - */ - _initWindowElements: function() { - this.blockWindow = $('product_composite_configure'); - this.blockForm = $('product_composite_configure_form'); - this.blockFormFields = $('product_composite_configure_form_fields'); - this.blockFormAdd = $('product_composite_configure_form_additional'); - this.blockFormConfirmed = $('product_composite_configure_form_confirmed'); - this.blockConfirmed = $('product_composite_configure_confirmed'); - this.blockIFrame = $('product_composite_configure_iframe'); - this.blockCancelBtn = $('product_composite_configure_form_cancel'); - this.blockMsg = $('product_composite_configure_messages'); - this.blockMsgError = this.blockMsg.select('.message.error div')[0]; - this.iFrameJSVarname = this.blockForm.select('input[name="as_js_varname"]')[0].value; - }, - - /** - * Returns next unique list type id - */ - _generateListTypeId: function () { - return '_internal_lt_' + (this._listTypeId++); - }, - - /** - * Add product list types as scope and their urls - * expamle: addListType('product_to_add', {urlFetch: 'http://magento...'}) - * expamle: addListType('wishlist', {urlSubmit: 'http://magento...'}) - * - * @param type types as scope - * @param urls obj can be - * - {urlFetch: 'http://magento...'} for fetching configuration fields through ajax - * - {urlConfirm: 'http://magento...'} for submit configured data through iFrame when clicked confirm button - * - {urlSubmit: 'http://magento...'} for submit configured data through iFrame - */ - addListType: function(type, urls) { - if ('undefined' == typeof this.listTypes[type]) { + window.ProductConfigure = Class.create(); + + ProductConfigure.prototype = { + + listTypes: $H({}), + current: $H({}), + itemsFilter: $H({}), + blockWindow: null, + blockForm: null, + blockFormFields: null, + blockFormAdd: null, + blockFormConfirmed: null, + blockConfirmed: null, + blockIFrame: null, + blockCancelBtn: null, + blockMask: null, + blockMsg: null, + blockMsgError: null, + windowHeight: null, + confirmedCurrentId: null, + confirmCallback: {}, + cancelCallback: {}, + onLoadIFrameCallback: {}, + showWindowCallback: {}, + beforeSubmitCallback: {}, + iFrameJSVarname: null, + _listTypeId: 1, + + /** + * Initialize object + */ + initialize: function() { + var self = this; + + this._initWindowElements(); + this.dialog = jQuery('#product_composite_configure').modal({ + title: jQuery.mage.__('Configure Product'), + type: 'slide', + buttons: [{ + text: jQuery.mage.__('OK'), + 'class': 'action-primary', + click: function () { + self.onConfirmBtn(); + } + }] + }); + }, + + /** + * Initialize window elements + */ + _initWindowElements: function() { + this.blockWindow = $('product_composite_configure'); + this.blockForm = $('product_composite_configure_form'); + this.blockFormFields = $('product_composite_configure_form_fields'); + this.blockFormAdd = $('product_composite_configure_form_additional'); + this.blockFormConfirmed = $('product_composite_configure_form_confirmed'); + this.blockConfirmed = $('product_composite_configure_confirmed'); + this.blockIFrame = $('product_composite_configure_iframe'); + this.blockCancelBtn = $('product_composite_configure_form_cancel'); + this.blockMsg = $('product_composite_configure_messages'); + this.blockMsgError = this.blockMsg.select('.message.error div')[0]; + this.iFrameJSVarname = this.blockForm.select('input[name="as_js_varname"]')[0].value; + }, + + /** + * Returns next unique list type id + */ + _generateListTypeId: function () { + return '_internal_lt_' + (this._listTypeId++); + }, + + /** + * Add product list types as scope and their urls + * expamle: addListType('product_to_add', {urlFetch: 'http://magento...'}) + * expamle: addListType('wishlist', {urlSubmit: 'http://magento...'}) + * + * @param type types as scope + * @param urls obj can be + * - {urlFetch: 'http://magento...'} for fetching configuration fields through ajax + * - {urlConfirm: 'http://magento...'} for submit configured data through iFrame when clicked confirm button + * - {urlSubmit: 'http://magento...'} for submit configured data through iFrame + */ + addListType: function(type, urls) { + if ('undefined' == typeof this.listTypes[type]) { + this.listTypes[type] = {}; + } + Object.extend(this.listTypes[type], urls); + return this; + }, + + /** + * Adds complex list type - that is used to submit several list types at once + * Only urlSubmit is possible for this list type + * expamle: addComplexListType(['wishlist', 'product_list'], 'http://magento...') + * + * @param type types as scope + * @param urls obj can be + * - {urlSubmit: 'http://magento...'} for submit configured data through iFrame + * @return type string + */ + addComplexListType: function(types, urlSubmit) { + var type = this._generateListTypeId(); this.listTypes[type] = {}; - } - Object.extend(this.listTypes[type], urls); - return this; - }, - - /** - * Adds complex list type - that is used to submit several list types at once - * Only urlSubmit is possible for this list type - * expamle: addComplexListType(['wishlist', 'product_list'], 'http://magento...') - * - * @param type types as scope - * @param urls obj can be - * - {urlSubmit: 'http://magento...'} for submit configured data through iFrame - * @return type string - */ - addComplexListType: function(types, urlSubmit) { - var type = this._generateListTypeId(); - this.listTypes[type] = {}; - this.listTypes[type].complexTypes = types; - this.listTypes[type].urlSubmit = urlSubmit; - return type; - }, - - /** - * Add filter of items - * - * @param listType scope name - * @param itemsFilter - */ - addItemsFilter: function(listType, itemsFilter) { - if (!listType || !itemsFilter) { - return false; - } - if ('undefined' == typeof this.itemsFilter[listType]) { - this.itemsFilter[listType] = []; - } - this.itemsFilter[listType] = this.itemsFilter[listType].concat(itemsFilter); - return this; - }, - - /** - * Returns id of block where configuration for an item is stored - * - * @param listType scope name - * @param itemId - * @return string - */ - _getConfirmedBlockId: function (listType, itemId) { - return this.blockConfirmed.id + '[' + listType + '][' + itemId + ']'; - }, - - /** - * Checks whether item has some configuration fields - * - * @param listType scope name - * @param itemId - * @return bool - */ - itemConfigured: function (listType, itemId) { - var confirmedBlockId = this._getConfirmedBlockId(listType, itemId); - var itemBlock = $(confirmedBlockId); - return !!(itemBlock && itemBlock.innerHTML); - }, - - /** - * Show configuration fields of item, if it not found then get it through ajax - * - * @param listType scope name - * @param itemId - */ - showItemConfiguration: function(listType, itemId) { - if (!listType || !itemId) { - return false; - } + this.listTypes[type].complexTypes = types; + this.listTypes[type].urlSubmit = urlSubmit; + return type; + }, - this.initialize(); - this.current.listType = listType; - this.current.itemId = itemId; - this.confirmedCurrentId = this._getConfirmedBlockId(listType, itemId); + /** + * Add filter of items + * + * @param listType scope name + * @param itemsFilter + */ + addItemsFilter: function(listType, itemsFilter) { + if (!listType || !itemsFilter) { + return false; + } + if ('undefined' == typeof this.itemsFilter[listType]) { + this.itemsFilter[listType] = []; + } + this.itemsFilter[listType] = this.itemsFilter[listType].concat(itemsFilter); + return this; + }, - if (!this.itemConfigured(listType, itemId)) { - this._requestItemConfiguration(listType, itemId); - } else { - this._processFieldsData('item_restore'); - this._showWindow(); - } - }, - - /** - * Get configuration fields of product through ajax and show them - * - * @param listType scope name - * @param itemId - */ - _requestItemConfiguration: function(listType, itemId) { - if (!this.listTypes[listType].urlFetch) { - return false; - } - var url = this.listTypes[listType].urlFetch; - if (url) { - new Ajax.Request(url, { - parameters: {id: itemId}, - onSuccess: function(transport) { - var response = transport.responseText; - if (response.isJSON()) { - response = response.evalJSON(); - if (response.error) { - this.blockMsg.show(); - this.blockMsgError.innerHTML = response.message; - this.blockCancelBtn.hide(); - this.setConfirmCallback(listType, null); - this._showWindow(); - } - } else if (response) { - response = response + ''; - this.blockFormFields.update(response); + /** + * Returns id of block where configuration for an item is stored + * + * @param listType scope name + * @param itemId + * @return string + */ + _getConfirmedBlockId: function (listType, itemId) { + return this.blockConfirmed.id + '[' + listType + '][' + itemId + ']'; + }, - // Add special div to hold mage data, e.g. scripts to execute on every popup show - var mageData = {}; - var scripts = response.extractScripts(); - mageData.scripts = scripts; + /** + * Checks whether item has some configuration fields + * + * @param listType scope name + * @param itemId + * @return bool + */ + itemConfigured: function (listType, itemId) { + var confirmedBlockId = this._getConfirmedBlockId(listType, itemId); + var itemBlock = $(confirmedBlockId); + return !!(itemBlock && itemBlock.innerHTML); + }, - var scriptHolder = new Element('div', {'style': 'display:none'}); - scriptHolder.mageData = mageData; - this.blockFormFields.insert(scriptHolder); + /** + * Show configuration fields of item, if it not found then get it through ajax + * + * @param listType scope name + * @param itemId + */ + showItemConfiguration: function(listType, itemId) { + if (!listType || !itemId) { + return false; + } - // Show window - this._showWindow(); - } - }.bind(this) - }); - } - }, - - /** - * Triggered on confirm button click - * Do submit configured data through iFrame if needed - */ - onConfirmBtn: function() { - if (jQuery(this.blockForm).valid()) { - if (this.listTypes[this.current.listType].urlConfirm) { - this.submit(); + this.initialize(); + this.current.listType = listType; + this.current.itemId = itemId; + this.confirmedCurrentId = this._getConfirmedBlockId(listType, itemId); + + if (!this.itemConfigured(listType, itemId)) { + this._requestItemConfiguration(listType, itemId); } else { - this._processFieldsData('item_confirm'); - this._closeWindow(); - if (Object.isFunction(this.confirmCallback[this.current.listType])) { - this.confirmCallback[this.current.listType](); - } + this._processFieldsData('item_restore'); + this._showWindow(); } - } - return this; - }, - - /** - * Triggered on cancel button click - */ - onCancelBtn: function() { - this._closeWindow(); - if (Object.isFunction(this.cancelCallback[this.current.listType])) { - this.cancelCallback[this.current.listType](); - } - return this; - }, - - /** - * Submit configured data through iFrame - * - * @param listType scope name - */ - submit: function (listType) { - // prepare data - if (listType) { - this.current.listType = listType; - this.current.itemId = null; - } - var urlConfirm = this.listTypes[this.current.listType].urlConfirm; - var urlSubmit = this.listTypes[this.current.listType].urlSubmit; - if (!urlConfirm && !urlSubmit) { - return false; - } - if (urlConfirm) { - this.blockForm.action = urlConfirm; - this.addFields([new Element('input', {type: 'hidden', name: 'id', value: this.current.itemId})]); - } else { - this.blockForm.action = urlSubmit; - - var complexTypes = this.listTypes[this.current.listType].complexTypes; - if (complexTypes) { - this.addFields([new Element('input', {type: 'hidden', name: 'configure_complex_list_types', value: complexTypes.join(',')})]); + }, + + /** + * Get configuration fields of product through ajax and show them + * + * @param listType scope name + * @param itemId + */ + _requestItemConfiguration: function(listType, itemId) { + if (!this.listTypes[listType].urlFetch) { + return false; } + var url = this.listTypes[listType].urlFetch; + if (url) { + new Ajax.Request(url, { + parameters: {id: itemId}, + onSuccess: function(transport) { + var response = transport.responseText; + if (response.isJSON()) { + response = response.evalJSON(); + if (response.error) { + this.blockMsg.show(); + this.blockMsgError.innerHTML = response.message; + this.blockCancelBtn.hide(); + this.setConfirmCallback(listType, null); + this._showWindow(); + } + } else if (response) { + response = response + ''; + this.blockFormFields.update(response); - this._processFieldsData('current_confirmed_to_form'); + // Add special div to hold mage data, e.g. scripts to execute on every popup show + var mageData = {}; + var scripts = response.extractScripts(); + mageData.scripts = scripts; - // Disable item controls that duplicate added fields (e.g. sometimes qty controls can intersect) - // so they won't be submitted - var tagNames = ['input', 'select', 'textarea']; + var scriptHolder = new Element('div', {'style': 'display:none'}); + scriptHolder.mageData = mageData; + this.blockFormFields.insert(scriptHolder); - var names = {}; // Map of added field names - for (var i = 0, len = tagNames.length; i < len; i++) { - var tagName = tagNames[i]; - var elements = this.blockFormAdd.getElementsByTagName(tagName); - for (var index = 0, elLen = elements.length; index < elLen; index++) { - names[elements[index].name] = true; - } + // Show window + this._showWindow(); + } + }.bind(this) + }); } + }, - for (var i = 0, len = tagNames.length; i < len; i++) { - var tagName = tagNames[i]; - var elements = this.blockFormConfirmed.getElementsByTagName(tagName); - for (var index = 0, elLen = elements.length; index < elLen; index++) { - var element = elements[index]; - if (names[element.name]) { - element.setAttribute('configure_disabled', 1); - element.setAttribute('configure_prev_disabled', element.disabled ? 1 : 0); - element.disabled = true; - } else { - element.setAttribute('configure_disabled', 0); - } - } - } - } - // do submit - if (Object.isFunction(this.beforeSubmitCallback[this.current.listType])) { - this.beforeSubmitCallback[this.current.listType](); - } - this.blockForm.submit(); - - // Show loader - jQuery(this.blockForm).trigger('processStart'); - - return this; - }, - - /** - * Add dynamically additional fields for form - * - * @param fields - */ - addFields: function(fields) { - fields.each(function(elm) { - this.blockFormAdd.insert(elm); - }.bind(this)); - return this; - }, - - /** - * Triggered when form was submitted and iFrame was loaded. Get response from iFrame and handle it - */ - onLoadIFrame: function() { - this.blockFormConfirmed.select('[configure_disabled=1]').each(function (element) { - element.disabled = element.getAttribute('configure_prev_disabled') == '1'; - }); - - this._processFieldsData('form_confirmed_to_confirmed'); - - var response = this.blockIFrame.contentWindow[this.iFrameJSVarname]; - if (response && "object" == typeof response) { - if (this.listTypes[this.current.listType].urlConfirm) { - if (response.ok) { + /** + * Triggered on confirm button click + * Do submit configured data through iFrame if needed + */ + onConfirmBtn: function() { + if (jQuery(this.blockForm).valid()) { + if (this.listTypes[this.current.listType].urlConfirm) { + this.submit(); + } else { + this._processFieldsData('item_confirm'); this._closeWindow(); - this.clean('current'); - } else if (response.error) { - this.showItemConfiguration(this.current.listType, this.current.itemId); - this.blockMsg.show(); - this.blockMsgError.innerHTML = response.message; - this._showWindow(); - return false; + if (Object.isFunction(this.confirmCallback[this.current.listType])) { + this.confirmCallback[this.current.listType](); + } } } - if (Object.isFunction(this.onLoadIFrameCallback[this.current.listType])) { - this.onLoadIFrameCallback[this.current.listType](response); + return this; + }, + + /** + * Triggered on cancel button click + */ + onCancelBtn: function() { + this._closeWindow(); + if (Object.isFunction(this.cancelCallback[this.current.listType])) { + this.cancelCallback[this.current.listType](); } - document.fire(this.current.listType + ':afterIFrameLoaded'); - } - // Hide loader - jQuery(this.blockForm).trigger('processStop'); - - this.clean('current'); - this.initialize(); - }, - - /** - * Helper for fetching content from iFrame - */ - _getIFrameContent: function() { - var content = (this.blockIFrame.contentWindow || this.blockIFrame.contentDocument); - if (content.document) { - content=content.document; - } - return content; - }, - - /** - * Helper to find qty of currently confirmed item - */ - getCurrentConfirmedQtyElement: function() { - var elms = $(this.confirmedCurrentId).getElementsByTagName('input'); - for (var i = 0; i < elms.length; i++) { - if (elms[i].name == 'qty') { - return elms[i]; + return this; + }, + + /** + * Submit configured data through iFrame + * + * @param listType scope name + */ + submit: function (listType) { + // prepare data + if (listType) { + this.current.listType = listType; + this.current.itemId = null; } - } - }, - - /** - * Helper to find qty of active form - */ - getCurrentFormQtyElement: function() { - var elms = this.blockFormFields.getElementsByTagName('input'); - for (var i = 0; i < elms.length; i++) { - if (elms[i].name == 'qty') { - return elms[i]; + var urlConfirm = this.listTypes[this.current.listType].urlConfirm; + var urlSubmit = this.listTypes[this.current.listType].urlSubmit; + if (!urlConfirm && !urlSubmit) { + return false; } - } - }, + if (urlConfirm) { + this.blockForm.action = urlConfirm; + this.addFields([new Element('input', {type: 'hidden', name: 'id', value: this.current.itemId})]); + } else { + this.blockForm.action = urlSubmit; - /** - * Show configuration window - */ - _showWindow: function() { - this.dialog.dialog('open'); - //this._toggleSelectsExceptBlock(false); + var complexTypes = this.listTypes[this.current.listType].complexTypes; + if (complexTypes) { + this.addFields([new Element('input', {type: 'hidden', name: 'configure_complex_list_types', value: complexTypes.join(',')})]); + } - if (Object.isFunction(this.showWindowCallback[this.current.listType])) { - this.showWindowCallback[this.current.listType](); - } - }, - - /** - * toggles Selects states (for IE) except those to be shown in popup - */ - /*_toggleSelectsExceptBlock: function(flag) { - if(Prototype.Browser.IE){ - if (this.blockForm) { - var states = new Array; - var selects = this.blockForm.getElementsByTagName("select"); - for(var i=0; i<selects.length; i++){ - states[i] = selects[i].style.visibility + this._processFieldsData('current_confirmed_to_form'); + + // Disable item controls that duplicate added fields (e.g. sometimes qty controls can intersect) + // so they won't be submitted + var tagNames = ['input', 'select', 'textarea']; + + var names = {}; // Map of added field names + for (var i = 0, len = tagNames.length; i < len; i++) { + var tagName = tagNames[i]; + var elements = this.blockFormAdd.getElementsByTagName(tagName); + for (var index = 0, elLen = elements.length; index < elLen; index++) { + names[elements[index].name] = true; + } } + + for (var i = 0, len = tagNames.length; i < len; i++) { + var tagName = tagNames[i]; + var elements = this.blockFormConfirmed.getElementsByTagName(tagName); + for (var index = 0, elLen = elements.length; index < elLen; index++) { + var element = elements[index]; + if (names[element.name]) { + element.setAttribute('configure_disabled', 1); + element.setAttribute('configure_prev_disabled', element.disabled ? 1 : 0); + element.disabled = true; + } else { + element.setAttribute('configure_disabled', 0); + } + } + } + } + // do submit + if (Object.isFunction(this.beforeSubmitCallback[this.current.listType])) { + this.beforeSubmitCallback[this.current.listType](); } - if (this.blockForm) { - for(i=0; i<selects.length; i++){ - selects[i].style.visibility = states[i] + this.blockForm.submit(); + + // Show loader + jQuery(this.blockForm).trigger('processStart'); + + return this; + }, + + /** + * Add dynamically additional fields for form + * + * @param fields + */ + addFields: function(fields) { + fields.each(function(elm) { + this.blockFormAdd.insert(elm); + }.bind(this)); + return this; + }, + + /** + * Triggered when form was submitted and iFrame was loaded. Get response from iFrame and handle it + */ + onLoadIFrame: function() { + this.blockFormConfirmed.select('[configure_disabled=1]').each(function (element) { + element.disabled = element.getAttribute('configure_prev_disabled') == '1'; + }); + + this._processFieldsData('form_confirmed_to_confirmed'); + + var response = this.blockIFrame.contentWindow[this.iFrameJSVarname]; + if (response && "object" == typeof response) { + if (this.listTypes[this.current.listType].urlConfirm) { + if (response.ok) { + this._closeWindow(); + this.clean('current'); + } else if (response.error) { + this.showItemConfiguration(this.current.listType, this.current.itemId); + this.blockMsg.show(); + this.blockMsgError.innerHTML = response.message; + this._showWindow(); + return false; + } } + if (Object.isFunction(this.onLoadIFrameCallback[this.current.listType])) { + this.onLoadIFrameCallback[this.current.listType](response); + } + document.fire(this.current.listType + ':afterIFrameLoaded'); } - } - },*/ - - /** - * Close configuration window - */ - _closeWindow: function() { - this.dialog.dialog('close'); - //this.blockWindow.style.display = 'none'; - //this.clean('window'); - }, - - /** - * Attach callback function triggered when confirm button was clicked - * - * @param confirmCallback - */ - setConfirmCallback: function(listType, confirmCallback) { - this.confirmCallback[listType] = confirmCallback; - return this; - }, - - /** - * Attach callback function triggered when cancel button was clicked - * - * @param cancelCallback - */ - setCancelCallback: function(listType, cancelCallback) { - this.cancelCallback[listType] = cancelCallback; - return this; - }, - - /** - * Attach callback function triggered when iFrame was loaded - * - * @param onLoadIFrameCallback - */ - setOnLoadIFrameCallback: function(listType, onLoadIFrameCallback) { - this.onLoadIFrameCallback[listType] = onLoadIFrameCallback; - return this; - }, - - /** - * Attach callback function triggered when iFrame was loaded - * - * @param showWindowCallback - */ - setShowWindowCallback: function(listType, showWindowCallback) { - this.showWindowCallback[listType] = showWindowCallback; - return this; - }, - - /** - * Attach callback function triggered before submitting form - * - * @param beforeSubmitCallback - */ - setBeforeSubmitCallback: function(listType, beforeSubmitCallback) { - this.beforeSubmitCallback[listType] = beforeSubmitCallback; - return this; - }, - - /** - * Clean object data - * - * @param method can be 'all' or 'current' - */ - clean: function(method) { - var listInfo = null; - var listTypes = null; - var removeConfirmed = function (listTypes) { - this.blockConfirmed.childElements().each(function(elm) { - for (var i = 0, len = listTypes.length; i < len; i++) { - var pattern = this.blockConfirmed.id + '[' + listTypes[i] + ']'; - if (elm.id.indexOf(pattern) == 0) { - elm.remove(); - break; - } + // Hide loader + jQuery(this.blockForm).trigger('processStop'); + + this.clean('current'); + this.initialize(); + }, + + /** + * Helper for fetching content from iFrame + */ + _getIFrameContent: function() { + var content = (this.blockIFrame.contentWindow || this.blockIFrame.contentDocument); + if (content.document) { + content=content.document; + } + return content; + }, + + /** + * Helper to find qty of currently confirmed item + */ + getCurrentConfirmedQtyElement: function() { + var elms = $(this.confirmedCurrentId).getElementsByTagName('input'); + for (var i = 0; i < elms.length; i++) { + if (elms[i].name == 'qty') { + return elms[i]; } - }.bind(this)); - }.bind(this); - - switch (method) { - case 'current': - listInfo = this.listTypes[this.current.listType]; - listTypes = [this.current.listType]; - if (listInfo && listInfo.complexTypes) { - listTypes = listTypes.concat(listInfo.complexTypes); + } + }, + + /** + * Helper to find qty of active form + */ + getCurrentFormQtyElement: function() { + var elms = this.blockFormFields.getElementsByTagName('input'); + for (var i = 0; i < elms.length; i++) { + if (elms[i].name == 'qty') { + return elms[i]; } - removeConfirmed(listTypes); - break; - case 'window': - this.blockFormFields.update(); - this.blockMsg.hide(); - this.blockMsgError.update(); - this.blockCancelBtn.show(); - break; - default: - // search in list types for its cleaning - if (this.listTypes[method]) { - listInfo = this.listTypes[method]; - listTypes = [method]; - if (listInfo.complexTypes) { + } + }, + + /** + * Show configuration window + */ + _showWindow: function() { + this.dialog.modal('openModal'); + //this._toggleSelectsExceptBlock(false); + + if (Object.isFunction(this.showWindowCallback[this.current.listType])) { + this.showWindowCallback[this.current.listType](); + } + }, + + /** + * toggles Selects states (for IE) except those to be shown in popup + */ + /*_toggleSelectsExceptBlock: function(flag) { + if(Prototype.Browser.IE){ + if (this.blockForm) { + var states = new Array; + var selects = this.blockForm.getElementsByTagName("select"); + for(var i=0; i<selects.length; i++){ + states[i] = selects[i].style.visibility + } + } + if (this.blockForm) { + for(i=0; i<selects.length; i++){ + selects[i].style.visibility = states[i] + } + } + } + },*/ + + /** + * Close configuration window + */ + _closeWindow: function() { + this.dialog.modal('closeModal'); + //this.blockWindow.style.display = 'none'; + //this.clean('window'); + }, + + /** + * Attach callback function triggered when confirm button was clicked + * + * @param confirmCallback + */ + setConfirmCallback: function(listType, confirmCallback) { + this.confirmCallback[listType] = confirmCallback; + return this; + }, + + /** + * Attach callback function triggered when cancel button was clicked + * + * @param cancelCallback + */ + setCancelCallback: function(listType, cancelCallback) { + this.cancelCallback[listType] = cancelCallback; + return this; + }, + + /** + * Attach callback function triggered when iFrame was loaded + * + * @param onLoadIFrameCallback + */ + setOnLoadIFrameCallback: function(listType, onLoadIFrameCallback) { + this.onLoadIFrameCallback[listType] = onLoadIFrameCallback; + return this; + }, + + /** + * Attach callback function triggered when iFrame was loaded + * + * @param showWindowCallback + */ + setShowWindowCallback: function(listType, showWindowCallback) { + this.showWindowCallback[listType] = showWindowCallback; + return this; + }, + + /** + * Attach callback function triggered before submitting form + * + * @param beforeSubmitCallback + */ + setBeforeSubmitCallback: function(listType, beforeSubmitCallback) { + this.beforeSubmitCallback[listType] = beforeSubmitCallback; + return this; + }, + + /** + * Clean object data + * + * @param method can be 'all' or 'current' + */ + clean: function(method) { + var listInfo = null; + var listTypes = null; + var removeConfirmed = function (listTypes) { + this.blockConfirmed.childElements().each(function(elm) { + for (var i = 0, len = listTypes.length; i < len; i++) { + var pattern = this.blockConfirmed.id + '[' + listTypes[i] + ']'; + if (elm.id.indexOf(pattern) == 0) { + elm.remove(); + break; + } + } + }.bind(this)); + }.bind(this); + + switch (method) { + case 'current': + listInfo = this.listTypes[this.current.listType]; + listTypes = [this.current.listType]; + if (listInfo && listInfo.complexTypes) { listTypes = listTypes.concat(listInfo.complexTypes); } removeConfirmed(listTypes); - // clean all - } else if (!method) { - this.current = $H({}); - this.blockConfirmed.update(); + break; + case 'window': this.blockFormFields.update(); this.blockMsg.hide(); this.blockMsgError.update(); this.blockCancelBtn.show(); - } - break; - } - this._getIFrameContent().body.innerHTML = ''; - this.blockIFrame.contentWindow[this.iFrameJSVarname] = {}; - this.blockFormAdd.update(); - this.blockFormConfirmed.update(); - this.blockForm.action = ''; - - return this; - }, - - /** - * Process fields data: save, restore, move saved to form and back - * - * @param method can be 'item_confirm', 'item_restore', 'current_confirmed_to_form', 'form_confirmed_to_confirmed' - */ - _processFieldsData: function(method) { + break; + default: + // search in list types for its cleaning + if (this.listTypes[method]) { + listInfo = this.listTypes[method]; + listTypes = [method]; + if (listInfo.complexTypes) { + listTypes = listTypes.concat(listInfo.complexTypes); + } + removeConfirmed(listTypes); + // clean all + } else if (!method) { + this.current = $H({}); + this.blockConfirmed.update(); + this.blockFormFields.update(); + this.blockMsg.hide(); + this.blockMsgError.update(); + this.blockCancelBtn.show(); + } + break; + } + this._getIFrameContent().body.innerHTML = ''; + this.blockIFrame.contentWindow[this.iFrameJSVarname] = {}; + this.blockFormAdd.update(); + this.blockFormConfirmed.update(); + this.blockForm.action = ''; + + return this; + }, /** - * Internal function for rename fields names of some list type - * if listType is not specified, then it won't be added as prefix to all names + * Process fields data: save, restore, move saved to form and back * - * @param method can be 'current_confirmed_to_form', 'form_confirmed_to_confirmed' - * @param blockItem + * @param method can be 'item_confirm', 'item_restore', 'current_confirmed_to_form', 'form_confirmed_to_confirmed' */ - var _renameFields = function(method, blockItem, listType) { - var pattern = null; - var patternFlat = null; - var replacement = null; - var replacementFlat = null - var scopeArr = blockItem.id.match(/.*\[\w+\]\[([^\]]+)\]$/); - var itemId = scopeArr[1]; - if (method == 'current_confirmed_to_form') { - pattern = RegExp('(\\w+)(\\[?)'); - patternFlat = RegExp('(\\w+)'); - replacement = 'item[' + itemId + '][$1]$2'; - replacementFlat = 'item_' + itemId + '_$1'; - if (listType) { - replacement = 'list[' + listType + '][item][' + itemId + '][$1]$2'; - replacementFlat = 'list_' + listType + '_' + replacementFlat; - } - } else if (method == 'form_confirmed_to_confirmed') { - var stPattern = 'item\\[' + itemId + '\\]\\[(\\w+)\\](.*)'; - var stPatternFlat = 'item_' + itemId + '_(\\w+)'; - if (listType) { - stPattern = 'list\\[' + listType + '\\]\\[item\\]\\[' + itemId + '\\]\\[(\\w+)\\](.*)'; - stPatternFlat = 'list_' + listType + '_' + stPatternFlat; - } - pattern = new RegExp(stPattern); - patternFlat = new RegExp(stPatternFlat); - replacement = '$1$2'; - replacementFlat = '$1'; - } else { - return false; - } - var rename = function (elms) { - for (var i = 0; i < elms.length; i++) { - if (elms[i].name && elms[i].type == 'file') { - elms[i].name = elms[i].name.replace(patternFlat, replacementFlat); - } else if (elms[i].name) { - elms[i].name = elms[i].name.replace(pattern, replacement); + _processFieldsData: function(method) { + + /** + * Internal function for rename fields names of some list type + * if listType is not specified, then it won't be added as prefix to all names + * + * @param method can be 'current_confirmed_to_form', 'form_confirmed_to_confirmed' + * @param blockItem + */ + var _renameFields = function(method, blockItem, listType) { + var pattern = null; + var patternFlat = null; + var replacement = null; + var replacementFlat = null + var scopeArr = blockItem.id.match(/.*\[\w+\]\[([^\]]+)\]$/); + var itemId = scopeArr[1]; + if (method == 'current_confirmed_to_form') { + pattern = RegExp('(\\w+)(\\[?)'); + patternFlat = RegExp('(\\w+)'); + replacement = 'item[' + itemId + '][$1]$2'; + replacementFlat = 'item_' + itemId + '_$1'; + if (listType) { + replacement = 'list[' + listType + '][item][' + itemId + '][$1]$2'; + replacementFlat = 'list_' + listType + '_' + replacementFlat; + } + } else if (method == 'form_confirmed_to_confirmed') { + var stPattern = 'item\\[' + itemId + '\\]\\[(\\w+)\\](.*)'; + var stPatternFlat = 'item_' + itemId + '_(\\w+)'; + if (listType) { + stPattern = 'list\\[' + listType + '\\]\\[item\\]\\[' + itemId + '\\]\\[(\\w+)\\](.*)'; + stPatternFlat = 'list_' + listType + '_' + stPatternFlat; } + pattern = new RegExp(stPattern); + patternFlat = new RegExp(stPatternFlat); + replacement = '$1$2'; + replacementFlat = '$1'; + } else { + return false; } - }; - rename(blockItem.getElementsByTagName('input')); - rename(blockItem.getElementsByTagName('select')); - rename(blockItem.getElementsByTagName('textarea')); - }.bind(this); - - switch (method) { - case 'item_confirm': + var rename = function (elms) { + for (var i = 0; i < elms.length; i++) { + if (elms[i].name && elms[i].type == 'file') { + elms[i].name = elms[i].name.replace(patternFlat, replacementFlat); + } else if (elms[i].name) { + elms[i].name = elms[i].name.replace(pattern, replacement); + } + } + }; + rename(blockItem.getElementsByTagName('input')); + rename(blockItem.getElementsByTagName('select')); + rename(blockItem.getElementsByTagName('textarea')); + }.bind(this); + + switch (method) { + case 'item_confirm': if (!$(this.confirmedCurrentId)) { this.blockConfirmed.insert(new Element('div', {id: this.confirmedCurrentId})); } else { @@ -659,8 +635,8 @@ ProductConfigure.prototype = { this.blockFormFields.childElements().each(function(elm) { $(this.confirmedCurrentId).insert(elm); }.bind(this)); - break; - case 'item_restore': + break; + case 'item_restore': this.blockFormFields.update(); // clone confirmed to form @@ -730,14 +706,14 @@ ProductConfigure.prototype = { } catch (e) {} this.restorePhase = false; } - break; - case 'current_confirmed_to_form': + break; + case 'current_confirmed_to_form': var allowedListTypes = {}; allowedListTypes[this.current.listType] = true; var listInfo = this.listTypes[this.current.listType]; if (listInfo.complexTypes) { for (var i = 0, len = listInfo.complexTypes.length; i < len; i++) { - allowedListTypes[listInfo.complexTypes[i]] = true; + allowedListTypes[listInfo.complexTypes[i]] = true; } } @@ -747,13 +723,13 @@ ProductConfigure.prototype = { var listType = scopeArr[1]; var itemId = scopeArr[2]; if (allowedListTypes[listType] && (!this.itemsFilter[listType] - || this.itemsFilter[listType].indexOf(itemId) != -1)) { + || this.itemsFilter[listType].indexOf(itemId) != -1)) { _renameFields(method, blockItem, listInfo.complexTypes ? listType : null); this.blockFormConfirmed.insert(blockItem); } }.bind(this)); - break; - case 'form_confirmed_to_confirmed': + break; + case 'form_confirmed_to_confirmed': var listInfo = this.listTypes[this.current.listType]; this.blockFormConfirmed.childElements().each(function(blockItem) { var scopeArr = blockItem.id.match(/.*\[(\w+)\]\[([^\]]+)\]$/); @@ -761,32 +737,32 @@ ProductConfigure.prototype = { _renameFields(method, blockItem, listInfo.complexTypes ? listType : null); this.blockConfirmed.insert(blockItem); }.bind(this)); - break; - } - }, - - /** - * Check if qty selected correctly - * - * @param object element - * @param object event - */ - changeOptionQty: function(element, event) - { - var checkQty = true; - if ('undefined' != typeof event) { - if (event.keyCode == 8 || event.keyCode == 46) { - checkQty = false; + break; + } + }, + + /** + * Check if qty selected correctly + * + * @param object element + * @param object event + */ + changeOptionQty: function(element, event) + { + var checkQty = true; + if ('undefined' != typeof event) { + if (event.keyCode == 8 || event.keyCode == 46) { + checkQty = false; + } + } + if (checkQty && (Number(element.value) <= 0 || isNaN(Number(element.value)))) { + element.value = 1; } } - if (checkQty && (Number(element.value) <= 0 || isNaN(Number(element.value)))) { - element.value = 1; - } - } -}; + }; -jQuery(document).ready(function(){ - productConfigure = new ProductConfigure(); -}); + jQuery(document).ready(function(){ + productConfigure = new ProductConfigure(); + }); }); \ No newline at end of file diff --git a/app/code/Magento/Catalog/view/adminhtml/web/js/custom-options.js b/app/code/Magento/Catalog/view/adminhtml/web/js/custom-options.js index b7a16ce3db853a02f454b58af0d72e6e6d32dc31..d68497046a5bf00619fc2db9109ffb8869b7eed2 100644 --- a/app/code/Magento/Catalog/view/adminhtml/web/js/custom-options.js +++ b/app/code/Magento/Catalog/view/adminhtml/web/js/custom-options.js @@ -7,12 +7,14 @@ define([ 'jquery', 'mage/template', + 'Magento_Ui/js/modal/alert', 'jquery/ui', 'useDefault', 'collapsable', 'mage/translate', - 'mage/backend/validation' -], function ($, mageTemplate) { + 'mage/backend/validation', + 'Magento_Ui/js/modal/modal' +], function ($, mageTemplate, alert) { 'use strict'; $.widget('mage.customOptions', { @@ -120,90 +122,66 @@ define([ var importContainer = $('#import-container'), widget = this; - importContainer.dialog({ + importContainer.modal({ title: $.mage.__('Select Product'), - autoOpen: false, - minWidth: 980, - width: '75%', - modal: true, - resizable: true, - position: { - my: 'left top', - at: 'center top', - of: 'body' - }, - create: function (event, ui) { - $(document).on('click', '#productGrid_massaction-form button', function () { - $('#import-custom-options-apply-button').trigger('click', 'massActionTrigger'); + type: 'slide', + opened: function () { + $(document).off().on('click', '#productGrid_massaction-form button', function () { + $('.import-custom-options-apply-button').trigger('click', 'massActionTrigger'); }); }, - open: function () { - $(this).closest('.ui-dialog').addClass('ui-dialog-active'); - - var topMargin = $(this).closest('.ui-dialog').children('.ui-dialog-titlebar').outerHeight() + 135; - $(this).closest('.ui-dialog').css('margin-top', topMargin); - - $(this).addClass('admin__scope-old'); // ToDo UI: remove with old styles removal - }, - close: function () { - $(this).closest('.ui-dialog').removeClass('ui-dialog-active'); - }, - buttons: [ - { - text: $.mage.__('Import'), - id: 'import-custom-options-apply-button', - 'class': 'action-primary action-import', - click: function (event, massActionTrigger) { - var request = []; - $(this).find('input[name=product]:checked').map(function () { - request.push(this.value); - }); + buttons: [{ + text: $.mage.__('Import'), + attr: { + id: 'import-custom-options-apply-button' + }, + 'class': 'action-primary action-import import-custom-options-apply-button', + click: function (event, massActionTrigger) { + var request = []; - if (request.length === 0) { - if (!massActionTrigger) { - alert($.mage.__('Please select items.')); - } + $(this.element).find('input[name=product]:checked').map(function () { + request.push(this.value); + }); - return; + if (request.length === 0) { + if (!massActionTrigger) { + alert({ + content: $.mage.__('Please select items.') + }); } - $.post(widget.options.customOptionsUrl, { - 'products[]': request, - form_key: widget.options.formKey - }, function ($data) { - $.parseJSON($data).each(function (el) { - el.id = widget.getFreeOptionId(el.id); - el.option_id = el.id; - - if (typeof el.optionValues !== 'undefined') { - for (var i = 0; i < el.optionValues.length; i++) { - el.optionValues[i].option_id = el.id; - } + return; + } + + $.post(widget.options.customOptionsUrl, { + 'products[]': request, + form_key: widget.options.formKey + }, function ($data) { + $.parseJSON($data).each(function (el) { + el.id = widget.getFreeOptionId(el.id); + el.option_id = el.id; + + if (typeof el.optionValues !== 'undefined') { + for (var i = 0; i < el.optionValues.length; i++) { + el.optionValues[i].option_id = el.id; } - //Adding option - widget.addOption(el); - //Will save new option on server side - $('#product_option_' + el.id + '_option_id').val(0); - $('#option_' + el.id + ' input[name$="option_type_id]"]').val(-1); - }); - importContainer.dialog('close'); + } + //Adding option + widget.addOption(el); + //Will save new option on server side + $('#product_option_' + el.id + '_option_id').val(0); + $('#option_' + el.id + ' input[name$="option_type_id]"]').val(-1); }); - } - }, - { - text: $.mage.__('Cancel'), - id: 'import-custom-options-close-button', - 'class': 'action-close', - click: function () { - $(this).dialog('close'); - } - }] + importContainer.modal('closeModal'); + }); + } + }] }); importContainer.load( this.options.productGridUrl, {form_key: this.options.formKey}, function () { - importContainer.dialog('open'); + importContainer.modal('openModal'); } ); }, diff --git a/app/code/Magento/Catalog/view/adminhtml/web/js/new-category-dialog.js b/app/code/Magento/Catalog/view/adminhtml/web/js/new-category-dialog.js index d70f2e17193afe202495b505a22cf26416dbdae7..44f3371cf9371b8f181de7d950e8796ce156520c 100644 --- a/app/code/Magento/Catalog/view/adminhtml/web/js/new-category-dialog.js +++ b/app/code/Magento/Catalog/view/adminhtml/web/js/new-category-dialog.js @@ -32,7 +32,6 @@ define([ .on('suggestbeforeselect', function (event) { clearParentCategory(); $(event.target).treeSuggest('close'); - $('#new_category_name').focus(); }); $.validator.addMethod('validate-parent-category', function () { diff --git a/app/code/Magento/Catalog/view/base/templates/product/price/tier_prices.phtml b/app/code/Magento/Catalog/view/base/templates/product/price/tier_prices.phtml index c0b494718c0242c51680a0f6982384556c8f27e2..030e663359f01e1dc99094226ebcd499a3edf447 100644 --- a/app/code/Magento/Catalog/view/base/templates/product/price/tier_prices.phtml +++ b/app/code/Magento/Catalog/view/base/templates/product/price/tier_prices.phtml @@ -86,8 +86,9 @@ $product = $block->getSaleableItem(); <script type="text/x-magento-init"> { ".product-info-main": { - "tierPrice": { + "addToCart": { "inputQty": "#qty", + "attr": "[data-tier-price]", "productForm": "#product_addtocart_form" } } diff --git a/app/code/Magento/Catalog/view/base/web/js/tier-price.js b/app/code/Magento/Catalog/view/base/web/js/tier-price.js deleted file mode 100644 index 95622a56f6cca22f2791827e20775d3f6c77cabd..0000000000000000000000000000000000000000 --- a/app/code/Magento/Catalog/view/base/web/js/tier-price.js +++ /dev/null @@ -1,60 +0,0 @@ -/** - * Copyright © 2015 Magento. All rights reserved. - * See COPYING.txt for license details. - */ -/*jshint browser:true jquery:true*/ -define([ - "jquery", - "jquery/ui" -], function($){ - "use strict"; - - $.widget('mage.tierPrice', { - options: { - popupHeading: '#map-popup-heading', - productForm: '#product_addtocart_form', - popupPrice: '#map-popup-price', - popupMsrp: '#map-popup-msrp', - popup: '#map-popup', - popupContent: '#map-popup-content', - popupText: '#map-popup-text', - popupOnlyText: 'map-popup-only-text', - popupTextWhatThis: '#map-popup-text-what-this', - popupCartButtonId: '#map-popup-button' - }, - - _create: function() { - this.element.on('click', '[data-tier-price]', $.proxy(this._showTierPrice, this)); - }, - - /** - * Show tier price popup on gesture - * @private - * @param e - element got the clicked on - * @return {Boolean} - */ - _showTierPrice: function(e) { - var data = $(e.target).data('tier-price'); - $(this.options.popupCartButtonId).off('click'); - $(this.options.popupCartButtonId).on('click', $.proxy(function() { - this.element.find(this.options.inputQty).val(data.qty); - this.element.find(this.options.productForm).submit(); - }, this)); - $(this.options.popupHeading).text(data.name); - $(this.options.popupPrice).html($(data.price)).find('[id^="product-price-"]').attr('id', function() { - // change price element id, so price option won't update the tier price - return 'tier' + $(this).attr('id'); - }); - $(this.options.popupMsrp).html(data.msrp); - var width = $(this.options.popup).width(); - var offsetX = e.pageX - (width / 2) + "px"; - $(this.options.popup).css({left: offsetX, top: e.pageY}).addClass('active').show(); - $(this.options.popupContent).show(); - $(this.options.popupText).addClass(this.options.popupOnlyText).show(); - $(this.options.popupTextWhatThis).hide(); - return false; - } - }); - - return $.mage.tierPrice; -}); \ No newline at end of file diff --git a/app/code/Magento/Catalog/view/frontend/requirejs-config.js b/app/code/Magento/Catalog/view/frontend/requirejs-config.js index a840a196c6a89c0c60ffdef8d5f7d52384c0e723..3c0ffa65c8d43c9aa0f58c858871e703378b7b60 100644 --- a/app/code/Magento/Catalog/view/frontend/requirejs-config.js +++ b/app/code/Magento/Catalog/view/frontend/requirejs-config.js @@ -12,6 +12,7 @@ var config = { upsellProducts: 'Magento_Catalog/js/upsell-products', productListToolbarForm: 'Magento_Catalog/js/product/list/toolbar', tierPrice: 'Magento_Catalog/js/tier-price', + addToCart: 'Magento_Msrp/js/msrp', catalogGallery: 'Magento_Catalog/js/gallery', priceBox: 'Magento_Catalog/js/price-box', priceOptionDate: 'Magento_Catalog/js/price-option-date', diff --git a/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml b/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml index e2ec81f81a8a190449d024b22d5ced85e09ed4f7..d344cef700db1864b906bdd84276bd7b76ab7e9c 100644 --- a/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml +++ b/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml @@ -12,49 +12,50 @@ * @var $block \Magento\Catalog\Block\Product\View\Gallery */ ?> -<div class="gallery-placeholder"></div> +<div class="gallery-placeholder _block-content-loading" data-gallery-role="gallery-placeholder"> + <div data-role="loader" class="loading-mask"> + <div class="loader"> + <img src="<?php /* @escapeNotVerified */ echo $block->getViewFileUrl('images/loader-1.gif'); ?>" + alt="<?php /* @escapeNotVerified */ echo __('Loading...') ?>"> + </div> + </div> +</div> <script type="text/x-magento-init"> { - ".gallery-placeholder": { + "[data-gallery-role=gallery-placeholder]": { "mage/gallery/gallery": { "mixins":["magnifier/magnify"], - "magnifierOpts": { - "enabled": <?php /* @escapeNotVerified */ echo $block->getVar("magnifier:enabled"); ?>, - "eventType": "<?php /* @escapeNotVerified */ echo $block->getVar("magnifier:eventType"); ?>", - "width": "<?php /* @escapeNotVerified */ echo $block->getVar("magnifier:width"); ?>", - "height": "<?php /* @escapeNotVerified */ echo $block->getVar("magnifier:height"); ?>", - "top": "<?php /* @escapeNotVerified */ echo $block->getVar("magnifier:top"); ?>", - "left": "<?php /* @escapeNotVerified */ echo $block->getVar("magnifier:left"); ?>" - }, + "magnifierOpts": <?php /* @escapeNotVerified */ echo $block->getMagnifier(); ?>, "data": <?php /* @escapeNotVerified */ echo $block->getGalleryImagesJson(); ?>, "options": { - "nav": "<?php /* @escapeNotVerified */ echo $block->getVar("gallery:nav"); ?>", - "loop": <?php /* @escapeNotVerified */ echo $block->getVar("gallery:loop"); ?>, - "keyboard": <?php /* @escapeNotVerified */ echo $block->getVar("gallery:keyboard"); ?>, - "arrows": <?php /* @escapeNotVerified */ echo $block->getVar("gallery:arrows"); ?>, - "showCaption": <?php /* @escapeNotVerified */ echo $block->getVar("gallery:showCaption"); ?>, + "nav": "<?php /* @escapeNotVerified */ echo $block->getVar("gallery/nav"); ?>", + "loop": <?php /* @escapeNotVerified */ echo $block->getVar("gallery/loop"); ?>, + "keyboard": <?php /* @escapeNotVerified */ echo $block->getVar("gallery/keyboard"); ?>, + "arrows": <?php /* @escapeNotVerified */ echo $block->getVar("gallery/arrows"); ?>, + "allowfullscreen": <?php /* @escapeNotVerified */ echo $block->getVar("gallery/allowfullscreen"); ?>, + "showCaption": <?php /* @escapeNotVerified */ echo $block->getVar("gallery/caption"); ?>, "width": <?php /* @escapeNotVerified */ echo $block->getImageAttribute('product_page_image_medium', 'width'); ?>, "thumbwidth": <?php /* @escapeNotVerified */ echo $block->getImageAttribute('product_page_image_small', 'width'); ?>, "thumbheight": <?php /* @escapeNotVerified */ echo $block->getImageAttribute('product_page_image_small', 'height') ?: $block->getImageAttribute('product_page_image_small', 'width'); ?>, "height": <?php /* @escapeNotVerified */ echo $block->getImageAttribute('product_page_image_medium', 'height') - ?: $block->getImageAttribute('product_page_image_medium', 'width'); ?> + ?: $block->getImageAttribute('product_page_image_medium', 'width'); ?>, + "transitionduration": <?php /* @escapeNotVerified */ echo $block->getVar("gallery/transition/duration"); ?>, + "transition": "<?php /* @escapeNotVerified */ echo $block->getVar("gallery/transition/effect"); ?>", + "navarrows": <?php /* @escapeNotVerified */ echo $block->getVar("gallery/navarrows"); ?>, + "navtype": "<?php /* @escapeNotVerified */ echo $block->getVar("gallery/navtype"); ?>", + "navdir": "<?php /* @escapeNotVerified */ echo $block->getVar("gallery/navdir"); ?>" + }, + "fullscreen": { + "nav": "<?php /* @escapeNotVerified */ echo $block->getVar("gallery/fullscreen/nav"); ?>", + "loop": <?php /* @escapeNotVerified */ echo $block->getVar("gallery/fullscreen/loop"); ?>, + "navdir": "<?php /* @escapeNotVerified */ echo $block->getVar("gallery/fullscreen/navdir"); ?>", + "arrows": <?php /* @escapeNotVerified */ echo $block->getVar("gallery/fullscreen/arrows"); ?>, + "showCaption": <?php /* @escapeNotVerified */ echo $block->getVar("gallery/fullscreen/caption"); ?>, + "transitionduration": <?php /* @escapeNotVerified */ echo $block->getVar("gallery/fullscreen/transition/duration"); ?>, + "transition": "<?php /* @escapeNotVerified */ echo $block->getVar("gallery/fullscreen/transition/effect"); ?>" }, - "breakpoints": { - "mobile": { - "conditions": { - "max-width": "767px" - }, - "options": { - "options": { - "nav": "dots" - }, - "magnifierOpts": { - "enabled": false - } - } - } - } + "breakpoints": <?php /* @escapeNotVerified */ echo $block->getBreakpoints(); ?> } } } diff --git a/app/code/Magento/Catalog/view/frontend/web/js/product/list/toolbar.js b/app/code/Magento/Catalog/view/frontend/web/js/product/list/toolbar.js index 688f836fb1035c9ef5e98edbcb31f10c59b3f581..5904b567278b7807e308694033e13339afb77d6f 100644 --- a/app/code/Magento/Catalog/view/frontend/web/js/product/list/toolbar.js +++ b/app/code/Magento/Catalog/view/frontend/web/js/product/list/toolbar.js @@ -68,7 +68,9 @@ define([ parameters; for (var i = 0; i < urlParams.length; i++) { parameters = urlParams[i].split('='); - paramData[parameters[0]] = parameters[1] !== undefined ? parameters[1] : ''; + paramData[parameters[0]] = parameters[1] !== undefined + ? window.decodeURIComponent(parameters[1].replace(/\+/g, '%20')) + : ''; } paramData[paramName] = paramValue; if (paramValue == defaultValue) { @@ -81,4 +83,4 @@ define([ }); return $.mage.productListToolbarForm; -}); \ No newline at end of file +}); diff --git a/app/code/Magento/CatalogImportExport/Model/Import/Product.php b/app/code/Magento/CatalogImportExport/Model/Import/Product.php index 09c883b094a947b2c659f217339b819f2884fce8..a2a98fcdbc51ed0b8c57a0a779da126b43bdff50 100644 --- a/app/code/Magento/CatalogImportExport/Model/Import/Product.php +++ b/app/code/Magento/CatalogImportExport/Model/Import/Product.php @@ -10,8 +10,8 @@ namespace Magento\CatalogImportExport\Model\Import; use Magento\Framework\App\Filesystem\DirectoryList; use Magento\CatalogImportExport\Model\Import\Product\RowValidatorInterface as ValidatorInterface; -use Magento\Framework\Model\ModelResource\Db\TransactionManagerInterface; -use Magento\Framework\Model\ModelResource\Db\ObjectRelationProcessor; +use Magento\Framework\Model\ResourceModel\Db\TransactionManagerInterface; +use Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor; use Magento\Framework\Stdlib\DateTime; use Magento\ImportExport\Model\Import\ErrorProcessing\ProcessingError; use Magento\ImportExport\Model\Import\ErrorProcessing\ProcessingErrorAggregatorInterface; @@ -1803,7 +1803,7 @@ class Product extends \Magento\ImportExport\Model\Import\Entity\AbstractEntity 'value' => $insertValue['value'], ]; $valueToProductId[$insertValue['value']] = $productId; - $imageNames = $insertValue['value']; + $imageNames[] = $insertValue['value']; $multiInsertData[] = $valueArr; $insertedGalleryImgs[] = $insertValue['value']; } diff --git a/app/code/Magento/CatalogImportExport/Test/Unit/Model/Import/ProductTest.php b/app/code/Magento/CatalogImportExport/Test/Unit/Model/Import/ProductTest.php index 6c9f1f89ff535ed49741622c632c06d21f68d8a1..d5fbfaf8c9e8c693c690a26a6985b5525a166508 100644 --- a/app/code/Magento/CatalogImportExport/Test/Unit/Model/Import/ProductTest.php +++ b/app/code/Magento/CatalogImportExport/Test/Unit/Model/Import/ProductTest.php @@ -135,10 +135,10 @@ class ProductTest extends \Magento\ImportExport\Test\Unit\Model\Import\AbstractI /** @var \Magento\CatalogImportExport\Model\Import\Product\Validator|\PHPUnit_Framework_MockObject_MockObject */ protected $validator; - /** @var \Magento\Framework\Model\ModelResource\Db\ObjectRelationProcessor|\PHPUnit_Framework_MockObject_MockObject */ + /** @var \Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor|\PHPUnit_Framework_MockObject_MockObject */ protected $objectRelationProcessor; - /** @var \Magento\Framework\Model\ModelResource\Db\TransactionManagerInterface|\PHPUnit_Framework_MockObject_MockObject */ + /** @var \Magento\Framework\Model\ResourceModel\Db\TransactionManagerInterface|\PHPUnit_Framework_MockObject_MockObject */ protected $transactionManager; /** @var \Magento\CatalogImportExport\Model\Import\Product\TaxClassProcessor|\PHPUnit_Framework_MockObject_MockObject */ @@ -302,11 +302,11 @@ class ProductTest extends \Magento\ImportExport\Test\Unit\Model\Import\AbstractI ->disableOriginalConstructor() ->getMock(); $this->objectRelationProcessor = - $this->getMockBuilder('\Magento\Framework\Model\ModelResource\Db\ObjectRelationProcessor') + $this->getMockBuilder('\Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor') ->disableOriginalConstructor() ->getMock(); $this->transactionManager = - $this->getMockBuilder('\Magento\Framework\Model\ModelResource\Db\TransactionManagerInterface') + $this->getMockBuilder('\Magento\Framework\Model\ResourceModel\Db\TransactionManagerInterface') ->getMock(); $this->taxClassProcessor = diff --git a/app/code/Magento/CatalogInventory/Block/Adminhtml/Form/Field/Stock.php b/app/code/Magento/CatalogInventory/Block/Adminhtml/Form/Field/Stock.php index 3c4520e792a6db93e736254b2923c151cddc358f..7ae7f318a2f9cf67bbfb05b1558209afc5142129 100644 --- a/app/code/Magento/CatalogInventory/Block/Adminhtml/Form/Field/Stock.php +++ b/app/code/Magento/CatalogInventory/Block/Adminhtml/Form/Field/Stock.php @@ -36,11 +36,19 @@ class Stock extends \Magento\Framework\Data\Form\Element\Select */ protected $_factoryText; + /** + * Core registry + * + * @var \Magento\Framework\Registry + */ + protected $coreRegistry; + /** * @param \Magento\Framework\Data\Form\Element\Factory $factoryElement * @param \Magento\Framework\Data\Form\Element\CollectionFactory $factoryCollection * @param \Magento\Framework\Escaper $escaper * @param \Magento\Framework\Data\Form\Element\TextFactory $factoryText + * @param \Magento\Framework\Registry $coreRegistry * @param array $data */ public function __construct( @@ -48,12 +56,14 @@ class Stock extends \Magento\Framework\Data\Form\Element\Select \Magento\Framework\Data\Form\Element\CollectionFactory $factoryCollection, \Magento\Framework\Escaper $escaper, \Magento\Framework\Data\Form\Element\TextFactory $factoryText, + \Magento\Framework\Registry $coreRegistry, array $data = [] ) { $this->_factoryText = $factoryText; $this->_qty = isset($data['qty']) ? $data['qty'] : $this->_createQtyElement(); unset($data['qty']); parent::__construct($factoryElement, $factoryCollection, $escaper, $data); + $this->coreRegistry = $coreRegistry; $this->setName($data['name']); } @@ -164,6 +174,7 @@ class Stock extends \Magento\Framework\Data\Form\Element\Select */ protected function _getJs($quantityFieldId, $inStockFieldId) { + $isNewProduct = (int)$this->coreRegistry->registry('product')->isObjectNew(); return " <script type='text/javascript'> require(['jquery', 'prototype', 'domReady!'], function($) { @@ -184,7 +195,9 @@ class Stock extends \Magento\Framework\Data\Form\Element\Select var stockBeforeDisable = $.Event('stockbeforedisable', {productType: productType}); $('[data-tab-panel=product-details]').trigger(stockBeforeDisable); if (stockBeforeDisable.result !== false) { - var manageStockValue = (qty.val() === '') ? 0 : 1, + var manageStockValue = {$isNewProduct} + ? (qty.val() === '' ? 0 : 1) + : parseInt(manageStockField.val()), stockAssociations = $('#' + fieldsAssociations['{$inStockFieldId}']); stockAvailabilityField.prop('disabled', !manageStockValue); stockAssociations.prop('disabled', !manageStockValue); diff --git a/app/code/Magento/CatalogInventory/Model/Adminhtml/Stock/Item.php b/app/code/Magento/CatalogInventory/Model/Adminhtml/Stock/Item.php index ca255a27a30eda9062a0108c2b586a37b329514e..f8e9cba0301a8220c1fe0659440d4d91ea2e8986 100644 --- a/app/code/Magento/CatalogInventory/Model/Adminhtml/Stock/Item.php +++ b/app/code/Magento/CatalogInventory/Model/Adminhtml/Stock/Item.php @@ -37,7 +37,7 @@ class Item extends \Magento\CatalogInventory\Model\Stock\Item implements Identit * @param StockRegistryInterface $stockRegistry * @param StockItemRepositoryInterface $stockItemRepository * @param GroupManagementInterface $groupManagement - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -53,7 +53,7 @@ class Item extends \Magento\CatalogInventory\Model\Stock\Item implements Identit StockRegistryInterface $stockRegistry, StockItemRepositoryInterface $stockItemRepository, GroupManagementInterface $groupManagement, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/CatalogInventory/Model/Config/Backend/AbstractValue.php b/app/code/Magento/CatalogInventory/Model/Config/Backend/AbstractValue.php index 58c52b8937769797df11b9638e6501813da1225b..5f38c7074b6c5819fe50b7e444fcec546be1e34d 100644 --- a/app/code/Magento/CatalogInventory/Model/Config/Backend/AbstractValue.php +++ b/app/code/Magento/CatalogInventory/Model/Config/Backend/AbstractValue.php @@ -27,7 +27,7 @@ abstract class AbstractValue extends \Magento\Framework\App\Config\Value * @param \Magento\Framework\App\Config\ScopeConfigInterface $config * @param \Magento\CatalogInventory\Api\StockIndexInterface $stockIndex * @param \Magento\CatalogInventory\Model\Indexer\Stock\Processor $stockIndexerProcessor - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -37,7 +37,7 @@ abstract class AbstractValue extends \Magento\Framework\App\Config\Value \Magento\Framework\App\Config\ScopeConfigInterface $config, \Magento\CatalogInventory\Api\StockIndexInterface $stockIndex, \Magento\CatalogInventory\Model\Indexer\Stock\Processor $stockIndexerProcessor, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/CatalogInventory/Model/ResourceModel/Indexer/Stock/DefaultStock.php b/app/code/Magento/CatalogInventory/Model/ResourceModel/Indexer/Stock/DefaultStock.php index cf95bd1bfc304068be625a7e9e5937149c473da5..3b9ed644fc890e1275f14f933047939b1dfa5b4b 100644 --- a/app/code/Magento/CatalogInventory/Model/ResourceModel/Indexer/Stock/DefaultStock.php +++ b/app/code/Magento/CatalogInventory/Model/ResourceModel/Indexer/Stock/DefaultStock.php @@ -37,14 +37,14 @@ class DefaultStock extends AbstractIndexer implements StockInterface /** * Class constructor * - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Framework\Indexer\Table\StrategyInterface $tableStrategy * @param \Magento\Eav\Model\Config $eavConfig * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Framework\Indexer\Table\StrategyInterface $tableStrategy, \Magento\Eav\Model\Config $eavConfig, \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig, diff --git a/app/code/Magento/CatalogInventory/Model/ResourceModel/Stock.php b/app/code/Magento/CatalogInventory/Model/ResourceModel/Stock.php index 12efcd806a0fa96856db2a7161ff4c391f3010b9..c0dee9c17f839aafa382de613496254db99855dc 100644 --- a/app/code/Magento/CatalogInventory/Model/ResourceModel/Stock.php +++ b/app/code/Magento/CatalogInventory/Model/ResourceModel/Stock.php @@ -12,7 +12,7 @@ use Magento\Store\Model\StoreManagerInterface; /** * Stock resource model */ -class Stock extends \Magento\Framework\Model\ModelResource\Db\AbstractDb implements QtyCounterInterface +class Stock extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb implements QtyCounterInterface { /** * @var StockConfigurationInterface @@ -79,7 +79,7 @@ class Stock extends \Magento\Framework\Model\ModelResource\Db\AbstractDb impleme protected $storeManager; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig * @param \Magento\Framework\Stdlib\DateTime $dateTime * @param StockConfigurationInterface $stockConfiguration @@ -87,7 +87,7 @@ class Stock extends \Magento\Framework\Model\ModelResource\Db\AbstractDb impleme * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig, \Magento\Framework\Stdlib\DateTime $dateTime, StockConfigurationInterface $stockConfiguration, diff --git a/app/code/Magento/CatalogInventory/Model/ResourceModel/Stock/Item.php b/app/code/Magento/CatalogInventory/Model/ResourceModel/Stock/Item.php index 898270f9ec84e818e71e5e9cd05a83b2657069ac..3613e9de9657abdf029b93727531ee6869e6417f 100644 --- a/app/code/Magento/CatalogInventory/Model/ResourceModel/Stock/Item.php +++ b/app/code/Magento/CatalogInventory/Model/ResourceModel/Stock/Item.php @@ -9,12 +9,12 @@ use Magento\CatalogInventory\Api\Data\StockItemInterface; use Magento\CatalogInventory\Model\Indexer\Stock\Processor; use Magento\Framework\App\ResourceConnection as AppResource; use Magento\Framework\Model\AbstractModel; -use Magento\Framework\Model\ModelResource\Db\TransactionManagerInterface; +use Magento\Framework\Model\ResourceModel\Db\TransactionManagerInterface; /** * Stock item resource model */ -class Item extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Item extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Whether index events should be processed immediately @@ -29,12 +29,12 @@ class Item extends \Magento\Framework\Model\ModelResource\Db\AbstractDb protected $stockIndexerProcessor; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param Processor $processor * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, Processor $processor, $connectionName = null ) { diff --git a/app/code/Magento/CatalogInventory/Model/ResourceModel/Stock/Status.php b/app/code/Magento/CatalogInventory/Model/ResourceModel/Stock/Status.php index 2cf5d1a092a5cfff27b4223df7b2b790563bdbd3..64e45b1f09f7563bdd82a9247e376a68d56f41f5 100644 --- a/app/code/Magento/CatalogInventory/Model/ResourceModel/Stock/Status.php +++ b/app/code/Magento/CatalogInventory/Model/ResourceModel/Stock/Status.php @@ -10,7 +10,7 @@ use Magento\CatalogInventory\Model\Stock; /** * CatalogInventory Stock Status per website Resource Model */ -class Status extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Status extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Store model manager @@ -32,14 +32,14 @@ class Status extends \Magento\Framework\Model\ModelResource\Db\AbstractDb protected $eavConfig; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param \Magento\Store\Model\WebsiteFactory $websiteFactory * @param \Magento\Eav\Model\Config $eavConfig * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Store\Model\WebsiteFactory $websiteFactory, \Magento\Eav\Model\Config $eavConfig, diff --git a/app/code/Magento/CatalogInventory/Model/Stock/Item.php b/app/code/Magento/CatalogInventory/Model/Stock/Item.php index 5d66c2d857767d262a366d813b804ee228e20e34..a6913cd2e01963b270d144986ea410e42cc90e45 100644 --- a/app/code/Magento/CatalogInventory/Model/Stock/Item.php +++ b/app/code/Magento/CatalogInventory/Model/Stock/Item.php @@ -99,7 +99,7 @@ class Item extends AbstractExtensibleModel implements StockItemInterface * @param StockConfigurationInterface $stockConfiguration * @param StockRegistryInterface $stockRegistry * @param StockItemRepositoryInterface $stockItemRepository - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -114,7 +114,7 @@ class Item extends AbstractExtensibleModel implements StockItemInterface StockConfigurationInterface $stockConfiguration, StockRegistryInterface $stockRegistry, StockItemRepositoryInterface $stockItemRepository, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/CatalogInventory/Model/Stock/Status.php b/app/code/Magento/CatalogInventory/Model/Stock/Status.php index b6a020403437752153b4560121d02d5bff521c28..fe76a6364e83e03264058f7f4e0c3ee9b14821a9 100644 --- a/app/code/Magento/CatalogInventory/Model/Stock/Status.php +++ b/app/code/Magento/CatalogInventory/Model/Stock/Status.php @@ -41,7 +41,7 @@ class Status extends AbstractExtensibleModel implements StockStatusInterface * @param ExtensionAttributesFactory $extensionFactory * @param AttributeValueFactory $customAttributeFactory * @param StockRegistryInterface $stockRegistry - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -51,7 +51,7 @@ class Status extends AbstractExtensibleModel implements StockStatusInterface ExtensionAttributesFactory $extensionFactory, AttributeValueFactory $customAttributeFactory, StockRegistryInterface $stockRegistry, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/CatalogInventory/Model/System/Config/Backend/Minsaleqty.php b/app/code/Magento/CatalogInventory/Model/System/Config/Backend/Minsaleqty.php index ea89069d8c56ef7eaa87bc2653a043d67cf9edc9..eddd3316cd8828993052fd175e05e8695f149f63 100644 --- a/app/code/Magento/CatalogInventory/Model/System/Config/Backend/Minsaleqty.php +++ b/app/code/Magento/CatalogInventory/Model/System/Config/Backend/Minsaleqty.php @@ -22,7 +22,7 @@ class Minsaleqty extends \Magento\Framework\App\Config\Value * @param \Magento\Framework\Registry $registry * @param \Magento\Framework\App\Config\ScopeConfigInterface $config * @param \Magento\CatalogInventory\Helper\Minsaleqty $catalogInventoryMinsaleqty - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -31,7 +31,7 @@ class Minsaleqty extends \Magento\Framework\App\Config\Value \Magento\Framework\Registry $registry, \Magento\Framework\App\Config\ScopeConfigInterface $config, \Magento\CatalogInventory\Helper\Minsaleqty $catalogInventoryMinsaleqty, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/CatalogInventory/Test/Unit/Model/Adminhtml/Stock/ItemTest.php b/app/code/Magento/CatalogInventory/Test/Unit/Model/Adminhtml/Stock/ItemTest.php index fac43557928031053c2b79193d441608db24010d..94c4ede49a160aa3f1e704777261620f57448da2 100644 --- a/app/code/Magento/CatalogInventory/Test/Unit/Model/Adminhtml/Stock/ItemTest.php +++ b/app/code/Magento/CatalogInventory/Test/Unit/Model/Adminhtml/Stock/ItemTest.php @@ -18,7 +18,7 @@ class ItemTest extends \PHPUnit_Framework_TestCase protected function setUp() { $resourceMock = $this->getMock( - 'Magento\Framework\Model\ModelResource\AbstractResource', + 'Magento\Framework\Model\ResourceModel\AbstractResource', ['_construct', 'getConnection', 'getIdFieldName'], [], '', diff --git a/app/code/Magento/CatalogInventory/etc/events.xml b/app/code/Magento/CatalogInventory/etc/events.xml index 536c465e4b3e68788b7812e42ac56359590068b6..4252a093c4fe710f7a8a0cb64abb5777f0b5ef1a 100644 --- a/app/code/Magento/CatalogInventory/etc/events.xml +++ b/app/code/Magento/CatalogInventory/etc/events.xml @@ -7,45 +7,45 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="catalog_block_product_status_display"> - <observer name="inventory" instance="Magento\CatalogInventory\Observer\DisplayProductStatusInfoObserver" method="execute"/> + <observer name="inventory" instance="Magento\CatalogInventory\Observer\DisplayProductStatusInfoObserver"/> </event> <event name="catalog_product_load_after"> - <observer name="inventory" instance="Magento\CatalogInventory\Observer\AddInventoryDataObserver" method="execute"/> + <observer name="inventory" instance="Magento\CatalogInventory\Observer\AddInventoryDataObserver"/> </event> <event name="catalog_product_collection_load_after"> - <observer name="inventory" instance="Magento\CatalogInventory\Observer\AddStockStatusToCollectionObserver" method="execute"/> + <observer name="inventory" instance="Magento\CatalogInventory\Observer\AddStockStatusToCollectionObserver"/> </event> <event name="sales_quote_item_collection_products_after_load"> - <observer name="inventory" instance="Magento\CatalogInventory\Observer\AddStockStatusToCollectionObserver" method="execute"/> + <observer name="inventory" instance="Magento\CatalogInventory\Observer\AddStockStatusToCollectionObserver"/> </event> <event name="sales_quote_item_qty_set_after"> - <observer name="inventory" instance="Magento\CatalogInventory\Observer\QuantityValidatorObserver" method="execute"/> + <observer name="inventory" instance="Magento\CatalogInventory\Observer\QuantityValidatorObserver"/> </event> <event name="checkout_submit_all_after"> - <observer name="inventory" instance="Magento\CatalogInventory\Observer\CheckoutAllSubmitAfterObserver" method="execute"/> + <observer name="inventory" instance="Magento\CatalogInventory\Observer\CheckoutAllSubmitAfterObserver"/> </event> <event name="sales_model_service_quote_submit_before"> - <observer name="inventory" instance="Magento\CatalogInventory\Observer\SubtractQuoteInventoryObserver" method="execute"/> + <observer name="inventory" instance="Magento\CatalogInventory\Observer\SubtractQuoteInventoryObserver"/> </event> <event name="sales_model_service_quote_submit_success"> - <observer name="inventory" instance="Magento\CatalogInventory\Observer\ReindexQuoteInventoryObserver" method="execute"/> + <observer name="inventory" instance="Magento\CatalogInventory\Observer\ReindexQuoteInventoryObserver"/> </event> <event name="sales_model_service_quote_submit_failure"> - <observer name="inventory" instance="Magento\CatalogInventory\Observer\RevertQuoteInventoryObserver" method="execute"/> + <observer name="inventory" instance="Magento\CatalogInventory\Observer\RevertQuoteInventoryObserver"/> </event> <event name="restore_quote"> - <observer name="inventory" instance="Magento\CatalogInventory\Observer\RevertQuoteInventoryObserver" method="execute"/> + <observer name="inventory" instance="Magento\CatalogInventory\Observer\RevertQuoteInventoryObserver"/> </event> <event name="sales_order_item_cancel"> - <observer name="inventory" instance="Magento\CatalogInventory\Observer\CancelOrderItemObserver" method="execute"/> + <observer name="inventory" instance="Magento\CatalogInventory\Observer\CancelOrderItemObserver"/> </event> <event name="sales_order_creditmemo_save_after"> - <observer name="inventory" instance="Magento\CatalogInventory\Observer\RefundOrderInventoryObserver" method="execute"/> + <observer name="inventory" instance="Magento\CatalogInventory\Observer\RefundOrderInventoryObserver"/> </event> <event name="catalog_product_save_after"> - <observer name="inventory" instance="Magento\CatalogInventory\Observer\SaveInventoryDataObserver" method="execute"/> + <observer name="inventory" instance="Magento\CatalogInventory\Observer\SaveInventoryDataObserver"/> </event> <event name="admin_system_config_changed_section_cataloginventory"> - <observer name="inventory" instance="Magento\CatalogInventory\Observer\UpdateItemsStockUponConfigChangeObserver" method="execute"/> + <observer name="inventory" instance="Magento\CatalogInventory\Observer\UpdateItemsStockUponConfigChangeObserver"/> </event> </config> diff --git a/app/code/Magento/CatalogInventory/view/adminhtml/ui_component/product_listing.xml b/app/code/Magento/CatalogInventory/view/adminhtml/ui_component/product_listing.xml index 01bd9d50c93f5f69ac9b17c0bf06f292f4301373..a4f0f8c41ec975ac84ec5f1050952e6a73c52e34 100644 --- a/app/code/Magento/CatalogInventory/view/adminhtml/ui_component/product_listing.xml +++ b/app/code/Magento/CatalogInventory/view/adminhtml/ui_component/product_listing.xml @@ -6,49 +6,12 @@ */ --> <listing xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Ui/etc/ui_configuration.xsd"> - <container name="listing_top"> - <filters name="listing_filters" class="Magento\Catalog\Ui\Component\Listing\Filters"> - <filterRange name="qty"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">qty</item> - <item name="label" xsi:type="string" translate="true">Quantity</item> - <item name="childDefaults" xsi:type="array"> - <item name="provider" xsi:type="string">product_listing.product_listing.listing_top.listing_filters</item> - </item> - </item> - </argument> - <filterInput name="from"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">from</item> - <item name="label" xsi:type="string" translate="true">from</item> - <item name="placeholder" xsi:type="string" translate="true">From</item> - </item> - </argument> - </filterInput> - <filterInput name="to"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">to</item> - <item name="label" xsi:type="string" translate="true">to</item> - <item name="placeholder" xsi:type="string" translate="true">To</item> - </item> - </argument> - </filterInput> - </filterRange> - </filters> - </container> <columns name="product_columns" class="Magento\Catalog\Ui\Component\Listing\Columns"> <column name="qty"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">textRange</item> <item name="add_field" xsi:type="boolean">true</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Quantity</item> <item name="sortOrder" xsi:type="number">75</item> </item> diff --git a/app/code/Magento/CatalogRule/Model/ResourceModel/Rule.php b/app/code/Magento/CatalogRule/Model/ResourceModel/Rule.php index cc2a5aa3b5848dab7338393e03b5d85a9755682e..7a0e2cec1f24c6cabddc457a7061f103f227a59c 100644 --- a/app/code/Magento/CatalogRule/Model/ResourceModel/Rule.php +++ b/app/code/Magento/CatalogRule/Model/ResourceModel/Rule.php @@ -93,7 +93,7 @@ class Rule extends \Magento\Rule\Model\ResourceModel\AbstractResource protected $priceCurrency; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param Product\ConditionFactory $conditionFactory * @param \Magento\Framework\Stdlib\DateTime\DateTime $coreDate @@ -107,7 +107,7 @@ class Rule extends \Magento\Rule\Model\ResourceModel\AbstractResource * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Catalog\Model\Product\ConditionFactory $conditionFactory, \Magento\Framework\Stdlib\DateTime\DateTime $coreDate, @@ -146,7 +146,7 @@ class Rule extends \Magento\Rule\Model\ResourceModel\AbstractResource * Add customer group ids and website ids to rule data after load * * @param \Magento\Framework\Model\AbstractModel $object - * @return \Magento\Framework\Model\ModelResource\Db\AbstractDb + * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb */ protected function _afterLoad(AbstractModel $object) { diff --git a/app/code/Magento/CatalogRule/Model/ResourceModel/Rule/Product/Price.php b/app/code/Magento/CatalogRule/Model/ResourceModel/Rule/Product/Price.php index 23af2e19f99b949abfea4f6fe735d530a728e7e5..071c788d65e96f069af88ac4ed19a60fa0e8f4f3 100644 --- a/app/code/Magento/CatalogRule/Model/ResourceModel/Rule/Product/Price.php +++ b/app/code/Magento/CatalogRule/Model/ResourceModel/Rule/Product/Price.php @@ -11,7 +11,7 @@ */ namespace Magento\CatalogRule\Model\ResourceModel\Rule\Product; -class Price extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Price extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Initialize connection and define main table diff --git a/app/code/Magento/CatalogRule/Model/ResourceModel/Rule/Product/Price/Collection.php b/app/code/Magento/CatalogRule/Model/ResourceModel/Rule/Product/Price/Collection.php index 186a1cee58cbb7ef9165bfee7e6e8a367a4f1417..13c7d3fc3b96fdbe82349f8d219954c0a112c4bf 100644 --- a/app/code/Magento/CatalogRule/Model/ResourceModel/Rule/Product/Price/Collection.php +++ b/app/code/Magento/CatalogRule/Model/ResourceModel/Rule/Product/Price/Collection.php @@ -5,7 +5,7 @@ */ namespace Magento\CatalogRule\Model\ResourceModel\Rule\Product\Price; -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * @return void diff --git a/app/code/Magento/CatalogRule/Model/Rule.php b/app/code/Magento/CatalogRule/Model/Rule.php index f953564e47e350fa0f62fb59caaffce6e165e40d..66f3affdcea910662767f599d9bf3767194a7ba0 100644 --- a/app/code/Magento/CatalogRule/Model/Rule.php +++ b/app/code/Magento/CatalogRule/Model/Rule.php @@ -104,7 +104,7 @@ class Rule extends \Magento\Rule\Model\AbstractModel protected $_relatedCacheTypes; /** - * @var \Magento\Framework\Model\ModelResource\Iterator + * @var \Magento\Framework\Model\ResourceModel\Iterator */ protected $_resourceIterator; @@ -158,13 +158,13 @@ class Rule extends \Magento\Rule\Model\AbstractModel * @param \Magento\CatalogRule\Model\Rule\Condition\CombineFactory $combineFactory * @param \Magento\CatalogRule\Model\Rule\Action\CollectionFactory $actionCollectionFactory * @param \Magento\Catalog\Model\ProductFactory $productFactory - * @param \Magento\Framework\Model\ModelResource\Iterator $resourceIterator + * @param \Magento\Framework\Model\ResourceModel\Iterator $resourceIterator * @param \Magento\Customer\Model\Session $customerSession * @param \Magento\CatalogRule\Helper\Data $catalogRuleData * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypesList * @param \Magento\Framework\Stdlib\DateTime $dateTime * @param \Magento\CatalogRule\Model\Indexer\Rule\RuleProductProcessor $ruleProductProcessor - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $relatedCacheTypes * @param array $data @@ -180,13 +180,13 @@ class Rule extends \Magento\Rule\Model\AbstractModel \Magento\CatalogRule\Model\Rule\Condition\CombineFactory $combineFactory, \Magento\CatalogRule\Model\Rule\Action\CollectionFactory $actionCollectionFactory, \Magento\Catalog\Model\ProductFactory $productFactory, - \Magento\Framework\Model\ModelResource\Iterator $resourceIterator, + \Magento\Framework\Model\ResourceModel\Iterator $resourceIterator, \Magento\Customer\Model\Session $customerSession, \Magento\CatalogRule\Helper\Data $catalogRuleData, \Magento\Framework\App\Cache\TypeListInterface $cacheTypesList, \Magento\Framework\Stdlib\DateTime $dateTime, \Magento\CatalogRule\Model\Indexer\Rule\RuleProductProcessor $ruleProductProcessor, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $relatedCacheTypes = [], array $data = [] diff --git a/app/code/Magento/CatalogRule/Test/Unit/Model/RuleTest.php b/app/code/Magento/CatalogRule/Test/Unit/Model/RuleTest.php index 2cede19ddbc75a3657dc01e37bd13700764e6488..bb8b7521642abf18e67f47170c0d7d75d39400c8 100644 --- a/app/code/Magento/CatalogRule/Test/Unit/Model/RuleTest.php +++ b/app/code/Magento/CatalogRule/Test/Unit/Model/RuleTest.php @@ -47,7 +47,7 @@ class RuleTest extends \PHPUnit_Framework_TestCase protected $_productCollectionFactory; /** - * @var \Magento\Framework\Model\ModelResource\Iterator|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Model\ResourceModel\Iterator|\PHPUnit_Framework_MockObject_MockObject */ protected $_resourceIterator; @@ -121,7 +121,7 @@ class RuleTest extends \PHPUnit_Framework_TestCase ); $this->_resourceIterator = $this->getMock( - '\Magento\Framework\Model\ModelResource\Iterator', + '\Magento\Framework\Model\ResourceModel\Iterator', ['walk'], [], '', diff --git a/app/code/Magento/CatalogRule/etc/adminhtml/events.xml b/app/code/Magento/CatalogRule/etc/adminhtml/events.xml index bf3988a2062fdb34ded651b2594d99a216b021bd..cd4cf6fbdb6ca0f4024fa880d11d4eb3899db20b 100644 --- a/app/code/Magento/CatalogRule/etc/adminhtml/events.xml +++ b/app/code/Magento/CatalogRule/etc/adminhtml/events.xml @@ -7,6 +7,6 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="catalog_product_get_final_price"> - <observer name="catalogrule" instance="Magento\CatalogRule\Observer\ProcessAdminFinalPriceObserver" method="execute" /> + <observer name="catalogrule" instance="Magento\CatalogRule\Observer\ProcessAdminFinalPriceObserver" /> </event> </config> diff --git a/app/code/Magento/CatalogRule/etc/crontab/events.xml b/app/code/Magento/CatalogRule/etc/crontab/events.xml index bf3988a2062fdb34ded651b2594d99a216b021bd..cd4cf6fbdb6ca0f4024fa880d11d4eb3899db20b 100644 --- a/app/code/Magento/CatalogRule/etc/crontab/events.xml +++ b/app/code/Magento/CatalogRule/etc/crontab/events.xml @@ -7,6 +7,6 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="catalog_product_get_final_price"> - <observer name="catalogrule" instance="Magento\CatalogRule\Observer\ProcessAdminFinalPriceObserver" method="execute" /> + <observer name="catalogrule" instance="Magento\CatalogRule\Observer\ProcessAdminFinalPriceObserver" /> </event> </config> diff --git a/app/code/Magento/CatalogRule/etc/frontend/events.xml b/app/code/Magento/CatalogRule/etc/frontend/events.xml index cab8eb3c1dbd586223d1f1e221bc212e4d1a451e..1badd08192d481e03ccf18d15cd9ac1cda7cf984 100644 --- a/app/code/Magento/CatalogRule/etc/frontend/events.xml +++ b/app/code/Magento/CatalogRule/etc/frontend/events.xml @@ -7,9 +7,9 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="catalog_product_get_final_price"> - <observer name="catalogrule" instance="Magento\CatalogRule\Observer\ProcessFrontFinalPriceObserver" method="execute" /> + <observer name="catalogrule" instance="Magento\CatalogRule\Observer\ProcessFrontFinalPriceObserver" /> </event> <event name="prepare_catalog_product_collection_prices"> - <observer name="catalogrule" instance="Magento\CatalogRule\Observer\PrepareCatalogProductCollectionPricesObserver" method="execute" /> + <observer name="catalogrule" instance="Magento\CatalogRule\Observer\PrepareCatalogProductCollectionPricesObserver" /> </event> </config> diff --git a/app/code/Magento/CatalogRule/etc/webapi_rest/events.xml b/app/code/Magento/CatalogRule/etc/webapi_rest/events.xml index cab8eb3c1dbd586223d1f1e221bc212e4d1a451e..1badd08192d481e03ccf18d15cd9ac1cda7cf984 100644 --- a/app/code/Magento/CatalogRule/etc/webapi_rest/events.xml +++ b/app/code/Magento/CatalogRule/etc/webapi_rest/events.xml @@ -7,9 +7,9 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="catalog_product_get_final_price"> - <observer name="catalogrule" instance="Magento\CatalogRule\Observer\ProcessFrontFinalPriceObserver" method="execute" /> + <observer name="catalogrule" instance="Magento\CatalogRule\Observer\ProcessFrontFinalPriceObserver" /> </event> <event name="prepare_catalog_product_collection_prices"> - <observer name="catalogrule" instance="Magento\CatalogRule\Observer\PrepareCatalogProductCollectionPricesObserver" method="execute" /> + <observer name="catalogrule" instance="Magento\CatalogRule\Observer\PrepareCatalogProductCollectionPricesObserver" /> </event> </config> diff --git a/app/code/Magento/CatalogRule/etc/webapi_soap/events.xml b/app/code/Magento/CatalogRule/etc/webapi_soap/events.xml index cab8eb3c1dbd586223d1f1e221bc212e4d1a451e..1badd08192d481e03ccf18d15cd9ac1cda7cf984 100644 --- a/app/code/Magento/CatalogRule/etc/webapi_soap/events.xml +++ b/app/code/Magento/CatalogRule/etc/webapi_soap/events.xml @@ -7,9 +7,9 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="catalog_product_get_final_price"> - <observer name="catalogrule" instance="Magento\CatalogRule\Observer\ProcessFrontFinalPriceObserver" method="execute" /> + <observer name="catalogrule" instance="Magento\CatalogRule\Observer\ProcessFrontFinalPriceObserver" /> </event> <event name="prepare_catalog_product_collection_prices"> - <observer name="catalogrule" instance="Magento\CatalogRule\Observer\PrepareCatalogProductCollectionPricesObserver" method="execute" /> + <observer name="catalogrule" instance="Magento\CatalogRule\Observer\PrepareCatalogProductCollectionPricesObserver" /> </event> </config> diff --git a/app/code/Magento/CatalogSearch/Block/Result.php b/app/code/Magento/CatalogSearch/Block/Result.php index 6c227c058897792627c1b45bd82c3e7919058fec..6670743efd1ce02381a8aec41196d934eb3c4253 100644 --- a/app/code/Magento/CatalogSearch/Block/Result.php +++ b/app/code/Magento/CatalogSearch/Block/Result.php @@ -133,12 +133,13 @@ class Result extends Template /* @var $category \Magento\Catalog\Model\Category */ $availableOrders = $category->getAvailableSortByOptions(); unset($availableOrders['position']); + $availableOrders['relevance'] = __('Relevance'); $this->getListBlock()->setAvailableOrders( $availableOrders )->setDefaultDirection( 'desc' - )->setSortBy( + )->setDefaultSortBy( 'relevance' ); diff --git a/app/code/Magento/CatalogSearch/Model/Adminhtml/System/Config/Backend/Engine.php b/app/code/Magento/CatalogSearch/Model/Adminhtml/System/Config/Backend/Engine.php index cf56ff5dc490f5c899d4d61708de9decc756db5d..4e25ed12fc3241f10748f3eb3f5c82cb0bb63490 100644 --- a/app/code/Magento/CatalogSearch/Model/Adminhtml/System/Config/Backend/Engine.php +++ b/app/code/Magento/CatalogSearch/Model/Adminhtml/System/Config/Backend/Engine.php @@ -18,7 +18,7 @@ class Engine extends \Magento\Framework\App\Config\Value * @param \Magento\Framework\Registry $registry * @param \Magento\Framework\App\Config\ScopeConfigInterface $config * @param \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -27,7 +27,7 @@ class Engine extends \Magento\Framework\App\Config\Value \Magento\Framework\Registry $registry, \Magento\Framework\App\Config\ScopeConfigInterface $config, \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/CatalogSearch/Model/Fulltext.php b/app/code/Magento/CatalogSearch/Model/Fulltext.php index 890cc1ade71a2d400e3af97c60ba454b1685f8b0..d701ab40c866d517508308e3724dd5c802fa0410 100644 --- a/app/code/Magento/CatalogSearch/Model/Fulltext.php +++ b/app/code/Magento/CatalogSearch/Model/Fulltext.php @@ -8,7 +8,7 @@ namespace Magento\CatalogSearch\Model; use Magento\Framework\App\Config\ScopeConfigInterface; use Magento\Framework\Data\Collection\AbstractDb as DbCollection; use Magento\Framework\Model\Context; -use Magento\Framework\Model\ModelResource\AbstractResource; +use Magento\Framework\Model\ResourceModel\AbstractResource; use Magento\Framework\Registry; use Magento\Search\Model\QueryFactory; diff --git a/app/code/Magento/CatalogSearch/Model/ResourceModel/Advanced.php b/app/code/Magento/CatalogSearch/Model/ResourceModel/Advanced.php index 4c7ca494a0f00c0d35b67b67995a97da6d11e987..4dafffbf8dfabd33dece9493b9e6d99eef0f0384 100644 --- a/app/code/Magento/CatalogSearch/Model/ResourceModel/Advanced.php +++ b/app/code/Magento/CatalogSearch/Model/ResourceModel/Advanced.php @@ -10,7 +10,7 @@ namespace Magento\CatalogSearch\Model\ResourceModel; * * @author Magento Core Team <core@magentocommerce.com> */ -class Advanced extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Advanced extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Core event manager proxy @@ -29,13 +29,13 @@ class Advanced extends \Magento\Framework\Model\ModelResource\Db\AbstractDb /** * Construct * - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param \Magento\Framework\Event\ManagerInterface $eventManager * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Framework\Event\ManagerInterface $eventManager, $connectionName = null diff --git a/app/code/Magento/CatalogSearch/Model/ResourceModel/Fulltext.php b/app/code/Magento/CatalogSearch/Model/ResourceModel/Fulltext.php index a84b944a98b97f275d3bd652bd66dce110a49597..1e1dd3cda0372b8ace682961dbabdd41b63d688d 100644 --- a/app/code/Magento/CatalogSearch/Model/ResourceModel/Fulltext.php +++ b/app/code/Magento/CatalogSearch/Model/ResourceModel/Fulltext.php @@ -8,7 +8,7 @@ namespace Magento\CatalogSearch\Model\ResourceModel; /** * CatalogSearch Fulltext Index resource model */ -class Fulltext extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Fulltext extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Core event manager proxy @@ -18,12 +18,12 @@ class Fulltext extends \Magento\Framework\Model\ModelResource\Db\AbstractDb protected $_eventManager; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Framework\Event\ManagerInterface $eventManager * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Framework\Event\ManagerInterface $eventManager, $connectionName = null ) { diff --git a/app/code/Magento/CatalogSearch/Test/Unit/Model/ResourceModel/FulltextTest.php b/app/code/Magento/CatalogSearch/Test/Unit/Model/ResourceModel/FulltextTest.php index 12aebd01080bd80582a8aa727fe3148cc7299483..df0561cf3b7625cbd83391f82d65dab4d50353aa 100644 --- a/app/code/Magento/CatalogSearch/Test/Unit/Model/ResourceModel/FulltextTest.php +++ b/app/code/Magento/CatalogSearch/Test/Unit/Model/ResourceModel/FulltextTest.php @@ -9,7 +9,7 @@ namespace Magento\CatalogSearch\Test\Unit\Model\ResourceModel; use Magento\CatalogSearch\Model\ResourceModel\Fulltext; use Magento\Framework\App\ResourceConnection; use Magento\Framework\DB\Adapter\AdapterInterface; -use Magento\Framework\Model\ModelResource\Db\Context; +use Magento\Framework\Model\ResourceModel\Db\Context; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; class FulltextTest extends \PHPUnit_Framework_TestCase @@ -33,7 +33,7 @@ class FulltextTest extends \PHPUnit_Framework_TestCase protected function setUp() { - $this->context = $this->getMockBuilder('\Magento\Framework\Model\ModelResource\Db\Context') + $this->context = $this->getMockBuilder('\Magento\Framework\Model\ResourceModel\Db\Context') ->disableOriginalConstructor() ->getMock(); $this->resource = $this->getMockBuilder('\Magento\Framework\App\ResourceConnection') diff --git a/app/code/Magento/CatalogSearch/etc/adminhtml/events.xml b/app/code/Magento/CatalogSearch/etc/adminhtml/events.xml index 3a3a2bc612d81cfbb789d540ae4f557f1858c972..2d8d7925d406296b7756e42f9a13810a5531272b 100644 --- a/app/code/Magento/CatalogSearch/etc/adminhtml/events.xml +++ b/app/code/Magento/CatalogSearch/etc/adminhtml/events.xml @@ -7,6 +7,6 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="store_add"> - <observer name="catalog_search" instance="Magento\CatalogSearch\Model\Indexer\Fulltext\Store" method="execute" /> + <observer name="catalog_search" instance="Magento\CatalogSearch\Model\Indexer\Fulltext\Store" /> </event> </config> diff --git a/app/code/Magento/CatalogUrlRewrite/Model/ResourceModel/Category/Product.php b/app/code/Magento/CatalogUrlRewrite/Model/ResourceModel/Category/Product.php index 9d294393900bb9a7e8204ac7590ed381d5eb82fa..316b9a6d5c118e94375e6c9159285250de4886d6 100644 --- a/app/code/Magento/CatalogUrlRewrite/Model/ResourceModel/Category/Product.php +++ b/app/code/Magento/CatalogUrlRewrite/Model/ResourceModel/Category/Product.php @@ -5,7 +5,7 @@ */ namespace Magento\CatalogUrlRewrite\Model\ResourceModel\Category; -use Magento\Framework\Model\ModelResource\Db\AbstractDb; +use Magento\Framework\Model\ResourceModel\Db\AbstractDb; class Product extends AbstractDb { diff --git a/app/code/Magento/CatalogUrlRewrite/Model/ResourceModel/Category/ProductCollection.php b/app/code/Magento/CatalogUrlRewrite/Model/ResourceModel/Category/ProductCollection.php index 44c1fb5e660b4548df1e3d97493ea7cd48735614..a012da577c58b663599162e25febfd5e35806aa4 100644 --- a/app/code/Magento/CatalogUrlRewrite/Model/ResourceModel/Category/ProductCollection.php +++ b/app/code/Magento/CatalogUrlRewrite/Model/ResourceModel/Category/ProductCollection.php @@ -5,7 +5,7 @@ */ namespace Magento\CatalogUrlRewrite\Model\ResourceModel\Category; -use Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection; +use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection; class ProductCollection extends AbstractCollection { diff --git a/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/events.xml b/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/events.xml index 101d948e3af5a45a6c12f032d80eb8765719970d..194b45d59a41ab1754da85805935bb7d82e968ea 100644 --- a/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/events.xml +++ b/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/events.xml @@ -7,24 +7,24 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="catalog_category_prepare_save"> - <observer name="category_save_rewrites_history_setter" instance="Magento\CatalogUrlRewrite\Observer\CategorySaveRewritesHistorySetterObserver" method="execute"/> + <observer name="category_save_rewrites_history_setter" instance="Magento\CatalogUrlRewrite\Observer\CategorySaveRewritesHistorySetterObserver"/> </event> <event name="catalog_category_save_before"> - <observer name="category_url_path_autogeneration" instance="Magento\CatalogUrlRewrite\Observer\CategoryUrlPathAutogeneratorObserver" method="execute"/> + <observer name="category_url_path_autogeneration" instance="Magento\CatalogUrlRewrite\Observer\CategoryUrlPathAutogeneratorObserver"/> </event> <event name="catalog_product_delete_before"> - <observer name="process_url_rewrite_removing" instance="Magento\CatalogUrlRewrite\Observer\ProductProcessUrlRewriteRemovingObserver" method="execute"/> + <observer name="process_url_rewrite_removing" instance="Magento\CatalogUrlRewrite\Observer\ProductProcessUrlRewriteRemovingObserver"/> </event> <event name="catalog_category_save_after"> - <observer name="process_url_rewrite_saving" instance="Magento\CatalogUrlRewrite\Observer\CategoryProcessUrlRewriteSavingObserver" method="execute"/> + <observer name="process_url_rewrite_saving" instance="Magento\CatalogUrlRewrite\Observer\CategoryProcessUrlRewriteSavingObserver"/> </event> <event name="catalog_product_save_before"> - <observer name="product_url_key_autogeneration" instance="Magento\CatalogUrlRewrite\Observer\ProductUrlKeyAutogeneratorObserver" method="execute"/> + <observer name="product_url_key_autogeneration" instance="Magento\CatalogUrlRewrite\Observer\ProductUrlKeyAutogeneratorObserver"/> </event> <event name="catalog_product_save_after"> - <observer name="process_url_rewrite_saving" instance="Magento\CatalogUrlRewrite\Observer\ProductProcessUrlRewriteSavingObserver" method="execute"/> + <observer name="process_url_rewrite_saving" instance="Magento\CatalogUrlRewrite\Observer\ProductProcessUrlRewriteSavingObserver"/> </event> <event name="catalog_category_move_after"> - <observer name="process_url_rewrite_moving" instance="Magento\CatalogUrlRewrite\Observer\CategoryProcessUrlRewriteMovingObserver" method="execute"/> + <observer name="process_url_rewrite_moving" instance="Magento\CatalogUrlRewrite\Observer\CategoryProcessUrlRewriteMovingObserver"/> </event> </config> diff --git a/app/code/Magento/CatalogUrlRewrite/etc/events.xml b/app/code/Magento/CatalogUrlRewrite/etc/events.xml index 24dd48a69cd0564a363766817abaee05d4013f7d..3b913ee08aac91540a735221b7dffd9a9c94c793 100644 --- a/app/code/Magento/CatalogUrlRewrite/etc/events.xml +++ b/app/code/Magento/CatalogUrlRewrite/etc/events.xml @@ -7,15 +7,15 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="catalog_category_prepare_save"> - <observer name="category_save_rewrites_history_setter" instance="Magento\CatalogUrlRewrite\Observer\CategorySaveRewritesHistorySetterObserver" method="execute"/> + <observer name="category_save_rewrites_history_setter" instance="Magento\CatalogUrlRewrite\Observer\CategorySaveRewritesHistorySetterObserver"/> </event> <event name="catalog_category_save_after"> - <observer name="process_url_rewrite_saving" instance="Magento\CatalogUrlRewrite\Observer\CategoryProcessUrlRewriteSavingObserver" method="execute"/> + <observer name="process_url_rewrite_saving" instance="Magento\CatalogUrlRewrite\Observer\CategoryProcessUrlRewriteSavingObserver"/> </event> <event name="catalog_product_import_bunch_save_after"> - <observer name="catalog_product_import_rewrites_generation" instance="Magento\CatalogUrlRewrite\Observer\AfterImportDataObserver" method="execute"/> + <observer name="catalog_product_import_rewrites_generation" instance="Magento\CatalogUrlRewrite\Observer\AfterImportDataObserver"/> </event> <event name="catalog_product_import_bunch_delete_after"> - <observer name="catalog_product_import_rewrites_delete" instance="Magento\CatalogUrlRewrite\Observer\ClearProductUrlsObserver" method="execute"/> + <observer name="catalog_product_import_rewrites_delete" instance="Magento\CatalogUrlRewrite\Observer\ClearProductUrlsObserver"/> </event> </config> diff --git a/app/code/Magento/CatalogUrlRewrite/etc/setup/events.xml b/app/code/Magento/CatalogUrlRewrite/etc/setup/events.xml index 943b2d756a246390923481f5f6e18a99c8cf2146..b09be7f9dc0ddfcc951764e970b6e871ae5fe57c 100644 --- a/app/code/Magento/CatalogUrlRewrite/etc/setup/events.xml +++ b/app/code/Magento/CatalogUrlRewrite/etc/setup/events.xml @@ -7,6 +7,6 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="catalog_product_save_after"> - <observer name="process_url_rewrite_saving" instance="\Magento\CatalogUrlRewrite\Observer\ProductProcessUrlRewriteSavingObserver" method="execute"/> + <observer name="process_url_rewrite_saving" instance="\Magento\CatalogUrlRewrite\Observer\ProductProcessUrlRewriteSavingObserver"/> </event> </config> diff --git a/app/code/Magento/CatalogWidget/Model/Rule.php b/app/code/Magento/CatalogWidget/Model/Rule.php index 9b784c8c0f4ee6ab2cbed1c949fcb8f04f6039d3..5ad9c4c4877fefb1ae598c198d729fe918f87e9b 100644 --- a/app/code/Magento/CatalogWidget/Model/Rule.php +++ b/app/code/Magento/CatalogWidget/Model/Rule.php @@ -22,7 +22,7 @@ class Rule extends \Magento\Rule\Model\AbstractModel * @param \Magento\Framework\Data\FormFactory $formFactory * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate * @param Rule\Condition\CombineFactory $conditionsFactory - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -32,7 +32,7 @@ class Rule extends \Magento\Rule\Model\AbstractModel \Magento\Framework\Data\FormFactory $formFactory, \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate, \Magento\CatalogWidget\Model\Rule\Condition\CombineFactory $conditionsFactory, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Checkout/Model/ResourceModel/Cart.php b/app/code/Magento/Checkout/Model/ResourceModel/Cart.php index 23b434e6b759e9f1b7d02701089d06e6244af003..f415ada130fb4426d93621767f7e0f61557c409e 100644 --- a/app/code/Magento/Checkout/Model/ResourceModel/Cart.php +++ b/app/code/Magento/Checkout/Model/ResourceModel/Cart.php @@ -10,7 +10,7 @@ namespace Magento\Checkout\Model\ResourceModel; * * @author Magento Core Team <core@magentocommerce.com> */ -class Cart extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Cart extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Model initialization diff --git a/app/code/Magento/Checkout/etc/events.xml b/app/code/Magento/Checkout/etc/events.xml index 24e284722a55fc42ca5ca0a3b859e0321c70a5e8..b243b1f649deef085642c937728657db9bb8127a 100644 --- a/app/code/Magento/Checkout/etc/events.xml +++ b/app/code/Magento/Checkout/etc/events.xml @@ -7,6 +7,6 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="sales_quote_save_after"> - <observer name="set_checkout_quote_id" instance="Magento\Checkout\Observer\SalesQuoteSaveAfterObserver" method="execute" /> + <observer name="set_checkout_quote_id" instance="Magento\Checkout\Observer\SalesQuoteSaveAfterObserver" /> </event> </config> diff --git a/app/code/Magento/Checkout/etc/frontend/events.xml b/app/code/Magento/Checkout/etc/frontend/events.xml index 891b460f3aa219bcab335820673bee85c3f51914..13eaf23168ab81515e941b22792d582d5c8c7bf8 100644 --- a/app/code/Magento/Checkout/etc/frontend/events.xml +++ b/app/code/Magento/Checkout/etc/frontend/events.xml @@ -7,9 +7,9 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="customer_login"> - <observer name="loadCustomerQuote" instance="Magento\Checkout\Observer\LoadCustomerQuoteObserver" method="execute" /> + <observer name="loadCustomerQuote" instance="Magento\Checkout\Observer\LoadCustomerQuoteObserver" /> </event> <event name="customer_logout"> - <observer name="unsetAll" instance="Magento\Checkout\Observer\UnsetAllObserver" method="execute" /> + <observer name="unsetAll" instance="Magento\Checkout\Observer\UnsetAllObserver" /> </event> </config> diff --git a/app/code/Magento/Checkout/view/frontend/web/js/opc-checkout-method.js b/app/code/Magento/Checkout/view/frontend/web/js/opc-checkout-method.js index dd675d53117b01cc785f8497b7e324c100a351a3..0f92f6ea63362f1de7e995e7db9ee721d012b15c 100644 --- a/app/code/Magento/Checkout/view/frontend/web/js/opc-checkout-method.js +++ b/app/code/Magento/Checkout/view/frontend/web/js/opc-checkout-method.js @@ -12,10 +12,11 @@ define([ "jquery", "accordion", + 'Magento_Ui/js/modal/alert', "jquery/ui", "mage/validation/validation", "mage/translate" -], function($, accordion){ +], function($, accordion, alert){ 'use strict'; // Base widget, handle ajax events and first section(Checkout Method) in one page checkout accordion @@ -182,7 +183,9 @@ define([ if (json.isGuestCheckoutAllowed) { if( !guestChecked && !registerChecked ){ - alert( $.mage.__('Please create an account or check out as a guest.') ); + alert({ + content: $.mage.__('Please create an account or check out as a guest.') + }); return false; } @@ -244,7 +247,9 @@ define([ $(this.options.countrySelector).trigger('change'); - alert(msg); + alert({ + content: msg + }); } return; diff --git a/app/code/Magento/Checkout/view/frontend/web/js/opc-payment-info.js b/app/code/Magento/Checkout/view/frontend/web/js/opc-payment-info.js index 8d6793b5ad461d4e63ea69682fa3b81469473b74..bfa87548aea2a170d7372bbc547266c482e9d7f6 100644 --- a/app/code/Magento/Checkout/view/frontend/web/js/opc-payment-info.js +++ b/app/code/Magento/Checkout/view/frontend/web/js/opc-payment-info.js @@ -12,10 +12,11 @@ define([ 'jquery', 'mage/template', + 'Magento_Ui/js/modal/alert', 'jquery/ui', 'mage/translate', 'Magento_Checkout/js/opc-shipping-method' -], function ($, mageTemplate) { +], function ($, mageTemplate, alert) { 'use strict'; // Extension for mage.opcheckout - fifth section(Payment Information) in one page checkout accordion @@ -120,7 +121,9 @@ define([ var methods = this.element.find('[name^="payment["]'); if (methods.length === 0) { - alert($.mage.__('We can\'t complete your order because you don\'t have a payment method set up.')); + alert({ + content: $.mage.__('We can\'t complete your order because you don\'t have a payment method set up.') + }); return false; } @@ -131,7 +134,9 @@ define([ return true; } - alert($.mage.__('Please choose a payment method.')); + alert({ + content: $.mage.__('Please choose a payment method.') + }); return false; }, diff --git a/app/code/Magento/Checkout/view/frontend/web/js/opc-shipping-method.js b/app/code/Magento/Checkout/view/frontend/web/js/opc-shipping-method.js index 6dd87549e1bcfc7ad4d3494d9df4b4aa24da81b8..505db47ab57901c4dcc73330ed27ebf66d0a4968 100644 --- a/app/code/Magento/Checkout/view/frontend/web/js/opc-shipping-method.js +++ b/app/code/Magento/Checkout/view/frontend/web/js/opc-shipping-method.js @@ -11,11 +11,12 @@ */ define([ "jquery", + 'Magento_Ui/js/modal/alert', "jquery/ui", "Magento_Checkout/js/opc-shipping-info", "mage/validation", "mage/translate" -], function($){ +], function($, alert){ 'use strict'; // Extension for mage.opcheckout - fourth section(Shipping Method) in one page checkout accordion @@ -62,13 +63,20 @@ define([ _validateShippingMethod: function() { var methods = this.element.find('[name="shipping_method"]'); if (methods.length === 0) { - alert($.mage.__('We can\'t ship to this address. Please enter another address or edit this one.')); + alert({ + content: $.mage.__('We can\'t ship to this address. Please enter another address or edit this one.') + }); + return false; } + if (methods.filter(':checked').length) { return true; } - alert($.mage.__('Please specify a shipping method.')); + alert({ + content:$.mage.__('Please specify a shipping method.') + }); + return false; } }); diff --git a/app/code/Magento/Checkout/view/frontend/web/js/opcheckout.js b/app/code/Magento/Checkout/view/frontend/web/js/opcheckout.js index b7665f89c0db66e94c016cf4835a7a499da17da5..570dd9edf2d892eb39266dc467fc85f2861c84fc 100644 --- a/app/code/Magento/Checkout/view/frontend/web/js/opcheckout.js +++ b/app/code/Magento/Checkout/view/frontend/web/js/opcheckout.js @@ -10,10 +10,11 @@ define([ 'jquery', 'mage/template', + 'Magento_Ui/js/modal/alert', 'jquery/ui', 'mage/validation', 'mage/translate' -], function ($, mageTemplate) { +], function ($, mageTemplate, alert) { 'use strict'; // Base widget, handle ajax events and first section(Checkout Method) in one page checkout accordion @@ -155,7 +156,9 @@ define([ this.element.find(this.options.checkout.registerCustomerPasswordSelector).show(); } else { - alert($.mage.__('Please create an account or check out as a guest.')); + alert({ + content: $.mage.__('Please create an account or check out as a guest.') + }); return false; } @@ -201,9 +204,13 @@ define([ $(this.options.countrySelector).trigger('change'); - alert(msg); + alert({ + content: msg + }); } else { - alert(response.error); + alert({ + content: response.error + }); } return; @@ -426,7 +433,9 @@ define([ var methods = this.element.find('[name="shipping_method"]'); if (methods.length === 0) { - alert($.mage.__('We can\'t ship to this address. Please choose another address or edit the current one.')); + alert({ + content: $.mage.__('We can\'t ship to this address. Please choose another address or edit the current one.') + }); return false; } @@ -435,7 +444,9 @@ define([ return true; } - alert($.mage.__('Please specify a shipping method.')); + alert({ + content: $.mage.__('Please specify a shipping method.') + }); return false; } @@ -550,7 +561,9 @@ define([ var methods = this.element.find('[name^="payment["]'); if (methods.length === 0) { - alert($.mage.__('We can\'t complete your order because you don\'t have a payment method set up.')); + alert({ + content: $.mage.__('We can\'t complete your order because you don\'t have a payment method set up.') + }); return false; } @@ -561,7 +574,9 @@ define([ return true; } - alert($.mage.__('Please choose a payment method.')); + alert({ + content: $.mage.__('Please choose a payment method.') + }); return false; }, diff --git a/app/code/Magento/Checkout/view/frontend/web/js/payment.js b/app/code/Magento/Checkout/view/frontend/web/js/payment.js index 507322ba4a200b87d773aaf1f60d3690ccfe7a3f..1442bb787605236b3b40abfe430e9b98af6afd24 100644 --- a/app/code/Magento/Checkout/view/frontend/web/js/payment.js +++ b/app/code/Magento/Checkout/view/frontend/web/js/payment.js @@ -10,9 +10,10 @@ define([ 'jquery', 'mage/template', + 'Magento_Ui/js/modal/alert', 'jquery/ui', 'mage/translate' -], function ($, mageTemplate) { +], function ($, mageTemplate, alert) { 'use strict'; $.widget('mage.payment', { @@ -78,13 +79,17 @@ define([ isValid = false; if (methods.length === 0) { - alert($.mage.__('We can\'t complete your order because you don\'t have a payment method set up.')); + alert({ + content: $.mage.__('We can\'t complete your order because you don\'t have a payment method set up.') + }); } else if (this.options.checkoutPrice < this.options.minBalance) { isValid = true; } else if (methods.filter('input:radio:checked').length) { isValid = true; } else { - alert($.mage.__('Please choose a payment method.')); + alert({ + content: $.mage.__('Please choose a payment method.') + }); } return isValid; diff --git a/app/code/Magento/Checkout/view/frontend/web/js/sidebar.js b/app/code/Magento/Checkout/view/frontend/web/js/sidebar.js index 98d2c607ae0c90b4bc241625101c59d9e71b985a..34501bbeb107889899f1e26478fa41aadb772847 100644 --- a/app/code/Magento/Checkout/view/frontend/web/js/sidebar.js +++ b/app/code/Magento/Checkout/view/frontend/web/js/sidebar.js @@ -8,9 +8,11 @@ define([ "jquery", 'Magento_Customer/js/model/authentication-popup', 'Magento_Customer/js/customer-data', + 'Magento_Ui/js/modal/alert', + 'Magento_Ui/js/modal/confirm', "jquery/ui", "mage/decorate" -], function($, authenticationPopup, customerData){ +], function($, authenticationPopup, customerData, alert, confirm){ $.widget('mage.sidebar', { options: { @@ -46,9 +48,14 @@ define([ }, this); events['click ' + this.options.button.remove] = function(event) { event.stopPropagation(); - if (confirm(self.options.confirmMessage)) { - self._removeItem($(event.currentTarget)); - } + confirm({ + content: self.options.confirmMessage, + actions: { + confirm: function () { + self._removeItem($(event.currentTarget)); + } + } + }); }; events['keyup ' + this.options.item.qty] = function(event) { self._showItemButton($(event.target)); @@ -169,7 +176,9 @@ define([ } else { var msg = response.error_message; if (msg) { - window.alert($.mage.__(msg)); + alert({ + content: $.mage.__(msg) + }); } } }) diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/cart/shipping-rates.js b/app/code/Magento/Checkout/view/frontend/web/js/view/cart/shipping-rates.js index e569f88a11125b175001015e70581d65b7fbc410..f8a63000aa8ff75024939cfd7543562c6f79b0c6 100644 --- a/app/code/Magento/Checkout/view/frontend/web/js/view/cart/shipping-rates.js +++ b/app/code/Magento/Checkout/view/frontend/web/js/view/cart/shipping-rates.js @@ -42,7 +42,7 @@ define( /** * @override */ - initProperties: function () { + initObservable: function () { var self = this; this._super(); diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/estimation.js b/app/code/Magento/Checkout/view/frontend/web/js/view/estimation.js index 76e34d4cbf5207e185eeb395a7284c37e8dbcac4..f1f92feb37ad7710f38fd77111718aa4b99c1148 100644 --- a/app/code/Magento/Checkout/view/frontend/web/js/view/estimation.js +++ b/app/code/Magento/Checkout/view/frontend/web/js/view/estimation.js @@ -13,6 +13,7 @@ define( function (Component, quote, priceUtils, totals, sidebarModel) { 'use strict'; return Component.extend({ + isLoading: totals.isLoading, getQuantity: function() { if (totals.totals()) { return parseFloat(totals.totals().items_qty); @@ -34,7 +35,6 @@ define( getValue: function () { return this.getFormattedPrice(this.getPureValue()); } - }); } ); diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/payment/default.js b/app/code/Magento/Checkout/view/frontend/web/js/view/payment/default.js index 9f235c45ba49ee5c86315afc05878b31f6c59ddb..4d80012fd1ffe3b143f89e4b4430aa296e61b56a 100644 --- a/app/code/Magento/Checkout/view/frontend/web/js/view/payment/default.js +++ b/app/code/Magento/Checkout/view/frontend/web/js/view/payment/default.js @@ -17,7 +17,7 @@ define( 'uiRegistry', 'Magento_Checkout/js/model/payment/additional-validators', 'Magento_Ui/js/model/messages', - 'Magento_Ui/js/core/renderer/layout' + 'uiLayout' ], function ( ko, @@ -157,11 +157,6 @@ define( return { "method": this.item.method, "po_number": null, - "cc_owner": null, - "cc_number": null, - "cc_type": null, - "cc_exp_year": null, - "cc_exp_month": null, "additional_data": null }; }, diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/payment/list.js b/app/code/Magento/Checkout/view/frontend/web/js/view/payment/list.js index 4559bbbc745f0ebb7eab1cfd6ec8e848c9f10874..7764f5ec9e0c8ddfe55af4847a6d0110becfe765 100644 --- a/app/code/Magento/Checkout/view/frontend/web/js/view/payment/list.js +++ b/app/code/Magento/Checkout/view/frontend/web/js/view/payment/list.js @@ -9,7 +9,7 @@ define([ 'uiComponent', 'Magento_Checkout/js/model/payment/method-list', 'Magento_Checkout/js/model/payment/renderer-list', - 'Magento_Ui/js/core/renderer/layout', + 'uiLayout', 'Magento_Checkout/js/model/checkout-data-resolver' ], function (_, ko, utils, Component, paymentMethods, rendererList, layout, checkoutDataResolver) { 'use strict'; diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/shipping-address/address-renderer/default.js b/app/code/Magento/Checkout/view/frontend/web/js/view/shipping-address/address-renderer/default.js index 221e9f6f1514cc48740413f6271766ead7e4f6c4..0b932a29e52d99a48db84b7c8ea93ea1a56eec8b 100644 --- a/app/code/Magento/Checkout/view/frontend/web/js/view/shipping-address/address-renderer/default.js +++ b/app/code/Magento/Checkout/view/frontend/web/js/view/shipping-address/address-renderer/default.js @@ -20,7 +20,7 @@ define([ template: 'Magento_Checkout/shipping-address/address-renderer/default' }, - initProperties: function () { + initObservable: function () { this._super(); this.isSelected = ko.computed(function() { var isSelected = false; diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/shipping-address/list.js b/app/code/Magento/Checkout/view/frontend/web/js/view/shipping-address/list.js index 352d8e628e37f4a598115181c8a3c576e56b8ed2..5ee2b5d4ed9fe79316b88265380e8c45c1fba929 100644 --- a/app/code/Magento/Checkout/view/frontend/web/js/view/shipping-address/list.js +++ b/app/code/Magento/Checkout/view/frontend/web/js/view/shipping-address/list.js @@ -8,7 +8,7 @@ define([ 'ko', 'mageUtils', 'uiComponent', - 'Magento_Ui/js/core/renderer/layout', + 'uiLayout', 'Magento_Customer/js/model/address-list' ], function (_, ko, utils, Component, layout, addressList) { 'use strict'; @@ -44,7 +44,7 @@ define([ return this; }, - initProperties: function () { + initConfig: function () { this._super(); // the list of child components that are responsible for address rendering this.rendererComponents = []; diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/shipping-information/list.js b/app/code/Magento/Checkout/view/frontend/web/js/view/shipping-information/list.js index 36342149c66e6fcc140e5c1d6ab9316c45e26958..f024358ae0dace9e0cb362f195e6234e3e6181fe 100644 --- a/app/code/Magento/Checkout/view/frontend/web/js/view/shipping-information/list.js +++ b/app/code/Magento/Checkout/view/frontend/web/js/view/shipping-information/list.js @@ -8,7 +8,7 @@ define([ 'ko', 'mageUtils', 'uiComponent', - 'Magento_Ui/js/core/renderer/layout', + 'uiLayout', 'Magento_Checkout/js/model/quote' ], function ($, ko, utils, Component, layout, quote) { 'use strict'; @@ -35,7 +35,7 @@ define([ return this; }, - initProperties: function () { + initConfig: function () { this._super(); // the list of child components that are responsible for address rendering this.rendererComponents = {}; diff --git a/app/code/Magento/Checkout/view/frontend/web/template/estimation.html b/app/code/Magento/Checkout/view/frontend/web/template/estimation.html index dd037ff8d36229c824777641c8045b9dfbab5890..36009ab7b4634ab66da8c232712b33c6aa052fd1 100644 --- a/app/code/Magento/Checkout/view/frontend/web/template/estimation.html +++ b/app/code/Magento/Checkout/view/frontend/web/template/estimation.html @@ -4,7 +4,7 @@ * See COPYING.txt for license details. */ --> -<div class="opc-estimated-wrapper"> +<div class="opc-estimated-wrapper" data-bind="blockLoader: isLoading"> <div class="estimated-block"> <span class="estimated-label" data-bind="i18n: 'Estimated Total'"></span> <span class="estimated-price" data-bind="i18n: getValue()"></span> diff --git a/app/code/Magento/CheckoutAgreements/Model/ResourceModel/Agreement.php b/app/code/Magento/CheckoutAgreements/Model/ResourceModel/Agreement.php index 1aac5226375dcb1e6ce6d6958e50f671b0df698e..1be4a1482327452f2eb955ec935860f489820276 100644 --- a/app/code/Magento/CheckoutAgreements/Model/ResourceModel/Agreement.php +++ b/app/code/Magento/CheckoutAgreements/Model/ResourceModel/Agreement.php @@ -8,7 +8,7 @@ namespace Magento\CheckoutAgreements\Model\ResourceModel; /** * Resource Model for Checkout Agreement */ -class Agreement extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Agreement extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * @var \Magento\Framework\Filter\FilterManager @@ -16,13 +16,13 @@ class Agreement extends \Magento\Framework\Model\ModelResource\Db\AbstractDb protected $filterManager; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Framework\Filter\FilterManager $filterManager * @param string $connectionName * @codeCoverageIgnore */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Framework\Filter\FilterManager $filterManager, $connectionName = null ) { diff --git a/app/code/Magento/CheckoutAgreements/Model/ResourceModel/Agreement/Collection.php b/app/code/Magento/CheckoutAgreements/Model/ResourceModel/Agreement/Collection.php index 28071d999f16b47d8d8ee8ef30f820547821decc..6356de345f57ca06b6f95f6f8d156ad14a9e3e4b 100644 --- a/app/code/Magento/CheckoutAgreements/Model/ResourceModel/Agreement/Collection.php +++ b/app/code/Magento/CheckoutAgreements/Model/ResourceModel/Agreement/Collection.php @@ -8,7 +8,7 @@ namespace Magento\CheckoutAgreements\Model\ResourceModel\Agreement; /** * Resource Model for Agreement Collection */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * @var array diff --git a/app/code/Magento/Cms/Controller/Adminhtml/Page/InlineEdit.php b/app/code/Magento/Cms/Controller/Adminhtml/Page/InlineEdit.php index 678ff962b23d67d3002608f9e18318815e540036..52882ff71fddf063388e2a6139606ea86610d36f 100644 --- a/app/code/Magento/Cms/Controller/Adminhtml/Page/InlineEdit.php +++ b/app/code/Magento/Cms/Controller/Adminhtml/Page/InlineEdit.php @@ -10,6 +10,11 @@ use Magento\Cms\Api\PageRepositoryInterface as PageRepository; use Magento\Framework\Controller\Result\JsonFactory; use Magento\Cms\Api\Data\PageInterface; +/** + * Cms page grid inline edit controller + * + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + */ class InlineEdit extends \Magento\Backend\App\Action { /** @var PostDataProcessor */ @@ -63,7 +68,8 @@ class InlineEdit extends \Magento\Backend\App\Action try { $pageData = $this->dataProcessor->filter($postItems[$pageId]); $this->validatePost($pageData, $page, $error, $messages); - $page->setData(array_merge($page->getData(), $pageData)); + $extendedPageData = $page->getData(); + $this->setCmsPageData($page, $extendedPageData, $pageData); $this->pageRepository->save($page); } catch (\Magento\Framework\Exception\LocalizedException $e) { $messages[] = $this->getErrorWithPageId($page, $e->getMessage()); @@ -116,4 +122,18 @@ class InlineEdit extends \Magento\Backend\App\Action { return '[Page ID: ' . $page->getId() . '] ' . $errorText; } + + /** + * Set cms page data + * + * @param \Magento\Cms\Model\Page $page + * @param array $extendedPageData + * @param array $pageData + * @return $this + */ + public function setCmsPageData(\Magento\Cms\Model\Page $page, array $extendedPageData, array $pageData) + { + $page->setData(array_merge($page->getData(), $extendedPageData, $pageData)); + return $this; + } } diff --git a/app/code/Magento/Cms/Model/Page/Source/IsActive.php b/app/code/Magento/Cms/Model/Page/Source/IsActive.php index 81ec863288e3d739deb7dfd6ac84f4f55b948260..dda8f257c0e483b2f929600e1a850aac852a127f 100644 --- a/app/code/Magento/Cms/Model/Page/Source/IsActive.php +++ b/app/code/Magento/Cms/Model/Page/Source/IsActive.php @@ -34,8 +34,8 @@ class IsActive implements OptionSourceInterface */ public function toOptionArray() { - $options[] = ['label' => '', 'value' => '']; $availableOptions = $this->cmsPage->getAvailableStatuses(); + $options = []; foreach ($availableOptions as $key => $value) { $options[] = [ 'label' => $value, diff --git a/app/code/Magento/Cms/Model/Page/Source/IsActiveFilter.php b/app/code/Magento/Cms/Model/Page/Source/IsActiveFilter.php new file mode 100644 index 0000000000000000000000000000000000000000..30af93149c5b2213cf023c653822cd4f941a48a8 --- /dev/null +++ b/app/code/Magento/Cms/Model/Page/Source/IsActiveFilter.php @@ -0,0 +1,20 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Cms\Model\Page\Source; + +/** + * Is active filter source + */ +class IsActiveFilter extends IsActive +{ + /** + * {@inheritdoc} + */ + public function toOptionArray() + { + return array_merge([['label' => '', 'value' => '']], parent::toOptionArray()); + } +} diff --git a/app/code/Magento/Cms/Model/Page/Source/PageLayout.php b/app/code/Magento/Cms/Model/Page/Source/PageLayout.php index 071e071a7aa740b699e36db241f15b2e8e05467b..3400f5810931e4c0d83324faaa8dde36d4b06019 100644 --- a/app/code/Magento/Cms/Model/Page/Source/PageLayout.php +++ b/app/code/Magento/Cms/Model/Page/Source/PageLayout.php @@ -43,8 +43,9 @@ class PageLayout implements OptionSourceInterface if ($this->options !== null) { return $this->options; } - $options[] = ['label' => '', 'value' => '']; + $configOptions = $this->pageLayoutBuilder->getPageLayoutsConfig()->getOptions(); + $options = []; foreach ($configOptions as $key => $value) { $options[] = [ 'label' => $value, diff --git a/app/code/Magento/Cms/Model/Page/Source/PageLayoutFilter.php b/app/code/Magento/Cms/Model/Page/Source/PageLayoutFilter.php new file mode 100644 index 0000000000000000000000000000000000000000..fe2dfccc023a64f9f8f3a59283f71b585b568357 --- /dev/null +++ b/app/code/Magento/Cms/Model/Page/Source/PageLayoutFilter.php @@ -0,0 +1,20 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Cms\Model\Page\Source; + +/** + * Page layout filter source + */ +class PageLayoutFilter extends PageLayout +{ + /** + * {@inheritdoc} + */ + public function toOptionArray() + { + return array_merge([['label' => '', 'value' => '']], parent::toOptionArray()); + } +} diff --git a/app/code/Magento/Cms/Model/Page/Source/Theme.php b/app/code/Magento/Cms/Model/Page/Source/Theme.php index dc0568a2b4c54fc063f06b2c2740555d1c3c4546..ab6b005a5e38075ecb70e1a2ea7c1c87bf43f8fd 100644 --- a/app/code/Magento/Cms/Model/Page/Source/Theme.php +++ b/app/code/Magento/Cms/Model/Page/Source/Theme.php @@ -35,8 +35,6 @@ class Theme implements OptionSourceInterface */ public function toOptionArray() { - $options[] = ['label' => '', 'value' => '']; - return $options + $this->themeList->getLabels(); - + return $this->themeList->getLabels(); } } diff --git a/app/code/Magento/Cms/Model/Page/Source/ThemeFilter.php b/app/code/Magento/Cms/Model/Page/Source/ThemeFilter.php new file mode 100644 index 0000000000000000000000000000000000000000..946799c2214b7221733397d83bef9043a41ce235 --- /dev/null +++ b/app/code/Magento/Cms/Model/Page/Source/ThemeFilter.php @@ -0,0 +1,20 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Cms\Model\Page\Source; + +/** + * Theme filter source + */ +class ThemeFilter extends Theme +{ + /** + * {@inheritdoc} + */ + public function toOptionArray() + { + return array_merge([['label' => '', 'value' => '']], parent::toOptionArray()); + } +} diff --git a/app/code/Magento/Cms/Model/ResourceModel/AbstractCollection.php b/app/code/Magento/Cms/Model/ResourceModel/AbstractCollection.php index 104c36bd80a9d6749684f0d6a423cf891fbdc9ac..7b2e0829cf4d350458bae135b08986d9e68f61c7 100644 --- a/app/code/Magento/Cms/Model/ResourceModel/AbstractCollection.php +++ b/app/code/Magento/Cms/Model/ResourceModel/AbstractCollection.php @@ -8,7 +8,7 @@ namespace Magento\Cms\Model\ResourceModel; /** * Abstract collection of CMS pages and blocks */ -abstract class AbstractCollection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +abstract class AbstractCollection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Store manager @@ -24,7 +24,7 @@ abstract class AbstractCollection extends \Magento\Framework\Model\ModelResource * @param \Magento\Framework\Event\ManagerInterface $eventManager * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param \Magento\Framework\DB\Adapter\AdapterInterface|null $connection - * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb|null $resource + * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb|null $resource */ public function __construct( \Magento\Framework\Data\Collection\EntityFactoryInterface $entityFactory, @@ -33,7 +33,7 @@ abstract class AbstractCollection extends \Magento\Framework\Model\ModelResource \Magento\Framework\Event\ManagerInterface $eventManager, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Framework\DB\Adapter\AdapterInterface $connection = null, - \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null + \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null ) { parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource); $this->storeManager = $storeManager; diff --git a/app/code/Magento/Cms/Model/ResourceModel/Block.php b/app/code/Magento/Cms/Model/ResourceModel/Block.php index 442f9274d31a84996ab589c98780ec9541a624cf..32469ae77ac3abb4c42dbd351cab9e57dee77af8 100644 --- a/app/code/Magento/Cms/Model/ResourceModel/Block.php +++ b/app/code/Magento/Cms/Model/ResourceModel/Block.php @@ -8,7 +8,7 @@ namespace Magento\Cms\Model\ResourceModel; /** * CMS block model */ -class Block extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Block extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * @var \Magento\Framework\Stdlib\DateTime\DateTime @@ -25,13 +25,13 @@ class Block extends \Magento\Framework\Model\ModelResource\Db\AbstractDb /** * Construct * - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Framework\Stdlib\DateTime\DateTime $date * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Framework\Stdlib\DateTime\DateTime $date, \Magento\Store\Model\StoreManagerInterface $storeManager, $connectionName = null diff --git a/app/code/Magento/Cms/Model/ResourceModel/Block/Grid/Collection.php b/app/code/Magento/Cms/Model/ResourceModel/Block/Grid/Collection.php index 21df8bca40cab984db8ec3fa65ee32d575d68c57..e658aa86cb571cc3c035f3cdc1b3458f1cb0a55a 100644 --- a/app/code/Magento/Cms/Model/ResourceModel/Block/Grid/Collection.php +++ b/app/code/Magento/Cms/Model/ResourceModel/Block/Grid/Collection.php @@ -31,7 +31,7 @@ class Collection extends BlockCollection implements SearchResultInterface * @param string $resourceModel * @param string $model * @param string|null $connection - * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource + * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource * * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ @@ -47,7 +47,7 @@ class Collection extends BlockCollection implements SearchResultInterface $resourceModel, $model = 'Magento\Framework\View\Element\UiComponent\DataProvider\Document', $connection = null, - \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null + \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null ) { parent::__construct( $entityFactory, diff --git a/app/code/Magento/Cms/Model/ResourceModel/Page.php b/app/code/Magento/Cms/Model/ResourceModel/Page.php index 9d4634717ac4dbbaba4118a389b68ef8f0e0b855..a0bcda0d530251d511e0f0b0541d17ac03476fc1 100644 --- a/app/code/Magento/Cms/Model/ResourceModel/Page.php +++ b/app/code/Magento/Cms/Model/ResourceModel/Page.php @@ -11,7 +11,7 @@ namespace Magento\Cms\Model\ResourceModel; /** * Cms page mysql resource */ -class Page extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Page extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Store model @@ -40,14 +40,14 @@ class Page extends \Magento\Framework\Model\ModelResource\Db\AbstractDb /** * Construct * - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Framework\Stdlib\DateTime\DateTime $date * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param \Magento\Framework\Stdlib\DateTime $dateTime * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Framework\Stdlib\DateTime\DateTime $date, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Framework\Stdlib\DateTime $dateTime, diff --git a/app/code/Magento/Cms/Model/ResourceModel/Page/Grid/Collection.php b/app/code/Magento/Cms/Model/ResourceModel/Page/Grid/Collection.php index 3eb313183956a1a99d4a2e32dc0230e0ae2e1ea3..49fbeaa47d6d84753e543be4e7f3c25d76fb736a 100644 --- a/app/code/Magento/Cms/Model/ResourceModel/Page/Grid/Collection.php +++ b/app/code/Magento/Cms/Model/ResourceModel/Page/Grid/Collection.php @@ -27,12 +27,12 @@ class Collection extends PageCollection implements SearchResultInterface * @param \Magento\Framework\Event\ManagerInterface $eventManager * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param mixed|null $mainTable - * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $eventPrefix + * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $eventPrefix * @param mixed $eventObject * @param mixed $resourceModel * @param string $model * @param null $connection - * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb|null $resource + * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb|null $resource * * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ @@ -48,7 +48,7 @@ class Collection extends PageCollection implements SearchResultInterface $resourceModel, $model = 'Magento\Framework\View\Element\UiComponent\DataProvider\Document', $connection = null, - \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null + \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null ) { parent::__construct( $entityFactory, diff --git a/app/code/Magento/Cms/Test/Unit/Controller/Page/InlineEditTest.php b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/InlineEditTest.php similarity index 64% rename from app/code/Magento/Cms/Test/Unit/Controller/Page/InlineEditTest.php rename to app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/InlineEditTest.php index 64218dc835db02febeb3564f7fe1e0e2a3b51141..8402fbc8f3b7fcdb71109b759c8d6b4a7867eb72 100644 --- a/app/code/Magento/Cms/Test/Unit/Controller/Page/InlineEditTest.php +++ b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/InlineEditTest.php @@ -3,7 +3,7 @@ * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ -namespace Magento\Cms\Test\Unit\Controller\Page; +namespace Magento\Cms\Test\Unit\Controller\Adminhtml\Page; use Magento\Cms\Controller\Adminhtml\Page\InlineEdit; @@ -49,38 +49,11 @@ class InlineEditTest extends \PHPUnit_Framework_TestCase { $helper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this); - $this->request = $this->getMockForAbstractClass( - 'Magento\Framework\App\RequestInterface', - [], - '', - false - ); - $this->messageManager = $this->getMockForAbstractClass( - 'Magento\Framework\Message\ManagerInterface', - [], - '', - false - ); - $this->messageCollection = $this->getMock( - 'Magento\Framework\Message\Collection', - [], - [], - '', - false - ); - $this->message = $this->getMockForAbstractClass( - 'Magento\Framework\Message\MessageInterface', - [], - '', - false - ); - $this->cmsPage = $this->getMock( - 'Magento\Cms\Model\Page', - [], - [], - '', - false - ); + $this->request = $this->getMockForAbstractClass('Magento\Framework\App\RequestInterface'); + $this->messageManager = $this->getMockForAbstractClass('Magento\Framework\Message\ManagerInterface'); + $this->messageCollection = $this->getMock('Magento\Framework\Message\Collection', [], [], '', false); + $this->message = $this->getMockForAbstractClass('Magento\Framework\Message\MessageInterface'); + $this->cmsPage = $this->getMock('Magento\Cms\Model\Page', [], [], '', false); $this->context = $helper->getObject( 'Magento\Backend\App\Action\Context', [ @@ -95,12 +68,7 @@ class InlineEditTest extends \PHPUnit_Framework_TestCase '', false ); - $this->pageRepository = $this->getMockForAbstractClass( - 'Magento\Cms\Api\PageRepositoryInterface', - [], - '', - false - ); + $this->pageRepository = $this->getMockForAbstractClass('Magento\Cms\Api\PageRepositoryInterface'); $this->resultJson = $this->getMock('Magento\Framework\Controller\Result\Json', [], [], '', false); $this->jsonFactory = $this->getMock( 'Magento\Framework\Controller\Result\JsonFactory', @@ -125,15 +93,14 @@ class InlineEditTest extends \PHPUnit_Framework_TestCase 'identifier' => 'no-route' ] ]; - - $this->request->expects($this->at(1)) - ->method('getParam') - ->with('isAjax') - ->willReturn(true); - $this->request->expects($this->at(0)) + $this->request->expects($this->any()) ->method('getParam') - ->with('items', []) - ->willReturn($postData); + ->willReturnMap( + [ + ['isAjax', null, true], + ['items', [], $postData] + ] + ); $this->pageRepository->expects($this->once()) ->method('getById') ->with(1) @@ -160,7 +127,7 @@ class InlineEditTest extends \PHPUnit_Framework_TestCase $this->cmsPage->expects($this->atLeastOnce()) ->method('getId') ->willReturn('1'); - $this->cmsPage->expects($this->once()) + $this->cmsPage->expects($this->atLeastOnce()) ->method('getData') ->willReturn([ 'layout' => '1column', @@ -196,7 +163,7 @@ class InlineEditTest extends \PHPUnit_Framework_TestCase ]) ->willReturnSelf(); - $this->controller->execute(); + $this->assertSame($this->resultJson, $this->controller->execute()); } public function testExecuteWithRuntimeException() @@ -217,7 +184,7 @@ class InlineEditTest extends \PHPUnit_Framework_TestCase ]) ->willReturnSelf(); - $this->controller->execute(); + $this->assertSame($this->resultJson, $this->controller->execute()); } public function testExecuteWithException() @@ -238,7 +205,7 @@ class InlineEditTest extends \PHPUnit_Framework_TestCase ]) ->willReturnSelf(); - $this->controller->execute(); + $this->assertSame($this->resultJson, $this->controller->execute()); } public function testExecuteWithoutData() @@ -246,14 +213,14 @@ class InlineEditTest extends \PHPUnit_Framework_TestCase $this->jsonFactory->expects($this->once()) ->method('create') ->willReturn($this->resultJson); - $this->request->expects($this->at(0)) + $this->request->expects($this->any()) ->method('getParam') - ->with('items', []) - ->willReturn([]); - $this->request->expects($this->at(1)) - ->method('getParam') - ->with('isAjax', null) - ->willReturn(true); + ->willReturnMap( + [ + ['items', [], []], + ['isAjax', null, true] + ] + ); $this->resultJson->expects($this->once()) ->method('setData') ->with([ @@ -264,6 +231,71 @@ class InlineEditTest extends \PHPUnit_Framework_TestCase ]) ->willReturnSelf(); - $this->controller->execute(); + $this->assertSame($this->resultJson, $this->controller->execute()); + } + + public function testSetCmsPageData() + { + $extendedPageData = [ + 'page_id' => '2', + 'title' => 'Home Page', + 'page_layout' => '1column', + 'identifier' => 'home', + 'content_heading' => 'Home Page', + 'content' => 'CMS homepage content goes here.', + 'is_active' => '1', + 'sort_order' => '1', + 'custom_theme' => '3', + 'website_root' => '1', + 'under_version_control' => '0', + 'store_id' => ['0'] + ]; + $pageData = [ + 'page_id' => '2', + 'title' => 'Home Page', + 'page_layout' => '1column', + 'identifier' => 'home', + 'is_active' => '1', + 'custom_theme' => '3', + 'under_version_control' => '0', + ]; + $getData = [ + 'page_id' => '2', + 'title' => 'Home Page', + 'page_layout' => '1column', + 'identifier' => 'home', + 'content_heading' => 'Home Page', + 'content' => 'CMS homepage content goes here.', + 'is_active' => '1', + 'sort_order' => '1', + 'custom_theme' => '3', + 'custom_root_template' => '1column', + 'published_revision_id' => '0', + 'website_root' => '1', + 'under_version_control' => '0', + 'store_id' => ['0'] + ]; + $mergedData = [ + 'page_id' => '2', + 'title' => 'Home Page', + 'page_layout' => '1column', + 'identifier' => 'home', + 'content_heading' => 'Home Page', + 'content' => 'CMS homepage content goes here.', + 'is_active' => '1', + 'sort_order' => '1', + 'custom_theme' => '3', + 'custom_root_template' => '1column', + 'published_revision_id' => '0', + 'website_root' => '1', + 'under_version_control' => '0', + 'store_id' => ['0'] + ]; + $this->cmsPage->expects($this->once())->method('getData')->willReturn($getData); + $this->cmsPage->expects($this->once())->method('setData')->with($mergedData)->willReturnSelf(); + $this->assertSame( + $this->controller, + $this->controller->setCmsPageData($this->cmsPage, $extendedPageData, $pageData) + ); } } diff --git a/app/code/Magento/Cms/Test/Unit/Model/Page/Source/IsActiveFilterTest.php b/app/code/Magento/Cms/Test/Unit/Model/Page/Source/IsActiveFilterTest.php new file mode 100644 index 0000000000000000000000000000000000000000..58b6d4ba6012c8b2a8be6e88144f0cec23e78d48 --- /dev/null +++ b/app/code/Magento/Cms/Test/Unit/Model/Page/Source/IsActiveFilterTest.php @@ -0,0 +1,34 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Cms\Test\Unit\Model\Page\Source; + +class IsActiveFilterTest extends IsActiveTest +{ + /** + * {@inheritdoc} + */ + protected function getSourceClassName() + { + return 'Magento\Cms\Model\Page\Source\IsActiveFilter'; + } + + /** + * {@inheritdoc} + */ + public function getAvailableStatusesDataProvider() + { + return [ + [ + [], + [['label' => '', 'value' => '']], + ], + [ + ['testStatus' => 'testValue'], + [['label' => '', 'value' => ''], ['label' => 'testValue', 'value' => 'testStatus']], + ], + ]; + } +} diff --git a/app/code/Magento/Cms/Test/Unit/Model/Page/Source/IsActiveTest.php b/app/code/Magento/Cms/Test/Unit/Model/Page/Source/IsActiveTest.php new file mode 100644 index 0000000000000000000000000000000000000000..cb9edf9126abcb50a3d2fb1f0273aa45dfec5abc --- /dev/null +++ b/app/code/Magento/Cms/Test/Unit/Model/Page/Source/IsActiveTest.php @@ -0,0 +1,83 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Cms\Test\Unit\Model\Page\Source; + +use Magento\Cms\Model\Page; +use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; + +class IsActiveTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var Page|\PHPUnit_Framework_MockObject_MockObject + */ + protected $cmsPageMock; + + /** + * @var ObjectManager + */ + protected $objectManagerHelper; + + /** + * @var Page\Source\IsActive + */ + protected $object; + + /** + * {@inheritdoc} + */ + protected function setUp() + { + $this->objectManagerHelper = new ObjectManager($this); + $this->cmsPageMock = $this->getMockBuilder('Magento\Cms\Model\Page') + ->disableOriginalConstructor() + ->setMethods(['getAvailableStatuses']) + ->getMock(); + + $this->object = $this->objectManagerHelper->getObject($this->getSourceClassName(), [ + 'cmsPage' => $this->cmsPageMock, + ]); + } + + /** + * @return string + */ + protected function getSourceClassName() + { + return 'Magento\Cms\Model\Page\Source\IsActive'; + } + + /** + * @param array $availableStatuses + * @param array $expected + * @return void + * @dataProvider getAvailableStatusesDataProvider + */ + public function testToOptionArray(array $availableStatuses, array $expected) + { + $this->cmsPageMock->expects($this->once()) + ->method('getAvailableStatuses') + ->willReturn($availableStatuses); + + $this->assertSame($expected, $this->object->toOptionArray()); + } + + /** + * @return array + */ + public function getAvailableStatusesDataProvider() + { + return [ + [ + [], + [], + ], + [ + ['testStatus' => 'testValue'], + [['label' => 'testValue', 'value' => 'testStatus']], + ], + ]; + } +} diff --git a/app/code/Magento/Cms/Test/Unit/Model/Page/Source/PageLayoutFilterTest.php b/app/code/Magento/Cms/Test/Unit/Model/Page/Source/PageLayoutFilterTest.php new file mode 100644 index 0000000000000000000000000000000000000000..a67820cbfc6afe059c2a91e6e8ee6c05bed31489 --- /dev/null +++ b/app/code/Magento/Cms/Test/Unit/Model/Page/Source/PageLayoutFilterTest.php @@ -0,0 +1,34 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Cms\Test\Unit\Model\Page\Source; + +class PageLayoutFilterTest extends PageLayoutTest +{ + /** + * @return string + */ + protected function getSourceClassName() + { + return 'Magento\Cms\Model\Page\Source\PageLayoutFilter'; + } + + /** + * {@inheritdoc} + */ + public function getOptionsDataProvider() + { + return [ + [ + [], + [['label' => '', 'value' => '']], + ], + [ + ['testStatus' => 'testValue'], + [['label' => '', 'value' => ''], ['label' => 'testValue', 'value' => 'testStatus']], + ], + ]; + } +} diff --git a/app/code/Magento/Cms/Test/Unit/Model/Page/Source/PageLayoutTest.php b/app/code/Magento/Cms/Test/Unit/Model/Page/Source/PageLayoutTest.php new file mode 100644 index 0000000000000000000000000000000000000000..ccf58e798ae276c4993c39da4acb2eab648bec9a --- /dev/null +++ b/app/code/Magento/Cms/Test/Unit/Model/Page/Source/PageLayoutTest.php @@ -0,0 +1,99 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Cms\Test\Unit\Model\Page\Source; + +use Magento\Cms\Model\Page\Source\PageLayout; +use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; +use Magento\Framework\View\Model\PageLayout\Config\BuilderInterface; +use Magento\Framework\View\PageLayout\Config; + +class PageLayoutTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var BuilderInterface|\PHPUnit_Framework_MockObject_MockObject + */ + protected $builderMock; + + /** + * @var Config|\PHPUnit_Framework_MockObject_MockObject + */ + protected $pageLayoutConfigMock; + + /** + * @var ObjectManager + */ + protected $objectManagerHelper; + + /** + * @var PageLayout + */ + protected $object; + + /** + * {@inheritdoc} + */ + protected function setUp() + { + $this->objectManagerHelper = new ObjectManager($this); + $this->builderMock = $this->getMockBuilder('Magento\Framework\View\Model\PageLayout\Config\BuilderInterface') + ->disableOriginalConstructor() + ->setMethods(['getPageLayoutsConfig']) + ->getMock(); + $this->pageLayoutConfigMock = $this->getMockBuilder('Magento\Framework\View\PageLayout\Config') + ->disableOriginalConstructor() + ->setMethods(['getOptions']) + ->getMock(); + + $this->builderMock->expects($this->any()) + ->method('getPageLayoutsConfig') + ->willReturn($this->pageLayoutConfigMock); + + $this->object = $this->objectManagerHelper->getObject($this->getSourceClassName(), [ + 'pageLayoutBuilder' => $this->builderMock, + ]); + } + + /** + * @return string + */ + protected function getSourceClassName() + { + return 'Magento\Cms\Model\Page\Source\PageLayout'; + } + + /** + * @param array $options + * @param array $expected + * @return void + * @dataProvider getOptionsDataProvider + */ + public function testToOptionArray(array $options, array $expected) + { + $this->pageLayoutConfigMock->expects($this->once()) + ->method('getOptions') + ->willReturn($options); + + $this->assertSame($expected, $this->object->toOptionArray()); + } + + /** + * @return array + */ + public function getOptionsDataProvider() + { + return [ + [ + [], + [], + ], + [ + ['testStatus' => 'testValue'], + [['label' => 'testValue', 'value' => 'testStatus']], + ], + + ]; + } +} diff --git a/app/code/Magento/Cms/Test/Unit/Model/Page/Source/ThemeFilterTest.php b/app/code/Magento/Cms/Test/Unit/Model/Page/Source/ThemeFilterTest.php new file mode 100644 index 0000000000000000000000000000000000000000..d0b88e0028bf84bf26e5bd42df5201367ccc383e --- /dev/null +++ b/app/code/Magento/Cms/Test/Unit/Model/Page/Source/ThemeFilterTest.php @@ -0,0 +1,35 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Cms\Test\Unit\Model\Page\Source; + +class ThemeFilterTest extends ThemeTest +{ + /** + * {@inheritdoc} + */ + protected function getClassName() + { + return 'Magento\Cms\Model\Page\Source\ThemeFilter'; + } + + /** + * @return array + */ + public function getOptionsDataProvider() + { + return [ + [ + [], + [['label' => '', 'value' => '']], + ], + [ + [['label' => 'testValue', 'value' => 'testStatus']], + [['label' => '', 'value' => ''], ['label' => 'testValue', 'value' => 'testStatus']], + ], + + ]; + } +} diff --git a/app/code/Magento/Cms/Test/Unit/Model/Page/Source/ThemeTest.php b/app/code/Magento/Cms/Test/Unit/Model/Page/Source/ThemeTest.php new file mode 100644 index 0000000000000000000000000000000000000000..706de05aede0417722126adc345b21256ac13ad0 --- /dev/null +++ b/app/code/Magento/Cms/Test/Unit/Model/Page/Source/ThemeTest.php @@ -0,0 +1,84 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Cms\Test\Unit\Model\Page\Source; + +use Magento\Cms\Model\Page\Source\Theme; +use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; +use Magento\Framework\View\Design\Theme\Label\ListInterface; + +class ThemeTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var ListInterface|\PHPUnit_Framework_MockObject_MockObject + */ + protected $listMock; + + /** + * @var ObjectManager + */ + protected $objectManagerHelper; + + /** + * @var Theme + */ + protected $object; + + /** + * {@inheritdoc} + */ + protected function setUp() + { + $this->objectManagerHelper = new ObjectManager($this); + $this->listMock = $this->getMockBuilder('Magento\Framework\View\Design\Theme\Label\ListInterface') + ->disableOriginalConstructor() + ->setMethods(['getLabels']) + ->getMock(); + + $this->object = $this->objectManagerHelper->getObject($this->getClassName(), [ + 'themeList' => $this->listMock, + ]); + } + + /** + * @return string + */ + protected function getClassName() + { + return 'Magento\Cms\Model\Page\Source\Theme'; + } + + /** + * @param array $options + * @param array $expected + * @return void + * @dataProvider getOptionsDataProvider + */ + public function testToOptionArray(array $options, array $expected) + { + $this->listMock->expects($this->once()) + ->method('getLabels') + ->willReturn($options); + + $this->assertSame($expected, $this->object->toOptionArray()); + } + + /** + * @return array + */ + public function getOptionsDataProvider() + { + return [ + [ + [], + [], + ], + [ + [['label' => 'testValue', 'value' => 'testStatus']], + [['label' => 'testValue', 'value' => 'testStatus']], + ], + ]; + } +} diff --git a/app/code/Magento/Cms/Test/Unit/Model/PageTest.php b/app/code/Magento/Cms/Test/Unit/Model/PageTest.php index cb4e51d718f58b5e3ad0b1ee65e0a4a7fa1153b8..b2a025a558962e95c7e25723ccb26f0d47f60c3f 100644 --- a/app/code/Magento/Cms/Test/Unit/Model/PageTest.php +++ b/app/code/Magento/Cms/Test/Unit/Model/PageTest.php @@ -58,7 +58,7 @@ class PageTest extends \PHPUnit_Framework_TestCase $this->getMockBuilder('Magento\Framework\Registry') ->disableOriginalConstructor() ->getMock(), - $this->getMockBuilder('Magento\Framework\Model\ModelResource\AbstractResource') + $this->getMockBuilder('Magento\Framework\Model\ResourceModel\AbstractResource') ->disableOriginalConstructor() ->setMethods( [ diff --git a/app/code/Magento/Cms/Test/Unit/Model/ResourceModel/AbstractCollectionTest.php b/app/code/Magento/Cms/Test/Unit/Model/ResourceModel/AbstractCollectionTest.php index 8a611f75029c15749dc9aab292ea227ca698a88c..e323765dabef2ffb9cb3d7273379cf8c41207a2e 100644 --- a/app/code/Magento/Cms/Test/Unit/Model/ResourceModel/AbstractCollectionTest.php +++ b/app/code/Magento/Cms/Test/Unit/Model/ResourceModel/AbstractCollectionTest.php @@ -23,7 +23,7 @@ abstract class AbstractCollectionTest extends \PHPUnit_Framework_TestCase protected $objectManager; /** - * @var \Magento\Framework\Model\ModelResource\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject */ protected $resource; @@ -38,7 +38,7 @@ abstract class AbstractCollectionTest extends \PHPUnit_Framework_TestCase ->getMock(); $this->connection->expects($this->any())->method('select')->willReturn($this->select); - $this->resource = $this->getMockBuilder('Magento\Framework\Model\ModelResource\Db\AbstractDb') + $this->resource = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\Db\AbstractDb') ->disableOriginalConstructor() ->setMethods(['getConnection', 'getMainTable', 'getTable']) ->getMockForAbstractClass(); diff --git a/app/code/Magento/Cms/Test/Unit/Ui/Component/Listing/Column/PageActionsTest.php b/app/code/Magento/Cms/Test/Unit/Ui/Component/Listing/Column/PageActionsTest.php index e50be29ce1130c98691d649fb5bf2dc0677cdb03..59bcbf7a18596f13eb9f3afe36dc7e8f6f686069 100644 --- a/app/code/Magento/Cms/Test/Unit/Ui/Component/Listing/Column/PageActionsTest.php +++ b/app/code/Magento/Cms/Test/Unit/Ui/Component/Listing/Column/PageActionsTest.php @@ -18,12 +18,19 @@ class PageActionsTest extends \PHPUnit_Framework_TestCase $urlBuilderMock = $this->getMockBuilder('Magento\Framework\UrlInterface') ->disableOriginalConstructor() ->getMock(); + $contextMock = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\ContextInterface') + ->getMockForAbstractClass(); + $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor') + ->disableOriginalConstructor() + ->getMock(); + $contextMock->expects($this->any())->method('getProcessor')->willReturn($processor); /** @var \Magento\Cms\Ui\Component\Listing\Column\PageActions $model */ $model = $objectManager->getObject( 'Magento\Cms\Ui\Component\Listing\Column\PageActions', [ 'urlBuilder' => $urlBuilderMock, + 'context' => $contextMock, ] ); diff --git a/app/code/Magento/Cms/etc/frontend/events.xml b/app/code/Magento/Cms/etc/frontend/events.xml index 6826c24af7da1b44b9c18197e3e41cda938ebdd0..f153ae9fef1647fe9c842cee768cef20c25ee603 100644 --- a/app/code/Magento/Cms/etc/frontend/events.xml +++ b/app/code/Magento/Cms/etc/frontend/events.xml @@ -7,9 +7,9 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="controller_action_noroute"> - <observer name="cms" instance="Magento\Cms\Observer\NoRouteObserver" method="execute" /> + <observer name="cms" instance="Magento\Cms\Observer\NoRouteObserver" /> </event> <event name="controller_action_nocookies"> - <observer name="cms" instance="Magento\Cms\Observer\NoCookiesObserver" method="execute" /> + <observer name="cms" instance="Magento\Cms\Observer\NoCookiesObserver" /> </event> </config> diff --git a/app/code/Magento/Cms/view/adminhtml/templates/browser/content.phtml b/app/code/Magento/Cms/view/adminhtml/templates/browser/content.phtml index 54f22698a0ffe64e9630ab42253d1bccd2a65290..d40b8445058cc689523ef8c9e41a6a41892c2bcd 100644 --- a/app/code/Magento/Cms/view/adminhtml/templates/browser/content.phtml +++ b/app/code/Magento/Cms/view/adminhtml/templates/browser/content.phtml @@ -20,7 +20,7 @@ <div class="title"><?php /* @escapeNotVerified */ echo $block->getHeaderText() ?></div> </div> </div> - <div id="contents-uploader"><?php echo $block->getChildHtml('wysiwyg_images.uploader') ?></div> + <div id="contents-uploader" class="contents-uploader"><?php echo $block->getChildHtml('wysiwyg_images.uploader') ?></div> <div id="contents"></div> </div> </div> diff --git a/app/code/Magento/Cms/view/adminhtml/ui_component/cms_block_listing.xml b/app/code/Magento/Cms/view/adminhtml/ui_component/cms_block_listing.xml index b00694b3d94fa66c478b62b5f8fb495615143bc8..6934d263535b59bde9a0a6c72ead01ec3dc0e0c0 100644 --- a/app/code/Magento/Cms/view/adminhtml/ui_component/cms_block_listing.xml +++ b/app/code/Magento/Cms/view/adminhtml/ui_component/cms_block_listing.xml @@ -48,17 +48,13 @@ <bookmark name="bookmarks"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/controls/bookmarks/bookmarks</item> - <item name="displayArea" xsi:type="string">dataGridActions</item> <item name="storageConfig" xsi:type="array"> - <item name="saveUrl" xsi:type="url" path="mui/bookmark/save"/> - <item name="deleteUrl" xsi:type="url" path="mui/bookmark/delete"/> <item name="namespace" xsi:type="string">cms_block_listing</item> </item> </item> </argument> </bookmark> - <container name="columns_controls"> + <component name="columns_controls"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> <item name="columnsData" xsi:type="array"> @@ -68,12 +64,10 @@ <item name="displayArea" xsi:type="string">dataGridActions</item> </item> </argument> - </container> + </component> <filterSearch name="fulltext"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/search/search</item> - <item name="displayArea" xsi:type="string">dataGridFilters</item> <item name="provider" xsi:type="string">cms_block_listing.cms_block_listing_data_source</item> <item name="chipsProvider" xsi:type="string">cms_block_listing.cms_block_listing.listing_top.listing_filters_chips</item> <item name="storageConfig" xsi:type="array"> @@ -86,8 +80,7 @@ <filters name="listing_filters"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> - <item name="displayArea" xsi:type="string">dataGridFilters</item> - <item name="dataScope" xsi:type="string">filters</item> + <item name="columnsProvider" xsi:type="string">cms_block_listing.cms_block_listing.cms_block_columns</item> <item name="storageConfig" xsi:type="array"> <item name="provider" xsi:type="string">cms_block_listing.cms_block_listing.listing_top.bookmarks</item> <item name="namespace" xsi:type="string">current.filters</item> @@ -95,155 +88,28 @@ <item name="childDefaults" xsi:type="array"> <item name="provider" xsi:type="string">cms_block_listing.cms_block_listing.listing_top.listing_filters</item> <item name="imports" xsi:type="array"> - <item name="visible" xsi:type="string">cms_block_listing.cms_block_listing.listing_top.bookmarks:current.columns.${ $.index }.visible</item> + <item name="visible" xsi:type="string">cms_block_listing.cms_block_listing.cms_block_columns.${ $.index }:visible</item> </item> </item> </item> </argument> - <filterRange name="block_id"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">block_id</item> - <item name="label" xsi:type="string" translate="true">ID</item> - <item name="childDefaults" xsi:type="array"> - <item name="provider" xsi:type="string">cms_block_listing.cms_block_listing.listing_top.listing_filters</item> - </item> - </item> - </argument> - <filterInput name="from"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">from</item> - <item name="label" xsi:type="string" translate="true">from</item> - <item name="placeholder" xsi:type="string" translate="true">From</item> - </item> - </argument> - </filterInput> - <filterInput name="to"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">to</item> - <item name="label" xsi:type="string" translate="true">to</item> - <item name="placeholder" xsi:type="string" translate="true">To</item> - </item> - </argument> - </filterInput> - </filterRange> - <filterInput name="title"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">title</item> - <item name="label" xsi:type="string" translate="true">Title</item> - </item> - </argument> - </filterInput> - <filterInput name="identifier"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">identifier</item> - <item name="label" xsi:type="string" translate="true">Identifier</item> - </item> - </argument> - </filterInput> <filterSelect name="store_id"> <argument name="optionsProvider" xsi:type="configurableObject"> <argument name="class" xsi:type="string">Magento\Cms\Ui\Component\Listing\Column\Cms\Options</argument> </argument> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> - <item name="caption" xsi:type="string" translate="true">Select...</item> <item name="dataScope" xsi:type="string">store_id</item> <item name="label" xsi:type="string" translate="true">Store View</item> + <item name="captionValue" xsi:type="string">0</item> </item> </argument> </filterSelect> - <filterSelect name="is_active"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="caption" xsi:type="string" translate="true">Select...</item> - <item name="label" xsi:type="string" translate="true">Status</item> - <item name="dataScope" xsi:type="string">is_active</item> - <item name="options" xsi:type="array"> - <item name="disable" xsi:type="array"> - <item name="value" xsi:type="string">0</item> - <item name="label" xsi:type="string" translate="true">Disabled</item> - </item> - <item name="enable" xsi:type="array"> - <item name="value" xsi:type="string">1</item> - <item name="label" xsi:type="string" translate="true">Enabled</item> - </item> - </item> - </item> - </argument> - </filterSelect> - <filterRange name="creation_time" class="Magento\Ui\Component\Filters\Type\DateRange"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">creation_time</item> - <item name="label" xsi:type="string" translate="true">Created</item> - <item name="childDefaults" xsi:type="array"> - <item name="provider" xsi:type="string">cms_block_listing.cms_block_listing.listing_top.listing_filters</item> - </item> - </item> - </argument> - <filterDate name="from"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">from</item> - <item name="label" xsi:type="string" translate="true">From</item> - <item name="placeholder" xsi:type="string" translate="true">From</item> - <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item> - </item> - </argument> - </filterDate> - <filterDate name="to"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">to</item> - <item name="label" xsi:type="string" translate="true">To</item> - <item name="placeholder" xsi:type="string" translate="true">To</item> - <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item> - </item> - </argument> - </filterDate> - </filterRange> - <filterRange name="update_time" class="Magento\Ui\Component\Filters\Type\DateRange"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">update_time</item> - <item name="label" xsi:type="string" translate="true">Modified</item> - <item name="childDefaults" xsi:type="array"> - <item name="provider" xsi:type="string">cms_block_listing.cms_block_listing.listing_top.listing_filters</item> - </item> - </item> - </argument> - <filterDate name="from"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">from</item> - <item name="label" xsi:type="string" translate="true">From</item> - <item name="placeholder" xsi:type="string" translate="true">From</item> - <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item> - </item> - </argument> - </filterDate> - <filterDate name="to"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">to</item> - <item name="label" xsi:type="string" translate="true">To</item> - <item name="placeholder" xsi:type="string" translate="true">To</item> - <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item> - </item> - </argument> - </filterDate> - </filterRange> </filters> <massaction name="listing_massaction"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> <item name="selectProvider" xsi:type="string">cms_block_listing.cms_block_listing.cms_block_columns.ids</item> - <item name="displayArea" xsi:type="string">bottom</item> <item name="indexField" xsi:type="string">block_id</item> </item> </argument> @@ -281,7 +147,6 @@ <item name="namespace" xsi:type="string">current.paging</item> </item> <item name="selectProvider" xsi:type="string">cms_block_listing.cms_block_listing.cms_block_columns.ids</item> - <item name="displayArea" xsi:type="string">bottom</item> </item> </argument> </paging> @@ -298,8 +163,7 @@ <item name="enabled" xsi:type="boolean">true</item> <item name="indexField" xsi:type="string">block_id</item> <item name="clientConfig" xsi:type="array"> - <item name="saveUrl" xsi:type="string">cms/block/inlineEdit</item> - <item name="validateUrl" xsi:type="string">/path/to</item> + <item name="saveUrl" xsi:type="url" path="cms/block/inlineEdit"/> <item name="validateBeforeSave" xsi:type="boolean">false</item> </item> </item> @@ -312,7 +176,6 @@ <item name="1" xsi:type="boolean">true</item> </item> </item> - <item name="controlVisibility" xsi:type="boolean">true</item> <item name="storageConfig" xsi:type="array"> <item name="provider" xsi:type="string">cms_block_listing.cms_block_listing.listing_top.bookmarks</item> <item name="root" xsi:type="string">columns.${ $.index }</item> @@ -321,35 +184,24 @@ </item> </item> </argument> - <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column"> + <selectionsColumn name="ids"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item> - </item> <item name="config" xsi:type="array"> <item name="indexField" xsi:type="string">block_id</item> - <item name="controlVisibility" xsi:type="boolean">false</item> </item> </argument> - </column> + </selectionsColumn> <column name="block_id"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> - <item name="dataType" xsi:type="string">text</item> + <item name="filter" xsi:type="string">textRange</item> <item name="sorting" xsi:type="string">asc</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">ID</item> </item> </argument> </column> <column name="title"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> <item name="editor" xsi:type="array"> <item name="editorType" xsi:type="string">text</item> @@ -357,17 +209,13 @@ <item name="required-entry" xsi:type="boolean">true</item> </item> </item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="filter" xsi:type="string">text</item> <item name="label" xsi:type="string" translate="true">Title</item> </item> </argument> </column> <column name="identifier"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> <item name="editor" xsi:type="array"> <item name="editorType" xsi:type="string">text</item> @@ -376,31 +224,22 @@ <item name="required-entry" xsi:type="boolean">true</item> </item> </item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="filter" xsi:type="string">text</item> <item name="label" xsi:type="string" translate="true">Identifier</item> </item> </argument> </column> <column name="store_id" class="Magento\Store\Ui\Component\Listing\Column\Store"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item> <item name="sortable" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Store View</item> </item> </argument> </column> <column name="is_active"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> - </item> <item name="options" xsi:type="array"> <item name="disable" xsi:type="array"> <item name="value" xsi:type="string">0</item> @@ -412,50 +251,40 @@ </item> </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">select</item> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> <item name="editor" xsi:type="string">select</item> <item name="dataType" xsi:type="string">select</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Status</item> </item> </argument> </column> <column name="creation_time"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">dateRange</item> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item> <item name="dataType" xsi:type="string">date</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Created</item> </item> </argument> </column> <column name="update_time"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">dateRange</item> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item> <item name="dataType" xsi:type="string">date</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Modified</item> </item> </argument> </column> - <column name="actions" class="Magento\Cms\Ui\Component\Listing\Column\BlockActions"> + <actionsColumn name="actions" class="Magento\Cms\Ui\Component\Listing\Column\BlockActions"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> - <item name="draggable" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">actions</item> <item name="indexField" xsi:type="string">block_id</item> - <item name="align" xsi:type="string">left</item> - <item name="label" xsi:type="string" translate="true">Action</item> - <item name="data_type" xsi:type="string">actions</item> - <item name="filterable" xsi:type="boolean">false</item> - <item name="sortable" xsi:type="boolean">false</item> </item> </argument> - </column> + </actionsColumn> </columns> </listing> diff --git a/app/code/Magento/Cms/view/adminhtml/ui_component/cms_page_listing.xml b/app/code/Magento/Cms/view/adminhtml/ui_component/cms_page_listing.xml index fbef0a00a3a17c807e992660d5fcb5ec4a046093..c55c919be2164d32927ef1dce7d2933fcfb178da 100644 --- a/app/code/Magento/Cms/view/adminhtml/ui_component/cms_page_listing.xml +++ b/app/code/Magento/Cms/view/adminhtml/ui_component/cms_page_listing.xml @@ -49,17 +49,13 @@ <bookmark name="bookmarks"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/controls/bookmarks/bookmarks</item> - <item name="displayArea" xsi:type="string">dataGridActions</item> <item name="storageConfig" xsi:type="array"> - <item name="saveUrl" xsi:type="url" path="mui/bookmark/save"/> - <item name="deleteUrl" xsi:type="url" path="mui/bookmark/delete"/> <item name="namespace" xsi:type="string">cms_page_listing</item> </item> </item> </argument> </bookmark> - <container name="columns_controls"> + <component name="columns_controls"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> <item name="columnsData" xsi:type="array"> @@ -69,12 +65,10 @@ <item name="displayArea" xsi:type="string">dataGridActions</item> </item> </argument> - </container> + </component> <filterSearch name="fulltext"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/search/search</item> - <item name="displayArea" xsi:type="string">dataGridFilters</item> <item name="provider" xsi:type="string">cms_page_listing.cms_page_listing_data_source</item> <item name="chipsProvider" xsi:type="string">cms_page_listing.cms_page_listing.listing_top.listing_filters_chips</item> <item name="storageConfig" xsi:type="array"> @@ -87,8 +81,7 @@ <filters name="listing_filters"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> - <item name="displayArea" xsi:type="string">dataGridFilters</item> - <item name="dataScope" xsi:type="string">filters</item> + <item name="columnsProvider" xsi:type="string">cms_page_listing.cms_page_listing.cms_page_columns</item> <item name="storageConfig" xsi:type="array"> <item name="provider" xsi:type="string">cms_page_listing.cms_page_listing.listing_top.bookmarks</item> <item name="namespace" xsi:type="string">current.filters</item> @@ -96,56 +89,14 @@ <item name="childDefaults" xsi:type="array"> <item name="provider" xsi:type="string">cms_page_listing.cms_page_listing.listing_top.listing_filters</item> <item name="imports" xsi:type="array"> - <item name="visible" xsi:type="string">cms_page_listing.cms_page_listing.listing_top.bookmarks:current.columns.${ $.index }.visible</item> + <item name="visible" xsi:type="string">cms_page_listing.cms_page_listing.cms_page_columns.${ $.index }:visible</item> </item> </item> </item> + <item name="observers" xsi:type="array"> + <item name="column" xsi:type="string">column</item> + </item> </argument> - <filterRange name="page_id"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">page_id</item> - <item name="label" xsi:type="string" translate="true">ID</item> - <item name="childDefaults" xsi:type="array"> - <item name="provider" xsi:type="string">cms_page_listing.cms_page_listing.listing_top.listing_filters</item> - </item> - </item> - </argument> - <filterInput name="from"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">from</item> - <item name="label" xsi:type="string" translate="true">from</item> - <item name="placeholder" xsi:type="string" translate="true">From</item> - </item> - </argument> - </filterInput> - <filterInput name="to"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">to</item> - <item name="label" xsi:type="string" translate="true">to</item> - <item name="placeholder" xsi:type="string" translate="true">To</item> - </item> - </argument> - </filterInput> - </filterRange> - <filterInput name="title"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">title</item> - <item name="label" xsi:type="string" translate="true">Title</item> - </item> - </argument> - </filterInput> - <filterInput name="identifier"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">identifier</item> - <item name="label" xsi:type="string" translate="true">URL Key</item> - </item> - </argument> - </filterInput> <filterSelect name="store_id"> <argument name="optionsProvider" xsi:type="configurableObject"> <argument name="class" xsi:type="string">Magento\Cms\Ui\Component\Listing\Column\Cms\Options</argument> @@ -153,207 +104,8 @@ <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> <item name="dataScope" xsi:type="string">store_id</item> - <item name="caption" xsi:type="string" translate="true">Select...</item> <item name="label" xsi:type="string" translate="true">Store View</item> - </item> - </argument> - </filterSelect> - <filterSelect name="is_active"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">is_active</item> - <item name="label" xsi:type="string" translate="true">Status</item> - <item name="component" xsi:type="string">Magento_Ui/js/form/element/ui-select</item> - <item name="template" xsi:type="string">ui/grid/filters/elements/ui-select</item> - <item name="options" xsi:type="array"> - <item name="disable" xsi:type="array"> - <item name="value" xsi:type="string">0</item> - <item name="label" xsi:type="string" translate="true">Disabled</item> - </item> - <item name="enable" xsi:type="array"> - <item name="value" xsi:type="string">1</item> - <item name="label" xsi:type="string" translate="true">Published</item> - </item> - </item> - </item> - </argument> - </filterSelect> - <filterRange name="creation_time" class="Magento\Ui\Component\Filters\Type\DateRange"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">creation_time</item> - <item name="label" xsi:type="string" translate="true">Created</item> - <item name="childDefaults" xsi:type="array"> - <item name="provider" xsi:type="string">cms_page_listing.cms_page_listing.listing_top.listing_filters</item> - </item> - </item> - </argument> - <filterDate name="from"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">from</item> - <item name="label" xsi:type="string" translate="true">from</item> - <item name="placeholder" xsi:type="string" translate="true">From</item> - <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item> - </item> - </argument> - </filterDate> - <filterDate name="to"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">to</item> - <item name="label" xsi:type="string" translate="true">to</item> - <item name="placeholder" xsi:type="string" translate="true">To</item> - <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item> - </item> - </argument> - </filterDate> - </filterRange> - <filterRange name="update_time" class="Magento\Ui\Component\Filters\Type\DateRange"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">update_time</item> - <item name="label" xsi:type="string" translate="true">Modified</item> - <item name="childDefaults" xsi:type="array"> - <item name="provider" xsi:type="string">cms_page_listing.cms_page_listing.listing_top.listing_filters</item> - </item> - </item> - </argument> - <filterDate name="from"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">from</item> - <item name="label" xsi:type="string" translate="true">from</item> - <item name="placeholder" xsi:type="string" translate="true">From</item> - <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item> - </item> - </argument> - </filterDate> - <filterDate name="to"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">to</item> - <item name="label" xsi:type="string" translate="true">to</item> - <item name="placeholder" xsi:type="string" translate="true">To</item> - <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item> - </item> - </argument> - </filterDate> - </filterRange> - <filterRange name="custom_theme_from" class="Magento\Ui\Component\Filters\Type\DateRange"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">custom_theme_from</item> - <item name="label" xsi:type="string" translate="true">Custom design from</item> - <item name="childDefaults" xsi:type="array"> - <item name="provider" xsi:type="string">cms_page_listing.cms_page_listing.listing_top.listing_filters</item> - </item> - </item> - </argument> - <filterDate name="from"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">from</item> - <item name="label" xsi:type="string" translate="true">from</item> - <item name="placeholder" xsi:type="string" translate="true">From</item> - <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item> - </item> - </argument> - </filterDate> - <filterDate name="to"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">to</item> - <item name="label" xsi:type="string" translate="true">to</item> - <item name="placeholder" xsi:type="string" translate="true">To</item> - <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item> - </item> - </argument> - </filterDate> - </filterRange> - <filterRange name="custom_theme_to" class="Magento\Ui\Component\Filters\Type\DateRange"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">custom_theme_to</item> - <item name="label" xsi:type="string" translate="true">Custom design to</item> - <item name="childDefaults" xsi:type="array"> - <item name="provider" xsi:type="string">cms_page_listing.cms_page_listing.listing_top.listing_filters</item> - </item> - </item> - </argument> - <filterDate name="from"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">from</item> - <item name="label" xsi:type="string" translate="true">from</item> - <item name="placeholder" xsi:type="string" translate="true">From</item> - <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item> - </item> - </argument> - </filterDate> - <filterDate name="to"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">to</item> - <item name="label" xsi:type="string" translate="true">to</item> - <item name="placeholder" xsi:type="string" translate="true">To</item> - <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item> - </item> - </argument> - </filterDate> - </filterRange> - <filterSelect name="custom_theme"> - <argument name="optionsProvider" xsi:type="configurableObject"> - <argument name="class" xsi:type="string">Magento\Cms\Model\Page\Source\Theme</argument> - </argument> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">custom_theme</item> - <item name="label" xsi:type="string" translate="true">Custom Theme</item> - <item name="component" xsi:type="string">Magento_Ui/js/form/element/ui-select</item> - <item name="template" xsi:type="string">ui/grid/filters/elements/ui-select</item> - </item> - </argument> - </filterSelect> - <filterSelect name="custom_root_template"> - <argument name="optionsProvider" xsi:type="configurableObject"> - <argument name="class" xsi:type="string">Magento\Cms\Model\Page\Source\PageLayout</argument> - </argument> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">custom_root_template</item> - <item name="label" xsi:type="string" translate="true">Custom Layout</item> - <item name="component" xsi:type="string">Magento_Ui/js/form/element/ui-select</item> - <item name="template" xsi:type="string">ui/grid/filters/elements/ui-select</item> - </item> - </argument> - </filterSelect> - <filterInput name="meta_keywords"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">meta_keywords</item> - <item name="label" xsi:type="string" translate="true">Meta Keywords</item> - </item> - </argument> - </filterInput> - <filterInput name="meta_description"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">meta_description</item> - <item name="label" xsi:type="string" translate="true">Meta Description</item> - </item> - </argument> - </filterInput> - <filterSelect name="page_layout"> - <argument name="optionsProvider" xsi:type="configurableObject"> - <argument name="class" xsi:type="string">Magento\Cms\Model\Page\Source\PageLayout</argument> - </argument> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/form/element/ui-select</item> - <item name="template" xsi:type="string">ui/grid/filters/elements/ui-select</item> - <item name="dataScope" xsi:type="string">page_layout</item> - <item name="label" xsi:type="string" translate="true">Layout</item> + <item name="captionValue" xsi:type="string">0</item> </item> </argument> </filterSelect> @@ -362,7 +114,6 @@ <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> <item name="selectProvider" xsi:type="string">cms_page_listing.cms_page_listing.cms_page_columns.ids</item> - <item name="displayArea" xsi:type="string">bottom</item> <item name="indexField" xsi:type="string">page_id</item> </item> </argument> @@ -418,7 +169,6 @@ <item name="namespace" xsi:type="string">current.paging</item> </item> <item name="selectProvider" xsi:type="string">cms_page_listing.cms_page_listing.cms_page_columns.ids</item> - <item name="displayArea" xsi:type="string">bottom</item> </item> </argument> </paging> @@ -435,8 +185,7 @@ <item name="enabled" xsi:type="boolean">true</item> <item name="indexField" xsi:type="string">page_id</item> <item name="clientConfig" xsi:type="array"> - <item name="saveUrl" xsi:type="string">cms/page/inlineEdit</item> - <item name="validateUrl" xsi:type="string">/path/to</item> + <item name="saveUrl" xsi:type="url" path="cms/page/inlineEdit"/> <item name="validateBeforeSave" xsi:type="boolean">false</item> </item> </item> @@ -449,7 +198,6 @@ <item name="1" xsi:type="boolean">true</item> </item> </item> - <item name="controlVisibility" xsi:type="boolean">true</item> <item name="storageConfig" xsi:type="array"> <item name="provider" xsi:type="string">cms_page_listing.cms_page_listing.listing_top.bookmarks</item> <item name="root" xsi:type="string">columns.${ $.index }</item> @@ -458,65 +206,48 @@ </item> </item> </argument> - <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column"> + <selectionsColumn name="ids"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item> - </item> <item name="config" xsi:type="array"> <item name="resizeEnabled" xsi:type="boolean">false</item> <item name="resizeDefaultWidth" xsi:type="string">55</item> - <item name="draggable" xsi:type="boolean">false</item> <item name="indexField" xsi:type="string">page_id</item> - <item name="controlVisibility" xsi:type="boolean">false</item> </item> </argument> - </column> + </selectionsColumn> <column name="page_id"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> - <item name="dataType" xsi:type="string">text</item> + <item name="filter" xsi:type="string">textRange</item> <item name="sorting" xsi:type="string">asc</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">ID</item> </item> </argument> </column> <column name="title"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">text</item> <item name="editor" xsi:type="array"> <item name="editorType" xsi:type="string">text</item> <item name="validation" xsi:type="array"> <item name="required-entry" xsi:type="boolean">true</item> </item> </item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Title</item> </item> </argument> </column> <column name="identifier"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">text</item> <item name="editor" xsi:type="array"> <item name="editorType" xsi:type="string">text</item> <item name="validation" xsi:type="array"> <item name="validate-identifier" xsi:type="boolean">true</item> </item> </item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">URL Key</item> </item> </argument> @@ -524,27 +255,20 @@ <column name="page_layout"> <argument name="data" xsi:type="array"> <item name="options" xsi:type="object">Magento\Cms\Model\Page\Source\PageLayout</item> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">select</item> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> <item name="editor" xsi:type="string">select</item> <item name="dataType" xsi:type="string">select</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Layout</item> </item> </argument> </column> <column name="store_id" class="Magento\Store\Ui\Component\Listing\Column\Store"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item> <item name="sortable" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Store View</item> </item> </argument> @@ -552,50 +276,42 @@ <column name="is_active"> <argument name="data" xsi:type="array"> <item name="options" xsi:type="object">Magento\Cms\Model\Page\Source\IsActive</item> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">select</item> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> <item name="editor" xsi:type="string">select</item> <item name="dataType" xsi:type="string">select</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Status</item> </item> </argument> </column> <column name="creation_time"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">dateRange</item> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item> <item name="dataType" xsi:type="string">date</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Created</item> </item> </argument> </column> <column name="update_time"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">dateRange</item> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item> <item name="dataType" xsi:type="string">date</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Modified</item> </item> </argument> </column> <column name="custom_theme_from"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">dateRange</item> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item> <item name="editor" xsi:type="string">date</item> <item name="dataType" xsi:type="string">date</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Custom design from</item> <item name="dateFormat" xsi:type="string">MMM d, y</item> <item name="visible" xsi:type="boolean">false</item> @@ -604,13 +320,11 @@ </column> <column name="custom_theme_to"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">dateRange</item> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item> <item name="editor" xsi:type="string">date</item> <item name="dataType" xsi:type="string">date</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Custom design to</item> <item name="dateFormat" xsi:type="string">MMM d, y</item> <item name="visible" xsi:type="boolean">false</item> @@ -620,13 +334,11 @@ <column name="custom_theme"> <argument name="data" xsi:type="array"> <item name="options" xsi:type="object">Magento\Cms\Model\Page\Source\Theme</item> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">select</item> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> <item name="editor" xsi:type="string">select</item> <item name="dataType" xsi:type="string">select</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Custom Theme</item> <item name="visible" xsi:type="boolean">false</item> </item> @@ -635,13 +347,11 @@ <column name="custom_root_template"> <argument name="data" xsi:type="array"> <item name="options" xsi:type="object">Magento\Cms\Model\Page\Source\PageLayout</item> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">select</item> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> <item name="editor" xsi:type="string">select</item> <item name="dataType" xsi:type="string">select</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Custom Layout</item> <item name="visible" xsi:type="boolean">false</item> </item> @@ -649,13 +359,9 @@ </column> <column name="meta_keywords"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">text</item> <item name="editor" xsi:type="string">text</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Meta Keywords</item> <item name="visible" xsi:type="boolean">false</item> </item> @@ -663,35 +369,23 @@ </column> <column name="meta_description"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">text</item> <item name="editor" xsi:type="string">text</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Meta Description</item> <item name="visible" xsi:type="boolean">false</item> </item> </argument> </column> - <column name="actions" class="Magento\Cms\Ui\Component\Listing\Column\PageActions"> + <actionsColumn name="actions" class="Magento\Cms\Ui\Component\Listing\Column\PageActions"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> - <item name="draggable" xsi:type="boolean">false</item> <item name="resizeEnabled" xsi:type="boolean">false</item> <item name="resizeDefaultWidth" xsi:type="string">107</item> - <item name="dataType" xsi:type="string">actions</item> <item name="indexField" xsi:type="string">page_id</item> - <item name="blockVisibility" xsi:type="boolean">true</item> - <item name="align" xsi:type="string">left</item> - <item name="label" xsi:type="string" translate="true">Action</item> - <item name="data_type" xsi:type="string">actions</item> - <item name="filterable" xsi:type="boolean">false</item> - <item name="sortable" xsi:type="boolean">false</item> </item> </argument> - </column> + </actionsColumn> </columns> <container name="sticky"> <argument name="data" xsi:type="array"> diff --git a/app/code/Magento/CmsUrlRewrite/etc/adminhtml/events.xml b/app/code/Magento/CmsUrlRewrite/etc/adminhtml/events.xml index 28f880fa12595f4fb65c2dfd4795d90989b92dbf..eb6c3bf239d41253413036e2f026354f7907fb9b 100644 --- a/app/code/Magento/CmsUrlRewrite/etc/adminhtml/events.xml +++ b/app/code/Magento/CmsUrlRewrite/etc/adminhtml/events.xml @@ -7,6 +7,6 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="cms_page_save_after"> - <observer name="process_url_rewrite_saving" instance="Magento\CmsUrlRewrite\Observer\ProcessUrlRewriteSavingObserver" method="execute" /> + <observer name="process_url_rewrite_saving" instance="Magento\CmsUrlRewrite\Observer\ProcessUrlRewriteSavingObserver" /> </event> </config> diff --git a/app/code/Magento/CmsUrlRewrite/etc/setup/events.xml b/app/code/Magento/CmsUrlRewrite/etc/setup/events.xml index 28f880fa12595f4fb65c2dfd4795d90989b92dbf..eb6c3bf239d41253413036e2f026354f7907fb9b 100644 --- a/app/code/Magento/CmsUrlRewrite/etc/setup/events.xml +++ b/app/code/Magento/CmsUrlRewrite/etc/setup/events.xml @@ -7,6 +7,6 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="cms_page_save_after"> - <observer name="process_url_rewrite_saving" instance="Magento\CmsUrlRewrite\Observer\ProcessUrlRewriteSavingObserver" method="execute" /> + <observer name="process_url_rewrite_saving" instance="Magento\CmsUrlRewrite\Observer\ProcessUrlRewriteSavingObserver" /> </event> </config> diff --git a/app/code/Magento/Config/Model/Config/Backend/Admin/Custom.php b/app/code/Magento/Config/Model/Config/Backend/Admin/Custom.php index 21ce20f6174f1ed8fd2749575e244a6b2d7f3ea7..bdb08b0f04b2a12cf29790028a9ef313ca107c92 100644 --- a/app/code/Magento/Config/Model/Config/Backend/Admin/Custom.php +++ b/app/code/Magento/Config/Model/Config/Backend/Admin/Custom.php @@ -59,7 +59,7 @@ class Custom extends \Magento\Framework\App\Config\Value * @param \Magento\Framework\Registry $registry * @param \Magento\Framework\App\Config\ScopeConfigInterface $config * @param \Magento\Framework\App\Config\Storage\WriterInterface $configWriter - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -68,7 +68,7 @@ class Custom extends \Magento\Framework\App\Config\Value \Magento\Framework\Registry $registry, \Magento\Framework\App\Config\ScopeConfigInterface $config, \Magento\Framework\App\Config\Storage\WriterInterface $configWriter, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Config/Model/Config/Backend/Admin/Robots.php b/app/code/Magento/Config/Model/Config/Backend/Admin/Robots.php index 0fe5834b863f3e7d28db69a287797a4496dd94a7..50478bfb7b8ef92f17650328881fe12422aefe73 100644 --- a/app/code/Magento/Config/Model/Config/Backend/Admin/Robots.php +++ b/app/code/Magento/Config/Model/Config/Backend/Admin/Robots.php @@ -28,7 +28,7 @@ class Robots extends \Magento\Framework\App\Config\Value * @param \Magento\Framework\Registry $registry * @param \Magento\Framework\App\Config\ScopeConfigInterface $config * @param \Magento\Framework\Filesystem $filesystem - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -37,7 +37,7 @@ class Robots extends \Magento\Framework\App\Config\Value \Magento\Framework\Registry $registry, \Magento\Framework\App\Config\ScopeConfigInterface $config, \Magento\Framework\Filesystem $filesystem, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Config/Model/Config/Backend/Admin/Usecustom.php b/app/code/Magento/Config/Model/Config/Backend/Admin/Usecustom.php index 2b2de392e7dd23b33b80250f438a954a0ca7c14c..ff429986e3afd735f1801ccc88384124ff998f3b 100644 --- a/app/code/Magento/Config/Model/Config/Backend/Admin/Usecustom.php +++ b/app/code/Magento/Config/Model/Config/Backend/Admin/Usecustom.php @@ -23,7 +23,7 @@ class Usecustom extends \Magento\Framework\App\Config\Value * @param \Magento\Framework\Registry $registry * @param \Magento\Framework\App\Config\ScopeConfigInterface $config * @param \Magento\Framework\App\Config\Storage\WriterInterface $configWriter - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -32,7 +32,7 @@ class Usecustom extends \Magento\Framework\App\Config\Value \Magento\Framework\Registry $registry, \Magento\Framework\App\Config\ScopeConfigInterface $config, \Magento\Framework\App\Config\Storage\WriterInterface $configWriter, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Config/Model/Config/Backend/Admin/Usesecretkey.php b/app/code/Magento/Config/Model/Config/Backend/Admin/Usesecretkey.php index 49298cb928838eb52bf8825da68d62eb771496ef..3f77e3b07d1768fb90c10926be824a9e7ed3defe 100644 --- a/app/code/Magento/Config/Model/Config/Backend/Admin/Usesecretkey.php +++ b/app/code/Magento/Config/Model/Config/Backend/Admin/Usesecretkey.php @@ -21,7 +21,7 @@ class Usesecretkey extends \Magento\Framework\App\Config\Value * @param \Magento\Framework\Registry $registry * @param \Magento\Framework\App\Config\ScopeConfigInterface $config * @param \Magento\Backend\Model\UrlInterface $backendUrl - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -30,7 +30,7 @@ class Usesecretkey extends \Magento\Framework\App\Config\Value \Magento\Framework\Registry $registry, \Magento\Framework\App\Config\ScopeConfigInterface $config, \Magento\Backend\Model\UrlInterface $backendUrl, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Config/Model/Config/Backend/Baseurl.php b/app/code/Magento/Config/Model/Config/Backend/Baseurl.php index 9f9db6d0a99c9cbcef5ae85e6d48bfc1f2f91476..30e63b7d2bee2e1489a8793e559a9121884c5e09 100644 --- a/app/code/Magento/Config/Model/Config/Backend/Baseurl.php +++ b/app/code/Magento/Config/Model/Config/Backend/Baseurl.php @@ -17,7 +17,7 @@ class Baseurl extends \Magento\Framework\App\Config\Value * @param \Magento\Framework\Registry $registry * @param \Magento\Framework\App\Config\ScopeConfigInterface $config * @param \Magento\Framework\View\Asset\MergeService $mergeService - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -26,7 +26,7 @@ class Baseurl extends \Magento\Framework\App\Config\Value \Magento\Framework\Registry $registry, \Magento\Framework\App\Config\ScopeConfigInterface $config, \Magento\Framework\View\Asset\MergeService $mergeService, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Config/Model/Config/Backend/Currency/AbstractCurrency.php b/app/code/Magento/Config/Model/Config/Backend/Currency/AbstractCurrency.php index 02ffa58b6b2abbe087983fcd2211777c98cc8d95..3daccc80463256313a6861a926267720752dd20c 100644 --- a/app/code/Magento/Config/Model/Config/Backend/Currency/AbstractCurrency.php +++ b/app/code/Magento/Config/Model/Config/Backend/Currency/AbstractCurrency.php @@ -29,7 +29,7 @@ abstract class AbstractCurrency extends \Magento\Framework\App\Config\Value * @param \Magento\Framework\Registry $registry * @param \Magento\Framework\App\Config\ScopeConfigInterface $config * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -38,7 +38,7 @@ abstract class AbstractCurrency extends \Magento\Framework\App\Config\Value \Magento\Framework\Registry $registry, \Magento\Framework\App\Config\ScopeConfigInterface $config, \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Config/Model/Config/Backend/Currency/Allow.php b/app/code/Magento/Config/Model/Config/Backend/Currency/Allow.php index f38db8cc6dd93b5aee503e95da5425cec8a3ab52..cd9a7e643d30918179adb758cd8aba11c1a2b475 100644 --- a/app/code/Magento/Config/Model/Config/Backend/Currency/Allow.php +++ b/app/code/Magento/Config/Model/Config/Backend/Currency/Allow.php @@ -23,7 +23,7 @@ class Allow extends AbstractCurrency * @param \Magento\Framework\App\Config\ScopeConfigInterface $config * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig * @param \Magento\Framework\Locale\CurrencyInterface $localeCurrency - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -33,7 +33,7 @@ class Allow extends AbstractCurrency \Magento\Framework\App\Config\ScopeConfigInterface $config, \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig, \Magento\Framework\Locale\CurrencyInterface $localeCurrency, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Config/Model/Config/Backend/Currency/Base.php b/app/code/Magento/Config/Model/Config/Backend/Currency/Base.php index 8b000db0117764c6a3b33133f706178648be8197..45470cc06a2a2c1ffe34519cd00ac79fa644b7aa 100644 --- a/app/code/Magento/Config/Model/Config/Backend/Currency/Base.php +++ b/app/code/Magento/Config/Model/Config/Backend/Currency/Base.php @@ -21,7 +21,7 @@ class Base extends AbstractCurrency * @param \Magento\Framework\App\Config\ScopeConfigInterface $config * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig * @param \Magento\Directory\Model\CurrencyFactory $currencyFactory - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -31,7 +31,7 @@ class Base extends AbstractCurrency \Magento\Framework\App\Config\ScopeConfigInterface $config, \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig, \Magento\Directory\Model\CurrencyFactory $currencyFactory, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Config/Model/Config/Backend/Currency/Cron.php b/app/code/Magento/Config/Model/Config/Backend/Currency/Cron.php index 2575a80ec7380ce42c3a156c60c1f9c67cf082d1..c88d752c82f196b2dce920564343209b7a03c397 100644 --- a/app/code/Magento/Config/Model/Config/Backend/Currency/Cron.php +++ b/app/code/Magento/Config/Model/Config/Backend/Currency/Cron.php @@ -22,7 +22,7 @@ class Cron extends \Magento\Framework\App\Config\Value * @param \Magento\Framework\Registry $registry * @param \Magento\Framework\App\Config\ScopeConfigInterface $config * @param \Magento\Framework\App\Config\ValueFactory $configValueFactory - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -31,7 +31,7 @@ class Cron extends \Magento\Framework\App\Config\Value \Magento\Framework\Registry $registry, \Magento\Framework\App\Config\ScopeConfigInterface $config, \Magento\Framework\App\Config\ValueFactory $configValueFactory, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Config/Model/Config/Backend/Encrypted.php b/app/code/Magento/Config/Model/Config/Backend/Encrypted.php index 51a78e6f188737aa2069b936f4ab13932d07275b..71aa76e17b5c90b902e8b8bd6c3029ca65dcf30f 100644 --- a/app/code/Magento/Config/Model/Config/Backend/Encrypted.php +++ b/app/code/Magento/Config/Model/Config/Backend/Encrypted.php @@ -23,7 +23,7 @@ class Encrypted extends \Magento\Framework\App\Config\Value implements * @param \Magento\Framework\Registry $registry * @param \Magento\Framework\App\Config\ScopeConfigInterface $config * @param \Magento\Framework\Encryption\EncryptorInterface $encryptor - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -32,7 +32,7 @@ class Encrypted extends \Magento\Framework\App\Config\Value implements \Magento\Framework\Registry $registry, \Magento\Framework\App\Config\ScopeConfigInterface $config, \Magento\Framework\Encryption\EncryptorInterface $encryptor, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Config/Model/Config/Backend/File.php b/app/code/Magento/Config/Model/Config/Backend/File.php index 1b03ae15671fb9b3bc4b3ad3bebd7f4836680b87..8925877efcb03a162d21b0a625bb75b09bfad6da 100644 --- a/app/code/Magento/Config/Model/Config/Backend/File.php +++ b/app/code/Magento/Config/Model/Config/Backend/File.php @@ -50,7 +50,7 @@ class File extends \Magento\Framework\App\Config\Value * @param \Magento\MediaStorage\Model\File\UploaderFactory $uploaderFactory * @param \Magento\Config\Model\Config\Backend\File\RequestData\RequestDataInterface $requestData * @param Filesystem $filesystem - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -61,7 +61,7 @@ class File extends \Magento\Framework\App\Config\Value \Magento\MediaStorage\Model\File\UploaderFactory $uploaderFactory, \Magento\Config\Model\Config\Backend\File\RequestData\RequestDataInterface $requestData, Filesystem $filesystem, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Config/Model/Config/Backend/Image/Adapter.php b/app/code/Magento/Config/Model/Config/Backend/Image/Adapter.php index 486df64d2fcc4408dc51283ebc1c1a5fd7272bd9..a8c3fa288623eff7814c90d1737151f49f5ce839 100644 --- a/app/code/Magento/Config/Model/Config/Backend/Image/Adapter.php +++ b/app/code/Magento/Config/Model/Config/Backend/Image/Adapter.php @@ -23,7 +23,7 @@ class Adapter extends \Magento\Framework\App\Config\Value * @param \Magento\Framework\Registry $registry * @param \Magento\Framework\App\Config\ScopeConfigInterface $config * @param \Magento\Framework\Image\AdapterFactory $imageFactory - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -32,7 +32,7 @@ class Adapter extends \Magento\Framework\App\Config\Value \Magento\Framework\Registry $registry, \Magento\Framework\App\Config\ScopeConfigInterface $config, \Magento\Framework\Image\AdapterFactory $imageFactory, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Config/Model/Config/Backend/Locale.php b/app/code/Magento/Config/Model/Config/Backend/Locale.php index 6c7fca6df42e569a1c449495337cd4044262c12c..c6cec53f26a2f4525d6bfd8c1b24d8248e9c6111 100644 --- a/app/code/Magento/Config/Model/Config/Backend/Locale.php +++ b/app/code/Magento/Config/Model/Config/Backend/Locale.php @@ -41,7 +41,7 @@ class Locale extends \Magento\Framework\App\Config\Value * @param \Magento\Store\Model\WebsiteFactory $websiteFactory * @param \Magento\Store\Model\StoreFactory $storeFactory * @param \Magento\Framework\Locale\CurrencyInterface $localeCurrency - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @@ -55,7 +55,7 @@ class Locale extends \Magento\Framework\App\Config\Value \Magento\Store\Model\WebsiteFactory $websiteFactory, \Magento\Store\Model\StoreFactory $storeFactory, \Magento\Framework\Locale\CurrencyInterface $localeCurrency, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Config/Model/Config/Backend/Log/Cron.php b/app/code/Magento/Config/Model/Config/Backend/Log/Cron.php index 83ae49a6cf760715bcf75ad29e3ee59da28e737c..61695bcf7421e1354aff23bf28f1aa1f1242716b 100644 --- a/app/code/Magento/Config/Model/Config/Backend/Log/Cron.php +++ b/app/code/Magento/Config/Model/Config/Backend/Log/Cron.php @@ -30,7 +30,7 @@ class Cron extends \Magento\Framework\App\Config\Value * @param \Magento\Framework\Registry $registry * @param \Magento\Framework\App\Config\ScopeConfigInterface $config * @param \Magento\Framework\App\Config\ValueFactory $configValueFactory - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param string $runModelPath * @param array $data @@ -40,7 +40,7 @@ class Cron extends \Magento\Framework\App\Config\Value \Magento\Framework\Registry $registry, \Magento\Framework\App\Config\ScopeConfigInterface $config, \Magento\Framework\App\Config\ValueFactory $configValueFactory, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, $runModelPath = '', array $data = [] diff --git a/app/code/Magento/Config/Model/Config/Backend/Secure.php b/app/code/Magento/Config/Model/Config/Backend/Secure.php index 7eab9b7846fb8e0eb664e74c26c808d8633d0ce0..ef41a60fe4e562cd012d9676cab78b486251ce97 100644 --- a/app/code/Magento/Config/Model/Config/Backend/Secure.php +++ b/app/code/Magento/Config/Model/Config/Backend/Secure.php @@ -16,7 +16,7 @@ class Secure extends \Magento\Framework\App\Config\Value * @param \Magento\Framework\Registry $registry * @param \Magento\Framework\App\Config\ScopeConfigInterface $config * @param \Magento\Framework\View\Asset\MergeService $mergeService - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -25,7 +25,7 @@ class Secure extends \Magento\Framework\App\Config\Value \Magento\Framework\Registry $registry, \Magento\Framework\App\Config\ScopeConfigInterface $config, \Magento\Framework\View\Asset\MergeService $mergeService, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Config/Model/Config/Backend/Store.php b/app/code/Magento/Config/Model/Config/Backend/Store.php index 85c10c62a1817318ab877b478d33af23ca044cbd..69e629569157ab5adcaa6a272b94c19b65aba653 100644 --- a/app/code/Magento/Config/Model/Config/Backend/Store.php +++ b/app/code/Magento/Config/Model/Config/Backend/Store.php @@ -21,7 +21,7 @@ class Store extends \Magento\Framework\App\Config\Value * @param \Magento\Framework\Registry $registry * @param \Magento\Framework\App\Config\ScopeConfigInterface $config * @param \Magento\Framework\App\Config\MutableScopeConfigInterface $mutableConfig - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -30,7 +30,7 @@ class Store extends \Magento\Framework\App\Config\Value \Magento\Framework\Registry $registry, \Magento\Framework\App\Config\ScopeConfigInterface $config, \Magento\Framework\App\Config\MutableScopeConfigInterface $mutableConfig, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Config/Model/Config/Backend/Translate.php b/app/code/Magento/Config/Model/Config/Backend/Translate.php index e91a44e91aeb8f911f12b8f9283582ed28babb64..28b908668f709afe4ed825b5adc1aae4f2ab19b9 100644 --- a/app/code/Magento/Config/Model/Config/Backend/Translate.php +++ b/app/code/Magento/Config/Model/Config/Backend/Translate.php @@ -38,7 +38,7 @@ class Translate extends \Magento\Framework\App\Config\Value * @param \Magento\Framework\App\Config\ScopeConfigInterface $config * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -48,7 +48,7 @@ class Translate extends \Magento\Framework\App\Config\Value \Magento\Framework\App\Config\ScopeConfigInterface $config, \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig, \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Config/Model/Config/Structure/AbstractElement.php b/app/code/Magento/Config/Model/Config/Structure/AbstractElement.php index 03ed66f29abec3ebd79735f648aefcd633dc44cc..073d23f450a795d81231a4268bc3dece788a784f 100644 --- a/app/code/Magento/Config/Model/Config/Structure/AbstractElement.php +++ b/app/code/Magento/Config/Model/Config/Structure/AbstractElement.php @@ -31,12 +31,19 @@ abstract class AbstractElement implements ElementInterface */ protected $_storeManager; + /** + * @var \Magento\Framework\Module\Manager + */ + protected $moduleManager; + /** * @param \Magento\Store\Model\StoreManagerInterface $storeManager + * @param \Magento\Framework\Module\Manager $moduleManager */ - public function __construct(StoreManagerInterface $storeManager) + public function __construct(StoreManagerInterface $storeManager, \Magento\Framework\Module\Manager $moduleManager) { $this->_storeManager = $storeManager; + $this->moduleManager = $moduleManager; } /** @@ -134,6 +141,10 @@ abstract class AbstractElement implements ElementInterface */ public function isVisible() { + if (isset($this->_data['if_module_enabled']) && + !$this->moduleManager->isOutputEnabled($this->_data['if_module_enabled'])) { + return false; + } $showInScope = [ \Magento\Store\Model\ScopeInterface::SCOPE_STORE => $this->_hasVisibilityValue('showInStore'), \Magento\Store\Model\ScopeInterface::SCOPE_WEBSITE => $this->_hasVisibilityValue('showInWebsite'), diff --git a/app/code/Magento/Config/Model/Config/Structure/Element/AbstractComposite.php b/app/code/Magento/Config/Model/Config/Structure/Element/AbstractComposite.php index a25b1688eea4e08951ea0d082f3d1de0572bd16d..d3707277d55951867088dcda4e96f73b2c3b643e 100644 --- a/app/code/Magento/Config/Model/Config/Structure/Element/AbstractComposite.php +++ b/app/code/Magento/Config/Model/Config/Structure/Element/AbstractComposite.php @@ -16,13 +16,15 @@ abstract class AbstractComposite extends \Magento\Config\Model\Config\Structure\ /** * @param \Magento\Store\Model\StoreManagerInterface $storeManager + * @param \Magento\Framework\Module\Manager $moduleManager * @param Iterator $childrenIterator */ public function __construct( \Magento\Store\Model\StoreManagerInterface $storeManager, + \Magento\Framework\Module\Manager $moduleManager, Iterator $childrenIterator ) { - parent::__construct($storeManager); + parent::__construct($storeManager, $moduleManager); $this->_childrenIterator = $childrenIterator; } diff --git a/app/code/Magento/Config/Model/Config/Structure/Element/Field.php b/app/code/Magento/Config/Model/Config/Structure/Element/Field.php index 5d7d5d1e329a1e58dae95a030c1041d9de3b4c8a..8f218a34f02296157738514729562ede40cf32b8 100644 --- a/app/code/Magento/Config/Model/Config/Structure/Element/Field.php +++ b/app/code/Magento/Config/Model/Config/Structure/Element/Field.php @@ -50,21 +50,23 @@ class Field extends \Magento\Config\Model\Config\Structure\AbstractElement /** * @param \Magento\Store\Model\StoreManagerInterface $storeManager + * @param \Magento\Framework\Module\Manager $moduleManager * @param \Magento\Config\Model\Config\BackendFactory $backendFactory * @param \Magento\Config\Model\Config\SourceFactory $sourceFactory * @param \Magento\Config\Model\Config\CommentFactory $commentFactory * @param \Magento\Framework\View\Element\BlockFactory $blockFactory - * @param \Magento\Config\Model\Config\Structure\Element\Dependency\Mapper $dependencyMapper + * @param Dependency\Mapper $dependencyMapper */ public function __construct( \Magento\Store\Model\StoreManagerInterface $storeManager, + \Magento\Framework\Module\Manager $moduleManager, \Magento\Config\Model\Config\BackendFactory $backendFactory, \Magento\Config\Model\Config\SourceFactory $sourceFactory, \Magento\Config\Model\Config\CommentFactory $commentFactory, \Magento\Framework\View\Element\BlockFactory $blockFactory, \Magento\Config\Model\Config\Structure\Element\Dependency\Mapper $dependencyMapper ) { - parent::__construct($storeManager); + parent::__construct($storeManager, $moduleManager); $this->_backendFactory = $backendFactory; $this->_sourceFactory = $sourceFactory; $this->_commentFactory = $commentFactory; diff --git a/app/code/Magento/Config/Model/Config/Structure/Element/Group.php b/app/code/Magento/Config/Model/Config/Structure/Element/Group.php index 3c1028812a6bef52222847c912585dc141877257..7e523248c3e3fd0b78b572ed67e5301faea305bc 100644 --- a/app/code/Magento/Config/Model/Config/Structure/Element/Group.php +++ b/app/code/Magento/Config/Model/Config/Structure/Element/Group.php @@ -25,17 +25,19 @@ class Group extends AbstractComposite /** * @param \Magento\Store\Model\StoreManagerInterface $storeManager - * @param \Magento\Config\Model\Config\Structure\Element\Iterator\Field $childrenIterator + * @param \Magento\Framework\Module\Manager $moduleManager + * @param Iterator\Field $childrenIterator * @param \Magento\Config\Model\Config\BackendClone\Factory $cloneModelFactory - * @param \Magento\Config\Model\Config\Structure\Element\Dependency\Mapper $dependencyMapper + * @param Dependency\Mapper $dependencyMapper */ public function __construct( \Magento\Store\Model\StoreManagerInterface $storeManager, + \Magento\Framework\Module\Manager $moduleManager, \Magento\Config\Model\Config\Structure\Element\Iterator\Field $childrenIterator, \Magento\Config\Model\Config\BackendClone\Factory $cloneModelFactory, \Magento\Config\Model\Config\Structure\Element\Dependency\Mapper $dependencyMapper ) { - parent::__construct($storeManager, $childrenIterator); + parent::__construct($storeManager, $moduleManager, $childrenIterator); $this->_cloneModelFactory = $cloneModelFactory; $this->_dependencyMapper = $dependencyMapper; } diff --git a/app/code/Magento/Config/Model/Config/Structure/Element/Section.php b/app/code/Magento/Config/Model/Config/Structure/Element/Section.php index f8839b215d3dc014b4bee149098e82bfb889ef0f..46696967d31f1c0a11cea6a3fb1d4fde061ad8cd 100644 --- a/app/code/Magento/Config/Model/Config/Structure/Element/Section.php +++ b/app/code/Magento/Config/Model/Config/Structure/Element/Section.php @@ -16,15 +16,17 @@ class Section extends AbstractComposite /** * @param \Magento\Store\Model\StoreManagerInterface $storeManager + * @param \Magento\Framework\Module\Manager $moduleManager * @param Iterator $childrenIterator * @param \Magento\Framework\AuthorizationInterface $authorization */ public function __construct( \Magento\Store\Model\StoreManagerInterface $storeManager, + \Magento\Framework\Module\Manager $moduleManager, Iterator $childrenIterator, \Magento\Framework\AuthorizationInterface $authorization ) { - parent::__construct($storeManager, $childrenIterator); + parent::__construct($storeManager, $moduleManager, $childrenIterator); $this->_authorization = $authorization; } diff --git a/app/code/Magento/Config/Model/ResourceModel/Config.php b/app/code/Magento/Config/Model/ResourceModel/Config.php index 4dcaea38a814f24bd4c0e827c50bb48e477192ac..7f7ccfc88261b3341c57b1ede1606e9427480a70 100644 --- a/app/code/Magento/Config/Model/ResourceModel/Config.php +++ b/app/code/Magento/Config/Model/ResourceModel/Config.php @@ -3,9 +3,6 @@ * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ - -// @codingStandardsIgnoreFile - namespace Magento\Config\Model\ResourceModel; /** @@ -13,7 +10,8 @@ namespace Magento\Config\Model\ResourceModel; * * @author Magento Core Team <core@magentocommerce.com> */ -class Config extends \Magento\Framework\Model\ModelResource\Db\AbstractDb implements \Magento\Framework\App\Config\ConfigResource\ConfigInterface +class Config extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb implements + \Magento\Framework\App\Config\ConfigResource\ConfigInterface { /** * Define main table diff --git a/app/code/Magento/Config/Model/ResourceModel/Config/Data.php b/app/code/Magento/Config/Model/ResourceModel/Config/Data.php index 3beaf6e6ec4ee2b2224b1ec231a52dd29729bd8e..fc7566af724ef9520c8c4df17e8ef5c627ee0956 100644 --- a/app/code/Magento/Config/Model/ResourceModel/Config/Data.php +++ b/app/code/Magento/Config/Model/ResourceModel/Config/Data.php @@ -10,7 +10,7 @@ namespace Magento\Config\Model\ResourceModel\Config; * * @author Magento Core Team <core@magentocommerce.com> */ -class Data extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Data extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Define main table diff --git a/app/code/Magento/Config/Model/ResourceModel/Config/Data/Collection.php b/app/code/Magento/Config/Model/ResourceModel/Config/Data/Collection.php index f6394cabb2c9e016810c7b0cb9532aa912496e67..a8eed0304cf707f71addc2c8eb69cbd250b2baf4 100644 --- a/app/code/Magento/Config/Model/ResourceModel/Config/Data/Collection.php +++ b/app/code/Magento/Config/Model/ResourceModel/Config/Data/Collection.php @@ -10,7 +10,7 @@ namespace Magento\Config\Model\ResourceModel\Config\Data; * * @author Magento Core Team <core@magentocommerce.com> */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Define resource model diff --git a/app/code/Magento/Config/Test/Unit/Model/Config/Backend/EncryptedTest.php b/app/code/Magento/Config/Test/Unit/Model/Config/Backend/EncryptedTest.php index c420c03a65fb4f3895e58f322e9408df2af0cd06..ed284eb16dd41915ccc6bf2e1e15d44e4ac642b9 100644 --- a/app/code/Magento/Config/Test/Unit/Model/Config/Backend/EncryptedTest.php +++ b/app/code/Magento/Config/Test/Unit/Model/Config/Backend/EncryptedTest.php @@ -33,7 +33,7 @@ class EncryptedTest extends \PHPUnit_Framework_TestCase $this->returnValue($eventDispatcherMock) ); $this->_resourceMock = $this->getMock( - 'Magento\Framework\Model\ModelResource\AbstractResource', + 'Magento\Framework\Model\ResourceModel\AbstractResource', [ '_construct', 'getConnection', diff --git a/app/code/Magento/Config/Test/Unit/Model/Config/Structure/AbstractElementTest.php b/app/code/Magento/Config/Test/Unit/Model/Config/Structure/AbstractElementTest.php index 778141ab2132096aa8d0e750f7175bebdcea935b..90e0d13c3e60d1c688ffcdf4a152c8dba3c1439c 100644 --- a/app/code/Magento/Config/Test/Unit/Model/Config/Structure/AbstractElementTest.php +++ b/app/code/Magento/Config/Test/Unit/Model/Config/Structure/AbstractElementTest.php @@ -17,24 +17,33 @@ class AbstractElementTest extends \PHPUnit_Framework_TestCase /** * @var \PHPUnit_Framework_MockObject_MockObject */ - protected $_storeManager; + protected $storeManagerMock; + + /** + * @var \Magento\Config\Model\Config\Structure\AbstractElement | \PHPUnit_Framework_MockObject_MockObject + */ + protected $moduleManagerMock; protected function setUp() { - $this->_storeManager = $this->getMock('Magento\Store\Model\StoreManager', [], [], '', false); + $this->storeManagerMock = $this->getMock('Magento\Store\Model\StoreManager', [], [], '', false); + $this->moduleManagerMock = $this->getMock( + 'Magento\Framework\Module\Manager', + ['isOutputEnabled'], + [], + '', + false + ); $this->_model = $this->getMockForAbstractClass( 'Magento\Config\Model\Config\Structure\AbstractElement', - [$this->_storeManager] + [ + 'storeManager' => $this->storeManagerMock, + 'moduleManager' => $this->moduleManagerMock, + ] ); } - protected function tearDown() - { - unset($this->_model); - unset($this->_storeManager); - } - public function testGetId() { $this->assertEquals('', $this->_model->getId()); @@ -76,7 +85,7 @@ class AbstractElementTest extends \PHPUnit_Framework_TestCase public function testIsVisibleReturnsTrueInSingleStoreModeForNonHiddenElements() { - $this->_storeManager->expects($this->once())->method('isSingleStoreMode')->will($this->returnValue(true)); + $this->storeManagerMock->expects($this->once())->method('isSingleStoreMode')->will($this->returnValue(true)); $this->_model->setData( ['showInDefault' => 1, 'showInStore' => 0, 'showInWebsite' => 0], ScopeConfigInterface::SCOPE_TYPE_DEFAULT @@ -86,7 +95,7 @@ class AbstractElementTest extends \PHPUnit_Framework_TestCase public function testIsVisibleReturnsFalseInSingleStoreModeForHiddenElements() { - $this->_storeManager->expects($this->once())->method('isSingleStoreMode')->will($this->returnValue(true)); + $this->storeManagerMock->expects($this->once())->method('isSingleStoreMode')->will($this->returnValue(true)); $this->_model->setData( ['hide_in_single_store_mode' => 1, 'showInDefault' => 1, 'showInStore' => 0, 'showInWebsite' => 0], ScopeConfigInterface::SCOPE_TYPE_DEFAULT @@ -99,7 +108,7 @@ class AbstractElementTest extends \PHPUnit_Framework_TestCase */ public function testIsVisibleReturnsFalseInSingleStoreModeForInvisibleElements() { - $this->_storeManager->expects($this->once())->method('isSingleStoreMode')->will($this->returnValue(true)); + $this->storeManagerMock->expects($this->once())->method('isSingleStoreMode')->will($this->returnValue(true)); $this->_model->setData( ['showInDefault' => 0, 'showInStore' => 0, 'showInWebsite' => 0], ScopeConfigInterface::SCOPE_TYPE_DEFAULT @@ -165,6 +174,25 @@ class AbstractElementTest extends \PHPUnit_Framework_TestCase ]; } + public function testIsVisibleReturnFalseIfModuleNotEnabled() + { + $this->moduleManagerMock->expects($this->once()) + ->method('isOutputEnabled') + ->with('test_module') + ->willReturn(false); + $this->_model->setData( + [ + 'showInDefault' => 1, + 'showInStore' => 0, + 'showInWebsite' => 0, + 'if_module_enabled' => 'test_module', + ], + 'default' + ); + $this->assertFalse($this->_model->isVisible()); + + } + public function testGetClass() { $this->assertEquals('', $this->_model->getClass()); diff --git a/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/AbstractCompositeTest.php b/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/AbstractCompositeTest.php index 08831a5a364b0f6d3ab9317461f73ca9bd339834..555e59eac7acb95674ebc045324459c7344b3330 100644 --- a/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/AbstractCompositeTest.php +++ b/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/AbstractCompositeTest.php @@ -22,6 +22,11 @@ class AbstractCompositeTest extends \PHPUnit_Framework_TestCase */ protected $_iteratorMock; + /** + * @var \Magento\Framework\Module\Manager | \PHPUnit_Framework_MockObject_MockObject + */ + protected $moduleManagerMock; + /** * Test element data * @@ -44,10 +49,10 @@ class AbstractCompositeTest extends \PHPUnit_Framework_TestCase false ); $this->_storeManagerMock = $this->getMock('Magento\Store\Model\StoreManager', [], [], '', false); - + $this->moduleManagerMock = $this->getMock('Magento\Framework\Module\Manager', [], [], '', false); $this->_model = $this->getMockForAbstractClass( 'Magento\Config\Model\Config\Structure\Element\AbstractComposite', - [$this->_storeManagerMock, $this->_iteratorMock] + [$this->_storeManagerMock, $this->moduleManagerMock, $this->_iteratorMock] ); } diff --git a/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/FieldTest.php b/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/FieldTest.php index bd752f99703a90442d0627423802f7f2f041179b..b20518c411f9eead5bb8adc8de28e1e27da0abc3 100644 --- a/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/FieldTest.php +++ b/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/FieldTest.php @@ -10,6 +10,8 @@ namespace Magento\Config\Test\Unit\Model\Config\Structure\Element; +use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; + class FieldTest extends \PHPUnit_Framework_TestCase { const FIELD_TEST_CONSTANT = "field test constant"; @@ -19,11 +21,6 @@ class FieldTest extends \PHPUnit_Framework_TestCase */ protected $_model; - /** - * @var \PHPUnit_Framework_MockObject_MockObject - */ - protected $_storeManagerMock; - /** * @var \PHPUnit_Framework_MockObject_MockObject */ @@ -49,21 +46,10 @@ class FieldTest extends \PHPUnit_Framework_TestCase */ protected $_depMapperMock; - /** - * @var \PHPUnit_Framework_MockObject_MockObject - */ - protected $_iteratorMock; - protected function setUp() { - $this->_iteratorMock = $this->getMock( - 'Magento\Config\Model\Config\Structure\Element\Iterator', - [], - [], - '', - false - ); - $this->_storeManagerMock = $this->getMock('Magento\Store\Model\StoreManager', [], [], '', false); + $objectManager = new ObjectManager($this); + $this->_backendFactoryMock = $this->getMock( 'Magento\Config\Model\Config\BackendFactory', [], @@ -100,20 +86,20 @@ class FieldTest extends \PHPUnit_Framework_TestCase false ); - $this->_model = new \Magento\Config\Model\Config\Structure\Element\Field( - $this->_storeManagerMock, - $this->_backendFactoryMock, - $this->_sourceFactoryMock, - $this->_commentFactoryMock, - $this->_blockFactoryMock, - $this->_depMapperMock + $this->_model = $objectManager->getObject( + 'Magento\Config\Model\Config\Structure\Element\Field', + [ + 'backendFactory' => $this->_backendFactoryMock, + 'sourceFactory' => $this->_sourceFactoryMock, + 'commentFactory' => $this->_commentFactoryMock, + 'blockFactory' => $this->_blockFactoryMock, + 'dependencyMapper' => $this->_depMapperMock, + ] ); } protected function tearDown() { - unset($this->_iteratorMock); - unset($this->_storeManagerMock); unset($this->_backendFactoryMock); unset($this->_sourceFactoryMock); unset($this->_commentFactoryMock); diff --git a/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/GroupTest.php b/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/GroupTest.php index b92a76069ec3ec6396ff0e3c8ac58fd33fbea6b3..5490eaa0a07cb308c1df02e4751e346e840e4666 100644 --- a/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/GroupTest.php +++ b/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/GroupTest.php @@ -5,6 +5,8 @@ */ namespace Magento\Config\Test\Unit\Model\Config\Structure\Element; +use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; + class GroupTest extends \PHPUnit_Framework_TestCase { /** @@ -12,21 +14,11 @@ class GroupTest extends \PHPUnit_Framework_TestCase */ protected $_model; - /** - * @var \PHPUnit_Framework_MockObject_MockObject - */ - protected $_storeManagerMock; - /** * @var \PHPUnit_Framework_MockObject_MockObject */ protected $_cloneFactoryMock; - /** - * @var \PHPUnit_Framework_MockObject_MockObject - */ - protected $_iteratorMock; - /** * @var \PHPUnit_Framework_MockObject_MockObject */ @@ -34,14 +26,7 @@ class GroupTest extends \PHPUnit_Framework_TestCase protected function setUp() { - $this->_iteratorMock = $this->getMock( - 'Magento\Config\Model\Config\Structure\Element\Iterator\Field', - [], - [], - '', - false - ); - $this->_storeManagerMock = $this->getMock('Magento\Store\Model\StoreManager', [], [], '', false); + $objectManager = new ObjectManager($this); $this->_cloneFactoryMock = $this->getMock( 'Magento\Config\Model\Config\BackendClone\Factory', [], @@ -57,19 +42,18 @@ class GroupTest extends \PHPUnit_Framework_TestCase false ); - $this->_model = new \Magento\Config\Model\Config\Structure\Element\Group( - $this->_storeManagerMock, - $this->_iteratorMock, - $this->_cloneFactoryMock, - $this->_depMapperMock + $this->_model = $objectManager->getObject( + 'Magento\Config\Model\Config\Structure\Element\Group', + [ + 'cloneModelFactory' => $this->_cloneFactoryMock, + 'dependencyMapper' => $this->_depMapperMock, + ] ); } protected function tearDown() { unset($this->_model); - unset($this->_iteratorMock); - unset($this->_storeManagerMock); unset($this->_cloneFactoryMock); unset($this->_depMapperMock); } diff --git a/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/SectionTest.php b/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/SectionTest.php index 86812767f156adfaee9faddd74689b05bb31511f..a14a1e4ad22ba73fd3e0596838b1668dafa3b294 100644 --- a/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/SectionTest.php +++ b/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/SectionTest.php @@ -5,6 +5,8 @@ */ namespace Magento\Config\Test\Unit\Model\Config\Structure\Element; +use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; + class SectionTest extends \PHPUnit_Framework_TestCase { /** @@ -22,34 +24,24 @@ class SectionTest extends \PHPUnit_Framework_TestCase */ protected $_authorizationMock; - /** - * @var \PHPUnit_Framework_MockObject_MockObject - */ - protected $_iteratorMock; - protected function setUp() { - $this->_iteratorMock = $this->getMock( - 'Magento\Config\Model\Config\Structure\Element\Iterator\Field', - [], - [], - '', - false - ); + $objectManager = new ObjectManager($this); $this->_storeManagerMock = $this->getMock('Magento\Store\Model\StoreManager', [], [], '', false); $this->_authorizationMock = $this->getMock('Magento\Framework\AuthorizationInterface'); - $this->_model = new \Magento\Config\Model\Config\Structure\Element\Section( - $this->_storeManagerMock, - $this->_iteratorMock, - $this->_authorizationMock + $this->_model = $objectManager->getObject( + 'Magento\Config\Model\Config\Structure\Element\Section', + [ + 'storeManager' => $this->_storeManagerMock, + 'authorization' => $this->_authorizationMock, + ] ); } protected function tearDown() { unset($this->_model); - unset($this->_iteratorMock); unset($this->_storeManagerMock); unset($this->_authorizationMock); } diff --git a/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/TabTest.php b/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/TabTest.php index d8c9af76865c5c78f112c5fa8bae83b0a3812c16..248cc3c18ffb33654d534f6dc045587ec8c1cdc7 100644 --- a/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/TabTest.php +++ b/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/TabTest.php @@ -5,6 +5,8 @@ */ namespace Magento\Config\Test\Unit\Model\Config\Structure\Element; +use \Magento\Framework\TestFramework\Unit\Helper\ObjectManager; + class TabTest extends \PHPUnit_Framework_TestCase { /** @@ -12,11 +14,6 @@ class TabTest extends \PHPUnit_Framework_TestCase */ protected $_model; - /** - * @var \PHPUnit_Framework_MockObject_MockObject - */ - protected $_storeManagerMock; - /** * @var \PHPUnit_Framework_MockObject_MockObject */ @@ -31,11 +28,10 @@ class TabTest extends \PHPUnit_Framework_TestCase '', false ); - $this->_storeManagerMock = $this->getMock('Magento\Store\Model\StoreManager', [], [], '', false); - $this->_model = new \Magento\Config\Model\Config\Structure\Element\Tab( - $this->_storeManagerMock, - $this->_iteratorMock + $this->_model = (new ObjectManager($this))->getObject( + 'Magento\Config\Model\Config\Structure\Element\Tab', + ['childrenIterator' => $this->_iteratorMock] ); } @@ -43,7 +39,6 @@ class TabTest extends \PHPUnit_Framework_TestCase { unset($this->_model); unset($this->_iteratorMock); - unset($this->_storeManagerMock); } public function testIsVisibleOnlyChecksPresenceOfChildren() diff --git a/app/code/Magento/Config/etc/adminhtml/events.xml b/app/code/Magento/Config/etc/adminhtml/events.xml index 432149ddd005d78fef7a8624b15692e034d6b99f..10ae4f19e86ee03e5d11e1fffcd20427e4c647f6 100644 --- a/app/code/Magento/Config/etc/adminhtml/events.xml +++ b/app/code/Magento/Config/etc/adminhtml/events.xml @@ -7,6 +7,6 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="admin_system_config_changed_section_admin"> - <observer name="bind_locale" instance="Magento\Config\Observer\Config\Backend\Admin\AfterCustomUrlChangedObserver" method="execute" /> + <observer name="bind_locale" instance="Magento\Config\Observer\Config\Backend\Admin\AfterCustomUrlChangedObserver" /> </event> </config> diff --git a/app/code/Magento/Config/view/adminhtml/templates/system/config/edit.phtml b/app/code/Magento/Config/view/adminhtml/templates/system/config/edit.phtml index dc585c33cea087bb2aa3774c8e85b66977b8e11a..5c2157d83a930d48abe35f3d969ae25550bc3676 100644 --- a/app/code/Magento/Config/view/adminhtml/templates/system/config/edit.phtml +++ b/app/code/Magento/Config/view/adminhtml/templates/system/config/edit.phtml @@ -25,7 +25,7 @@ <script> require([ "jquery", - "Magento_Ui/js/lib/registry/registry", + "uiRegistry", "jquery/jquery.hashchange", "mage/mage", "prototype", diff --git a/app/code/Magento/ConfigurableProduct/Block/Product/View/Type/Configurable.php b/app/code/Magento/ConfigurableProduct/Block/Product/View/Type/Configurable.php index e2ba278cbc84bc83995ea7c44df653a7880b8670..fce1979115e66199ff8932a3de3dbc8bac44cf5c 100644 --- a/app/code/Magento/ConfigurableProduct/Block/Product/View/Type/Configurable.php +++ b/app/code/Magento/ConfigurableProduct/Block/Product/View/Type/Configurable.php @@ -198,6 +198,7 @@ class Configurable extends \Magento\Catalog\Block\Product\View\AbstractView 'productId' => $currentProduct->getId(), 'chooseText' => __('Choose an Option...'), 'images' => isset($options['images']) ? $options['images'] : [], + 'index' => isset($options['index']) ? $options['index'] : [], ]; if ($currentProduct->hasPreconfiguredValues() && !empty($attributesData['defaultValues'])) { diff --git a/app/code/Magento/ConfigurableProduct/Helper/Data.php b/app/code/Magento/ConfigurableProduct/Helper/Data.php index bfd993d75414c1e21fbfbe23d05016563e3129d1..91dd722424219c550a555622bd165df5e242706d 100644 --- a/app/code/Magento/ConfigurableProduct/Helper/Data.php +++ b/app/code/Magento/ConfigurableProduct/Helper/Data.php @@ -30,6 +30,44 @@ class Data $this->imageHelper = $imageHelper; } + /** + * Retrieve collection of gallery images + * + * @param \Magento\Catalog\Api\Data\ProductInterface $product + * @return \Magento\Catalog\Model\Product\Image[]|null + */ + public function getGalleryImages(\Magento\Catalog\Api\Data\ProductInterface $product) + { + $images = $product->getMediaGalleryImages(); + if ($images instanceof \Magento\Framework\Data\Collection) { + foreach ($images as &$image) { + /** @var $image \Magento\Catalog\Model\Product\Image */ + $image->setData( + 'small_image_url', + $this->imageHelper->init($product, 'product_page_image_small') + ->setImageFile($image->getFile()) + ->getUrl() + ); + $image->setData( + 'medium_image_url', + $this->imageHelper->init($product, 'product_page_image_medium') + ->constrainOnly(true)->keepAspectRatio(true)->keepFrame(false) + ->setImageFile($image->getFile()) + ->getUrl() + ); + $image->setData( + 'large_image_url', + $this->imageHelper->init($product, 'product_page_image_large') + ->constrainOnly(true)->keepAspectRatio(true)->keepFrame(false) + ->setImageFile($image->getFile()) + ->getUrl() + ); + } + } + + return $images; + } + /** * Get Options for Configurable Product Options * @@ -42,16 +80,27 @@ class Data $options = []; foreach ($allowedProducts as $product) { $productId = $product->getId(); + $images = $this->getGalleryImages($product); + if ($images) { + foreach ($images as $image) { + $options['images'][$productId][] = + [ + 'thumb' => $image->getData('small_image_url'), + 'img' => $image->getData('medium_image_url'), + 'full' => $image->getData('large_image_url'), + 'caption' => $image->getLabel(), + 'position' => $image->getPosition(), + 'isMain' => $image->getFile() == $product->getImage(), + ]; + } + } foreach ($this->getAllowAttributes($currentProduct) as $attribute) { $productAttribute = $attribute->getProductAttribute(); $productAttributeId = $productAttribute->getId(); $attributeValue = $product->getData($productAttribute->getAttributeCode()); $options[$productAttributeId][$attributeValue][] = $productId; - $imageUrl = (!$product->getImage() || $product->getImage() === 'no_selection') - ? $this->imageHelper->init($currentProduct, 'product_page_image_large')->getUrl() - : $this->imageHelper->init($product, 'product_page_image_large')->getUrl(); - $options['images'][$productAttributeId][$attributeValue][$productId] = $imageUrl; + $options['index'][$productId][$productAttributeId] = $attributeValue; } } return $options; diff --git a/app/code/Magento/ConfigurableProduct/Model/Product/Type/Configurable.php b/app/code/Magento/ConfigurableProduct/Model/Product/Type/Configurable.php index 05ac7031edfbbe3ad734c7dae9140b810376b8fa..85eae4dae7cda194432c754ef9d5e841a42d8da5 100644 --- a/app/code/Magento/ConfigurableProduct/Model/Product/Type/Configurable.php +++ b/app/code/Magento/ConfigurableProduct/Model/Product/Type/Configurable.php @@ -440,7 +440,9 @@ class Configurable extends \Magento\Catalog\Model\Product\Type\AbstractType } $usedProducts = []; - $collection = $this->getUsedProductCollection($product)->addAttributeToSelect('*') + $collection = $this->getUsedProductCollection($product) + ->addAttributeToSelect('*') + ->addAttributeToSelect('media_gallery') ->addFilterByRequiredOptions() ->setStoreId($product->getStoreId()); @@ -454,6 +456,8 @@ class Configurable extends \Magento\Catalog\Model\Product\Type\AbstractType } foreach ($collection as $item) { + /** @var \Magento\Catalog\Model\Product $item */ + $item->getResource()->getAttribute('media_gallery')->getBackend()->afterLoad($item); $usedProducts[] = $item; } diff --git a/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Type/Configurable.php b/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Type/Configurable.php index f701da73b903ca08e6a23469a69982c258d76698..f11e401776daf23785789b586f9a7b084b50c210 100644 --- a/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Type/Configurable.php +++ b/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Type/Configurable.php @@ -7,7 +7,7 @@ */ namespace Magento\ConfigurableProduct\Model\ResourceModel\Product\Type; -class Configurable extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Configurable extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Catalog product relation @@ -17,12 +17,12 @@ class Configurable extends \Magento\Framework\Model\ModelResource\Db\AbstractDb protected $_catalogProductRelation; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Catalog\Model\ResourceModel\Product\Relation $catalogProductRelation * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Catalog\Model\ResourceModel\Product\Relation $catalogProductRelation, $connectionName = null ) { diff --git a/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Type/Configurable/Attribute.php b/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Type/Configurable/Attribute.php index b32eea47a1879e72b10c2f6d9fdc96706c1b1923..f031775006bb5f8a1f16db56c58a274f1a90d406 100644 --- a/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Type/Configurable/Attribute.php +++ b/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Type/Configurable/Attribute.php @@ -9,7 +9,7 @@ namespace Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configura use Magento\ConfigurableProduct\Model\Product\Type\Configurable\Attribute as ConfigurableAttribute; -class Attribute extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Attribute extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Label table name cache @@ -33,13 +33,13 @@ class Attribute extends \Magento\Framework\Model\ModelResource\Db\AbstractDb protected $_storeManager; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param \Magento\Catalog\Helper\Data $catalogData * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Catalog\Helper\Data $catalogData, $connectionName = null diff --git a/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Type/Configurable/Attribute/Collection.php b/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Type/Configurable/Attribute/Collection.php index 0dd9837218d9289c2c9c98569cbd3bd19df9b00d..dbca1777f450b4c810baa4bc2181fbee1665ac96 100644 --- a/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Type/Configurable/Attribute/Collection.php +++ b/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Type/Configurable/Attribute/Collection.php @@ -13,7 +13,7 @@ use Magento\Eav\Model\Entity\Attribute\AbstractAttribute; * @SuppressWarnings(PHPMD.LongVariable) * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Configurable attributes label table name diff --git a/app/code/Magento/ConfigurableProduct/Test/Unit/Helper/DataTest.php b/app/code/Magento/ConfigurableProduct/Test/Unit/Helper/DataTest.php index 67c6a01be1f3cb81c5c7fbea95abdd89737fe304..ead7283f2d55761c8639fd3994305c4383f83a9f 100644 --- a/app/code/Magento/ConfigurableProduct/Test/Unit/Helper/DataTest.php +++ b/app/code/Magento/ConfigurableProduct/Test/Unit/Helper/DataTest.php @@ -139,7 +139,7 @@ class DataTest extends \PHPUnit_Framework_TestCase $allowedProducts = []; for ($i = 1; $i <= 2; $i++) { $productMock = $this->getMock( - 'Magento\Catalog\Model\Product', ['getData', 'getImage', 'getId', '__wakeup'], [], '', false + 'Magento\Catalog\Model\Product', ['getData', 'getImage', 'getId', '__wakeup', 'getMediaGalleryImages'], [], '', false ); $productMock->expects($this->any()) ->method('getData') @@ -159,19 +159,17 @@ class DataTest extends \PHPUnit_Framework_TestCase 'attribute_id_1' => [ 'attribute_code_value_1' => ['product_id_1', 'product_id_2'], ], - 'images' => [ - 'attribute_id_1' => [ - 'attribute_code_value_1' => [ - 'product_id_1' => 'http://example.com/base_img_url', - 'product_id_2' => 'http://example.com/base_img_url_2', - ], - ], - 'attribute_id_2' => [ - 'attribute_code_value_2' => [ - 'product_id_1' => 'http://example.com/base_img_url', - 'product_id_2' => 'http://example.com/base_img_url_2', - ], + 'index' => [ + 'product_id_1' => [ + 'attribute_id_1' => 'attribute_code_value_1', + 'attribute_id_2' => 'attribute_code_value_2' ], + + 'product_id_2' => [ + 'attribute_id_1' => 'attribute_code_value_1', + 'attribute_id_2' => 'attribute_code_value_2' + ] + ], 'attribute_id_2' => [ 'attribute_code_value_2' => ['product_id_1', 'product_id_2'], diff --git a/app/code/Magento/ConfigurableProduct/Ui/Component/Listing/AssociatedProduct/Filters.php b/app/code/Magento/ConfigurableProduct/Ui/Component/Listing/AssociatedProduct/Filters.php index 8ed9f3d718e21f27955c53048d57721f89f61229..551c8a5f9ba817987980cab217563d66055d53fa 100644 --- a/app/code/Magento/ConfigurableProduct/Ui/Component/Listing/AssociatedProduct/Filters.php +++ b/app/code/Magento/ConfigurableProduct/Ui/Component/Listing/AssociatedProduct/Filters.php @@ -5,43 +5,61 @@ */ namespace Magento\ConfigurableProduct\Ui\Component\Listing\AssociatedProduct; -class Filters extends \Magento\Ui\Component\Filters +use Magento\Catalog\Ui\Component\FilterFactory; +use Magento\Eav\Model\ResourceModel\Entity\Attribute\CollectionFactory; +use Magento\Framework\View\Element\UiComponent\ObserverInterface; +use Magento\Framework\View\Element\UiComponentInterface; + +class Filters implements ObserverInterface { - /** @var \Magento\Catalog\Ui\Component\Listing\Attribute\RepositoryInterface */ - protected $attributeRepository; + /** + * @var FilterFactory + */ + protected $filterFactory; /** - * @param \Magento\Framework\View\Element\UiComponent\ContextInterface $context - * @param \Magento\Catalog\Ui\Component\FilterFactory $filterFactory - * @param \Magento\Catalog\Ui\Component\Listing\Attribute\RepositoryInterface $attributeRepository - * @param array $components - * @param array $data + * @var CollectionFactory + */ + protected $attributeCollectionFactory; + + /** + * @param FilterFactory $filterFactory + * @param CollectionFactory $attributeCollectionFactory */ public function __construct( - \Magento\Framework\View\Element\UiComponent\ContextInterface $context, - \Magento\Catalog\Ui\Component\FilterFactory $filterFactory, - \Magento\Catalog\Ui\Component\Listing\Attribute\RepositoryInterface $attributeRepository, - array $components = [], - array $data = [] + FilterFactory $filterFactory, + CollectionFactory $attributeCollectionFactory ) { - parent::__construct($context, $components, $data); $this->filterFactory = $filterFactory; - $this->attributeRepository = $attributeRepository; + $this->attributeCollectionFactory = $attributeCollectionFactory; } /** * {@inheritdoc} */ - public function prepare() + public function update(UiComponentInterface $component) { - $attributeIds = $this->getContext()->getRequestParam('attributes_codes'); + if (!$component instanceof \Magento\Ui\Component\Filters) { + return; + } + + $attributeIds = $component->getContext()->getRequestParam('attribute_ids'); if ($attributeIds) { - foreach ($this->attributeRepository->getList() as $attribute) { - $filter = $this->filterFactory->create($attribute, $this->getContext(), ['component' => '']); + foreach ($this->getAttributes($attributeIds) as $attribute) { + $filter = $this->filterFactory->create($attribute, $component->getContext()); $filter->prepare(); - $this->addComponent($attribute->getAttributeCode(), $filter); + $component->addComponent($attribute->getAttributeCode(), $filter); } } - parent::prepare(); + } + + /** + * @param array $attributeIds + * @return mixed + */ + protected function getAttributes($attributeIds) + { + $attributeCollection = $this->attributeCollectionFactory->create(); + return $attributeCollection->addFieldToFilter('attribute_code', ['in' => $attributeIds]); } } diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/attribute/new/created.phtml b/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/attribute/new/created.phtml index 92a4924eab2b82dda46f626952720cebe3aa75bf..78fda69531c9fed40bf93877548d90a4244524c4 100644 --- a/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/attribute/new/created.phtml +++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/attribute/new/created.phtml @@ -15,7 +15,7 @@ } else { $('[data-form=edit-product]').trigger('changeAttributeSet', set); } - $('#create_new_attribute').dialog('close'); + $('#create_new_attribute').modal('closeModal'); })(window.parent.jQuery); </script> diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/attribute/set/js.phtml b/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/attribute/set/js.phtml index d78e50b66be1f1e7d334a1078a88ad7a0b17a39e..ea036bbf5d6c0eedfd3cb70d46125ac1d9c80938 100644 --- a/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/attribute/set/js.phtml +++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/attribute/set/js.phtml @@ -9,7 +9,10 @@ ?> <script> -require(["tree-panel"], function(){ +require([ + "Magento_Ui/js/modal/alert", + "tree-panel" +], function(alert){ ConfigurableNodeExists = function(currentNode) { for (var i in currentNode.childNodes ) { if (currentNode.childNodes[i].id) { @@ -25,7 +28,9 @@ ConfigurableNodeExists = function(currentNode) { editSet.submit = editSet.submit.wrap(function(original) { if (editSet.currentNode){ if (ConfigurableNodeExists(editSet.currentNode)) { - alert('<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('This group contains attributes used in configurable products. Please move these attributes to another group and try again.')) ?>'); + alert({ + content: '<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('This group contains attributes used in configurable products. Please move these attributes to another group and try again.')) ?>' + }); return; } } @@ -34,7 +39,9 @@ editSet.submit = editSet.submit.wrap(function(original) { editSet.rightBeforeAppend = editSet.rightBeforeAppend.wrap(function(original, tree, nodeThis, node, newParent) { if (node.attributes.is_configurable == 1) { - alert('<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('This attribute is used in configurable products. You cannot remove it from the product template.')) ?>'); + alert({ + content: '<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('This attribute is used in configurable products. You cannot remove it from the product template.')) ?>' + }); return false; } return original(tree, nodeThis, node, newParent); @@ -42,7 +49,9 @@ editSet.rightBeforeAppend = editSet.rightBeforeAppend.wrap(function(original, tr editSet.rightBeforeInsert = editSet.rightBeforeInsert.wrap(function(original, tree, nodeThis, node, newParent) { if (node.attributes.is_configurable == 1) { - alert('<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('This attribute is used in configurable products. You cannot remove it from the product template.')) ?>'); + alert({ + content: '<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('This attribute is used in configurable products. You cannot remove it from the product template.')) ?>' + }); return false; } return original(tree, nodeThis, node, newParent); diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/edit/attribute/steps/bulk.phtml b/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/edit/attribute/steps/bulk.phtml index 9c58b7a7fb6a6ce1e9151fe775f2adaf6c10d74c..8a1b3edc8053e65e07b1f9c59dd2887d0f5c1bb0 100644 --- a/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/edit/attribute/steps/bulk.phtml +++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/edit/attribute/steps/bulk.phtml @@ -225,14 +225,6 @@ </div> </fieldset> </div> - - <button type="button" - class="action-close" - data-role="close-panel" - title="<?= $block->escapeHtml(__('Close panel')) ?>"> - <span><?= /* @escapeNotVerified */ __('Close panel') ?></span> - </button> - <div class="image-pointer"></div> </div> </script> @@ -441,14 +433,6 @@ </div> </fieldset> </div> - - <button type="button" - class="action-close" - data-role="close-panel" - title="<?= $block->escapeHtml(__('Close panel')) ?>"> - <span><?= /* @escapeNotVerified */ __('Close panel') ?></span> - </button> - <div class="image-pointer"></div> </div> </script> diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/product/configurable/affected-attribute-set-selector/js.phtml b/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/product/configurable/affected-attribute-set-selector/js.phtml index 111ab842f22a9143806406e44411b7cea0584d78..704568283748a660aed1941410b28ebf1e99b622 100644 --- a/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/product/configurable/affected-attribute-set-selector/js.phtml +++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/product/configurable/affected-attribute-set-selector/js.phtml @@ -93,6 +93,7 @@ } },{ text: '<?php /* @escapeNotVerified */ echo __('Cancel'); ?>', + id: '<?php /* @escapeNotVerified */ echo $block->getJsId('close-button') ?>', 'class': 'action-close', click: function() { $form.modal('closeModal'); diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/configurable_associated_product_listing.xml b/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/configurable_associated_product_listing.xml index 8212cbc0c4a22e90c63a9473f6875b54b06b82c1..7fd14ff394f9bff99203fe4af1ace655faf37472 100644 --- a/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/configurable_associated_product_listing.xml +++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/configurable_associated_product_listing.xml @@ -37,73 +37,24 @@ <item name="template" xsi:type="string">ui/grid/toolbar</item> </item> </argument> - <filters name="listing_filters" class="Magento\ConfigurableProduct\Ui\Component\Listing\AssociatedProduct\Filters"> + <filters name="listing_filters"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> + <item name="columnsProvider" xsi:type="string">configurable_associated_product_listing.configurable_associated_product_listing.product_columns</item> <item name="params" xsi:type="array"> <item name="filters_modifier" xsi:type="array" /> </item> - <item name="displayArea" xsi:type="string">dataGridFilters</item> - <item name="dataScope" xsi:type="string">filters</item> <item name="childDefaults" xsi:type="array"> <item name="provider" xsi:type="string">configurable_associated_product_listing.configurable_associated_product_listing.listing_top.listing_filters</item> + <item name="imports" xsi:type="array"> + <item name="visible" xsi:type="string">configurable_associated_product_listing.configurable_associated_product_listing.product_columns.${ $.index }:visible</item> + </item> + </item> + <item name="observers" xsi:type="array"> + <item name="filters" xsi:type="object">Magento\ConfigurableProduct\Ui\Component\Listing\AssociatedProduct\Filters</item> </item> </item> </argument> - <filterInput name="entity_id"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="component" xsi:type="string" /> - <item name="dataScope" xsi:type="string">entity_id</item> - <item name="label" xsi:type="string" translate="true">Name</item> - </item> - </argument> - </filterInput> - <filterInput name="name"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">name</item> - <item name="label" xsi:type="string" translate="true">Name</item> - </item> - </argument> - </filterInput> - <filterInput name="sku"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">sku</item> - <item name="label" xsi:type="string" translate="true">SKU</item> - </item> - </argument> - </filterInput> - <filterRange name="price"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">price</item> - <item name="label" xsi:type="string" translate="true">Price</item> - <item name="childDefaults" xsi:type="array"> - <item name="provider" xsi:type="string">configurable_associated_product_listing.configurable_associated_product_listing.listing_top.listing_filters</item> - </item> - </item> - </argument> - <filterInput name="from"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">from</item> - <item name="label" xsi:type="string" translate="true">from</item> - <item name="placeholder" xsi:type="string" translate="true">From</item> - </item> - </argument> - </filterInput> - <filterInput name="to"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">to</item> - <item name="label" xsi:type="string" translate="true">to</item> - <item name="placeholder" xsi:type="string" translate="true">To</item> - </item> - </argument> - </filterInput> - </filterRange> <filterSelect name="status"> <argument name="optionsProvider" xsi:type="configurableObject"> <argument name="class" xsi:type="string">Magento\Catalog\Model\Product\Attribute\Source\Status</argument> @@ -121,29 +72,6 @@ <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> <item name="selectProvider" xsi:type="string">configurable_associated_product_listing.configurable_associated_product_listing.product_columns.ids</item> - <item name="displayArea" xsi:type="string">bottom</item> - <item name="options" xsi:type="array"> - <item name="20" xsi:type="array"> - <item name="value" xsi:type="number">20</item> - <item name="label" xsi:type="string" translate="true">20</item> - </item> - <item name="30" xsi:type="array"> - <item name="value" xsi:type="number">30</item> - <item name="label" xsi:type="string" translate="true">30</item> - </item> - <item name="50" xsi:type="array"> - <item name="value" xsi:type="number">50</item> - <item name="label" xsi:type="string" translate="true">50</item> - </item> - <item name="100" xsi:type="array"> - <item name="value" xsi:type="number">100</item> - <item name="label" xsi:type="string" translate="true">100</item> - </item> - <item name="200" xsi:type="array"> - <item name="value" xsi:type="number">200</item> - <item name="label" xsi:type="string" translate="true">200</item> - </item> - </item> </item> </argument> </paging> @@ -159,31 +87,22 @@ <item name="0" xsi:type="string">${ $.$data.rowIndex }</item> </item> </item> - <item name="controlVisibility" xsi:type="boolean">true</item> </item> </item> </argument> - <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column"> + <selectionsColumn name="ids"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item> - </item> <item name="config" xsi:type="array"> - <item name="controlVisibility" xsi:type="boolean">false</item> <item name="indexField" xsi:type="string">entity_id</item> <item name="sortOrder" xsi:type="number">0</item> </item> </argument> - </column> + </selectionsColumn> <column name="entity_id"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> - <item name="dataType" xsi:type="string">text</item> + <item name="filter" xsi:type="string">textRange</item> <item name="sorting" xsi:type="string">asc</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">ID</item> <item name="sortOrder" xsi:type="number">10</item> </item> @@ -191,15 +110,12 @@ </column> <column name="thumbnail" class="Magento\Catalog\Ui\Component\Listing\Columns\Thumbnail"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/thumbnail</item> - </item> <item name="config" xsi:type="array"> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/thumbnail</item> <item name="add_field" xsi:type="boolean">true</item> <item name="sortable" xsi:type="boolean">false</item> <item name="altField" xsi:type="string">name</item> <item name="has_preview" xsi:type="string">1</item> - <item name="dataType" xsi:type="string">text</item> <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Thumbnail</item> <item name="sortOrder" xsi:type="number">20</item> @@ -208,13 +124,9 @@ </column> <column name="name"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">text</item> <item name="add_field" xsi:type="boolean">true</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Name</item> <item name="sortOrder" xsi:type="number">30</item> </item> @@ -222,12 +134,8 @@ </column> <column name="sku"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="filter" xsi:type="string">text</item> <item name="label" xsi:type="string" translate="true">SKU</item> <item name="sortOrder" xsi:type="number">60</item> </item> @@ -235,13 +143,9 @@ </column> <column name="price" class="Magento\Catalog\Ui\Component\Listing\Columns\Price"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">textRange</item> <item name="add_field" xsi:type="boolean">true</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Price</item> <item name="sortOrder" xsi:type="number">70</item> </item> diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/product_attributes_listing.xml b/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/product_attributes_listing.xml index e72edb975aede0f02d705f2a4f55de072ef3ba9a..edf1f8cae1c9ebb9bd8a2ca89a24ebaaa296c5cf 100644 --- a/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/product_attributes_listing.xml +++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/product_attributes_listing.xml @@ -40,17 +40,13 @@ <bookmark name="bookmarks"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/controls/bookmarks/bookmarks</item> - <item name="displayArea" xsi:type="string">dataGridActions</item> <item name="storageConfig" xsi:type="array"> - <item name="saveUrl" xsi:type="url" path="mui/bookmark/save"/> - <item name="deleteUrl" xsi:type="url" path="mui/bookmark/delete"/> <item name="namespace" xsi:type="string">product_attributes_listing</item> </item> </item> </argument> </bookmark> - <container name="columns_controls"> + <component name="columns_controls"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> <item name="component" xsi:type="string">Magento_Ui/js/grid/controls/columns</item> @@ -60,15 +56,14 @@ </item> </item> </argument> - </container> + </component> <filters name="listing_filters"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> <item name="links" xsi:type="array"> <item name="applied" xsi:type="string">not-save-filter</item> </item> - <item name="displayArea" xsi:type="string">dataGridFilters</item> - <item name="dataScope" xsi:type="string">filters</item> + <item name="columnsProvider" xsi:type="string">product_attributes_listing.product_attributes_listing.product_attributes_columns</item> <item name="storageConfig" xsi:type="array"> <item name="provider" xsi:type="string">product_attributes_listing.product_attributes_listing.listing_top.bookmarks</item> <item name="namespace" xsi:type="string">current.filters</item> @@ -76,99 +71,11 @@ <item name="childDefaults" xsi:type="array"> <item name="provider" xsi:type="string">product_attributes_listing.product_attributes_listing.listing_top.listing_filters</item> <item name="imports" xsi:type="array"> - <item name="visible" xsi:type="string">product_attributes_listing.product_attributes_listing.listing_top.bookmarks:current.columns.${ $.index }.visible</item> + <item name="visible" xsi:type="string">product_attributes_listing.product_attributes_listing.product_attributes_columns:${ $.index }.visible</item> </item> </item> </item> </argument> - <filterInput name="attribute_code"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">attribute_code</item> - <item name="label" xsi:type="string" translate="true">Attribute Code</item> - </item> - </argument> - </filterInput> - <filterInput name="frontend_label"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">frontend_label</item> - <item name="label" xsi:type="string" translate="true">Attribute Label</item> - </item> - </argument> - </filterInput> - <filterSelect name="is_required"> - <argument name="optionsProvider" xsi:type="configurableObject"> - <argument name="class" xsi:type="string">Magento\Config\Model\Config\Source\Yesno</argument> - </argument> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">is_required</item> - <item name="label" xsi:type="string" translate="true">Required</item> - <item name="caption" xsi:type="string" translate="true">Select...</item> - </item> - </argument> - </filterSelect> - <filterSelect name="is_user_defined"> - <argument name="optionsProvider" xsi:type="configurableObject"> - <argument name="class" xsi:type="string">Magento\Config\Model\Config\Source\Yesno</argument> - </argument> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">is_user_defined</item> - <item name="label" xsi:type="string" translate="true">System</item> - <item name="caption" xsi:type="string" translate="true">Select...</item> - </item> - </argument> - </filterSelect> - <filterSelect name="is_visible"> - <argument name="optionsProvider" xsi:type="configurableObject"> - <argument name="class" xsi:type="string">Magento\Config\Model\Config\Source\Yesno</argument> - </argument> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">is_visible</item> - <item name="label" xsi:type="string" translate="true">Visible</item> - <item name="caption" xsi:type="string" translate="true">Select...</item> - </item> - </argument> - </filterSelect> - <filterSelect name="is_global"> - <argument name="optionsProvider" xsi:type="configurableObject"> - <argument name="class" xsi:type="string">Magento\Catalog\Model\Attribute\Source\Scopes</argument> - </argument> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">is_global</item> - <item name="label" xsi:type="string" translate="true">Scope</item> - <item name="caption" xsi:type="string" translate="true">Select...</item> - </item> - </argument> - </filterSelect> - <filterSelect name="is_searchable"> - <argument name="optionsProvider" xsi:type="configurableObject"> - <argument name="class" xsi:type="string">Magento\Config\Model\Config\Source\Yesno</argument> - </argument> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">is_searchable</item> - <item name="label" xsi:type="string" translate="true">Searchable</item> - <item name="caption" xsi:type="string" translate="true">Select...</item> - </item> - </argument> - </filterSelect> - <filterSelect name="is_comparable"> - <argument name="optionsProvider" xsi:type="configurableObject"> - <argument name="class" xsi:type="string">Magento\Config\Model\Config\Source\Yesno</argument> - </argument> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">is_comparable</item> - <item name="label" xsi:type="string" translate="true">Comparable</item> - <item name="caption" xsi:type="string" translate="true">Select...</item> - </item> - </argument> - </filterSelect> </filters> <paging name="listing_paging"> <argument name="data" xsi:type="array"> @@ -178,7 +85,6 @@ <item name="namespace" xsi:type="string">current.paging</item> </item> <item name="selectProvider" xsi:type="string">product_attributes_listing.product_attributes_listing.product_attributes_columns.ids</item> - <item name="displayArea" xsi:type="string">bottom</item> </item> </argument> </paging> @@ -191,7 +97,6 @@ <item name="namespace" xsi:type="string">current</item> </item> <item name="childDefaults" xsi:type="array"> - <item name="controlVisibility" xsi:type="boolean">true</item> <item name="storageConfig" xsi:type="array"> <item name="provider" xsi:type="string">product_attributes_listing.product_attributes_listing.listing_top.bookmarks</item> <item name="root" xsi:type="string">columns.${ $.index }</item> @@ -200,39 +105,27 @@ </item> </item> </argument> - <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column"> + <selectionsColumn name="ids"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item> - </item> <item name="config" xsi:type="array"> <item name="indexField" xsi:type="string">attribute_id</item> <item name="sortOrder" xsi:type="number">0</item> - <item name="controlVisibility" xsi:type="string">false</item> </item> </argument> - </column> + </selectionsColumn> <column name="attribute_code"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> - <item name="dataType" xsi:type="string">text</item> + <item name="filter" xsi:type="string">text</item> <item name="sorting" xsi:type="string">asc</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Attribute Code</item> </item> </argument> </column> <column name="frontend_label"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="filter" xsi:type="string">text</item> <item name="label" xsi:type="string" translate="true">Attribute Label</item> </item> </argument> @@ -240,12 +133,10 @@ <column name="is_required"> <argument name="data" xsi:type="array"> <item name="options" xsi:type="object">Magento\Config\Model\Config\Source\Yesno</item> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">select</item> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> <item name="dataType" xsi:type="string">select</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Required</item> </item> </argument> @@ -253,12 +144,10 @@ <column name="is_user_defined"> <argument name="data" xsi:type="array"> <item name="options" xsi:type="object">Magento\Config\Model\Config\Source\Yesno</item> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">select</item> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> <item name="dataType" xsi:type="string">select</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">System</item> </item> </argument> @@ -266,12 +155,10 @@ <column name="is_visible"> <argument name="data" xsi:type="array"> <item name="options" xsi:type="object">Magento\Config\Model\Config\Source\Yesno</item> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">select</item> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> <item name="dataType" xsi:type="string">select</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Visible</item> </item> </argument> @@ -279,12 +166,10 @@ <column name="is_global"> <argument name="data" xsi:type="array"> <item name="options" xsi:type="object">Magento\Catalog\Model\Attribute\Source\Scopes</item> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">select</item> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> <item name="dataType" xsi:type="string">select</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Scope</item> </item> </argument> @@ -292,12 +177,10 @@ <column name="is_searchable"> <argument name="data" xsi:type="array"> <item name="options" xsi:type="object">Magento\Config\Model\Config\Source\Yesno</item> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">select</item> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> <item name="dataType" xsi:type="string">select</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Searchable</item> </item> </argument> @@ -305,12 +188,10 @@ <column name="is_comparable"> <argument name="data" xsi:type="array"> <item name="options" xsi:type="object">Magento\Config\Model\Config\Source\Yesno</item> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">select</item> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> <item name="dataType" xsi:type="string">select</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Comparable</item> </item> </argument> diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/product-grid.js b/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/product-grid.js index 39267f93a149ee3247773d529e7ac8cd293e2860..37d52c6e146895267a96f72e608e96debd4bd65e 100644 --- a/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/product-grid.js +++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/product-grid.js @@ -115,9 +115,9 @@ define([ this.callbackName = callbackName; this.productsMassAction(function (massActionComponent) { this.productsColumns().elems().each(function (rowElement) { - rowElement.disableAction(showMassActionColumn); + rowElement.disableAction = showMassActionColumn; }); - massActionComponent.visible(showMassActionColumn); + massActionComponent.visible = showMassActionColumn; }.bind(this)); this._setFilter(filterData); this._initGrid(filterData); @@ -129,10 +129,10 @@ define([ */ close: function (rowIndex) { try { - if (this.productsMassAction().selected().length) { + if (this.productsMassAction().selected.length) { this.variationsComponent()[this.callbackName](this.productsMassAction() .selected.map(this.getProductById.bind(this))); - this.productsMassAction().selected([]); + this.productsMassAction().deselectAll(); } else if (!_.isNull(rowIndex)) { this.variationsComponent()[this.callbackName]([this.getProductByIndex(rowIndex)]); } @@ -257,7 +257,7 @@ define([ _handleManualGridOpening: function (data) { if (data.items.length && this.callbackName == 'appendProducts') { this.productsColumns().elems().each(function (rowElement) { - rowElement.disableAction(true); + rowElement.disableAction = true; }); this._disableRows(data.items); @@ -314,12 +314,14 @@ define([ */ _getVariationKeyMap: function (items) { this._variationKeyMap = {}; + _.each(items, function (row) { this._variationKeyMap[row['entity_id']] = _.values( _.pick(row, this._getAttributesCodes()) ).sort().join('-'); - }.bind(this)); + }, this); + return this._variationKeyMap; }, diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/bulk.js b/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/bulk.js index 435a7ace21418d35de1bf96cf4b24b490315258b..5f4af9cd5e3e2e777c05fe58bd5760e938654661 100644 --- a/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/bulk.js +++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/bulk.js @@ -12,9 +12,10 @@ define([ 'underscore', 'Magento_Ui/js/lib/collapsible', 'mage/template', + 'Magento_Ui/js/modal/alert', 'jquery/file-uploader', 'mage/translate' -], function (Component, $, ko, _, Collapsible, mageTemplate) { +], function (Component, $, ko, _, Collapsible, mageTemplate, alert) { 'use strict'; return Component.extend({ @@ -365,7 +366,9 @@ define([ $('#' + data.fileId) .delay(2000) .hide('highlight'); - alert($.mage.__('We don\'t recognize or support this file extension type.')); + alert({ + content: $.mage.__('We don\'t recognize or support this file extension type.') + }); } $('#' + data.fileId).remove(); }, diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/variations.js b/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/variations.js index 43c040facf544c8362e30219a16fdff667d36874..862ffe05a6cfc78bfa750cce52b2c2fef1258273 100644 --- a/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/variations.js +++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/variations.js @@ -8,8 +8,9 @@ define([ 'uiComponent', 'jquery', 'ko', - 'underscore' -], function (Component, $, ko, _) { + 'underscore', + 'Magento_Ui/js/modal/alert' +], function (Component, $, ko, _, alert) { 'use strict'; function UserException(message) { @@ -337,7 +338,9 @@ define([ parentElement.find('[name$="[image]"]').val(data.result.file); parentElement.find('[data-toggle=dropdown]').dropdown().show(); } else { - alert($.mage.__('We don\'t recognize or support this file extension type.')); + alert({ + content: $.mage.__('We don\'t recognize or support this file extension type.') + }); } }, start: function (event) { diff --git a/app/code/Magento/ConfigurableProduct/view/frontend/web/js/configurable.js b/app/code/Magento/ConfigurableProduct/view/frontend/web/js/configurable.js index 2fd83c511c802876486a57802c6a4ffe2fec0780..c2f0e189946c1d0e543bfd7bf2bf73651aa309e2 100644 --- a/app/code/Magento/ConfigurableProduct/view/frontend/web/js/configurable.js +++ b/app/code/Magento/ConfigurableProduct/view/frontend/web/js/configurable.js @@ -4,30 +4,37 @@ */ /*jshint browser:true jquery:true*/ define([ - "jquery", - "underscore", - "mage/template", - "priceUtils", - "priceBox", - "jquery/ui", - "jquery/jquery.parsequery" -], function($, _, mageTemplate, utils){ + 'jquery', + 'underscore', + 'mage/template', + 'priceUtils', + 'priceBox', + 'jquery/ui', + 'jquery/jquery.parsequery' +], function ($, _, mageTemplate) { + 'use strict'; $.widget('mage.configurable', { options: { superSelector: '.super-attribute-select', selectSimpleProduct: '[name="selected_configurable_option"]', priceHolderSelector: '.price-box', + spConfig: {}, state: {}, priceFormat: {}, optionTemplate: '<%- data.label %>' + - '<% if (data.finalPrice.value) { %>' + - ' <%- data.finalPrice.formatted %>' + - '<% } %>', - mediaGallerySelector: '[data-role=media-gallery]' + '<% if (data.finalPrice.value) { %>' + + ' <%- data.finalPrice.formatted %>' + + '<% } %>', + mediaGallerySelector: '[data-gallery-role=gallery-placeholder]', + mediaGalleryInitial: null }, - _create: function() { + /** + * Creates widget + * @private + */ + _create: function () { // Initial setting of various option values this._initializeOptions(); @@ -51,29 +58,33 @@ define([ * Initialize tax configuration, initial settings, and options values. * @private */ - _initializeOptions: function() { - var priceBoxOptions = $(this.options.priceHolderSelector).priceBox('option'); + _initializeOptions: function () { + var options = this.options, + gallery = $(options.mediaGallerySelector), + priceBoxOptions = $(this.options.priceHolderSelector).priceBox('option').priceConfig || null; - if(priceBoxOptions.priceConfig && priceBoxOptions.priceConfig.optionTemplate) { - this.options.optionTemplate = priceBoxOptions.priceConfig.optionTemplate; + if (priceBoxOptions && priceBoxOptions.optionTemplate) { + options.optionTemplate = priceBoxOptions.optionTemplate; } - if(priceBoxOptions.priceConfig && priceBoxOptions.priceConfig.priceFormat) { - this.options.priceFormat = priceBoxOptions.priceConfig.priceFormat; + if (priceBoxOptions && priceBoxOptions.priceFormat) { + options.priceFormat = priceBoxOptions.priceFormat; } - this.options.optionTemplate = mageTemplate(this.options.optionTemplate); + options.optionTemplate = mageTemplate(options.optionTemplate); + + options.settings = options.spConfig.containerId ? + $(options.spConfig.containerId).find(options.superSelector) : + $(options.superSelector); - this.options.settings = (this.options.spConfig.containerId) ? - $(this.options.spConfig.containerId).find(this.options.superSelector) : - $(this.options.superSelector); + options.values = options.spConfig.defaultValues || {}; + options.parentImage = $('[data-role=base-image-container] img').attr('src'); - this.options.values = this.options.spConfig.defaultValues || {}; - this.options.parentImage = $('[data-role=base-image-container] img').attr('src'); + this.inputSimpleProduct = this.element.find(options.selectSimpleProduct); - this.initialGalleryImages = $(this.options.mediaGallerySelector).data('mageGallery') - ? $(this.options.mediaGallerySelector).gallery('option', 'images') - : []; - this.inputSimpleProduct = this.element.find(this.options.selectSimpleProduct); + gallery.on('gallery:loaded', function () { + var galleryObject = gallery.data('gallery'); + options.mediaGalleryInitial = galleryObject.returnCurrentImages(); + }); }, /** @@ -81,11 +92,13 @@ define([ * initialized inputs values. * @private */ - _overrideDefaults: function() { + _overrideDefaults: function () { var hashIndex = window.location.href.indexOf('#'); + if (hashIndex !== -1) { this._parseQueryParams(window.location.href.substr(hashIndex + 1)); } + if (this.options.spConfig.inputsInitialized) { this._setValuesByAttribute(); } @@ -94,12 +107,15 @@ define([ /** * Parse query parameters from a query string and set options values based on the * key value pairs of the parameters. - * @param queryString URL query string containing query parameters. + * @param {*} queryString - URL query string containing query parameters. * @private */ - _parseQueryParams: function(queryString) { - var queryParams = $.parseQuery({query: queryString}); - $.each(queryParams, $.proxy(function(key, value) { + _parseQueryParams: function (queryString) { + var queryParams = $.parseQuery({ + query: queryString + }); + + $.each(queryParams, $.proxy(function (key, value) { this.options.values[key] = value; }, this)); }, @@ -109,11 +125,13 @@ define([ * identifier. * @private */ - _setValuesByAttribute: function() { + _setValuesByAttribute: function () { this.options.values = {}; - $.each(this.options.settings, $.proxy(function(index, element) { + $.each(this.options.settings, $.proxy(function (index, element) { + var attributeId; + if (element.value) { - var attributeId = element.id.replace(/[a-z]*/, ''); + attributeId = element.id.replace(/[a-z]*/, ''); this.options.values[attributeId] = element.value; } }, this)); @@ -123,8 +141,8 @@ define([ * Set up .on('change') events for each option element to configure the option. * @private */ - _setupChangeEvents: function() { - $.each(this.options.settings, $.proxy(function(index, element) { + _setupChangeEvents: function () { + $.each(this.options.settings, $.proxy(function (index, element) { $(element).on('change', this, this._configure); }, this)); }, @@ -134,9 +152,10 @@ define([ * attribute identifier. Set the state based on the attribute identifier. * @private */ - _fillState: function() { - $.each(this.options.settings, $.proxy(function(index, element) { + _fillState: function () { + $.each(this.options.settings, $.proxy(function (index, element) { var attributeId = element.id.replace(/[a-z]*/, ''); + if (attributeId && this.options.spConfig.attributes[attributeId]) { element.config = this.options.spConfig.attributes[attributeId]; element.attributeId = attributeId; @@ -150,23 +169,25 @@ define([ * an option's list of selections as needed or disable an option's setting. * @private */ - _setChildSettings: function() { - var childSettings = [], - settings = this.options.settings, - index = settings.length, + _setChildSettings: function () { + var childSettings = [], + settings = this.options.settings, + index = settings.length, option; while (index--) { option = settings[index]; - !index ? - this._fillSelect(option) : - (option.disabled = true); + if (index) { + option.disabled = true; + } else { + this._fillSelect(option); + } _.extend(option, { - childSettings: childSettings.slice(), - prevSetting: settings[index - 1], - nextSetting: settings[index + 1] + childSettings: childSettings.slice(), + prevSetting: settings[index - 1], + nextSetting: settings[index + 1] }); childSettings.push(option); @@ -178,13 +199,11 @@ define([ * the option, which sets its state, and initializes the option's choices, etc. * @private */ - _configureForValues: function() { + _configureForValues: function () { if (this.options.values) { - this.options.settings.each($.proxy(function(index, element) { + this.options.settings.each($.proxy(function (index, element) { var attributeId = element.attributeId; - element.value = (typeof(this.options.values[attributeId]) === 'undefined') ? - '' : - this.options.values[attributeId]; + element.value = this.options.values[attributeId] || ''; this._configureElement(element); }, this)); } @@ -193,9 +212,9 @@ define([ /** * Event handler for configuring an option. * @private - * @param event Event triggered to configure an option. + * @param {Object} event - Event triggered to configure an option. */ - _configure: function(event) { + _configure: function (event) { event.data._configureElement(this); }, @@ -203,20 +222,26 @@ define([ * Configure an option, initializing it's state and enabling related options, which * populates the related option's selection and resets child option selections. * @private - * @param element The element associated with a configurable option. + * @param {*} element - The element associated with a configurable option. */ - _configureElement: function(element) { + _configureElement: function (element) { + this.simpleProduct = this._getSimpleProductId(element); + if (element.value) { this.options.state[element.config.id] = element.value; + if (element.nextSetting) { element.nextSetting.disabled = false; this._fillSelect(element.nextSetting); this._resetChildren(element.nextSetting); } else { - this.inputSimpleProduct.val(element.selectedOptions[0].config.allowedProducts[0]); + if (!!document.documentMode) { + this.inputSimpleProduct.val(element.options[element.selectedIndex].config.allowedProducts[0]); + } else { + this.inputSimpleProduct.val(element.selectedOptions[0].config.allowedProducts[0]); + } } - } - else { + } else { this._resetChildren(element); } this._reloadPrice(); @@ -228,38 +253,15 @@ define([ * @private */ _changeProductImage: function () { - var images = this.options.spConfig.images, - imagesArray = null, - galleryElement = $(this.options.mediaGallerySelector); - $.each(this.options.settings, function (k, v) { - var selectValue = parseInt(v.value, 10), - attributeId = v.id.replace(/[a-z]*/, ''); - if (selectValue > 0 && attributeId) { - if (!imagesArray) { - imagesArray = images[attributeId][selectValue]; - } else { - var intersectedArray = {}; - $.each(imagesArray, function (productId) { - if (images[attributeId][selectValue][productId]) { - intersectedArray[productId] = images[attributeId][selectValue][productId]; - } - }); - imagesArray = intersectedArray; - } - } - }); - - var result = []; - $.each(imagesArray || {}, function (k, v) { - result.push({ - small: v, - medium: v, - large: v - }); - }); + var images = this.options.spConfig.images[this.simpleProduct], + galleryObject = $(this.options.mediaGallerySelector).data('gallery'); - if (galleryElement.length && galleryElement.data('mageGallery')) { - galleryElement.gallery('option', 'images', result.length > 0 ? result : this.initialGalleryImages); + if (galleryObject) { + if (images) { + galleryObject.updateData(images); + } else { + galleryObject.updateData(this.options.mediaGalleryInitial); + } } }, @@ -267,16 +269,17 @@ define([ * For a given option element, reset all of its selectable options. Clear any selected * index, disable the option choice, and reset the option's state if necessary. * @private - * @param element The element associated with a configurable option. + * @param {*} element - The element associated with a configurable option. */ - _resetChildren: function(element) { + _resetChildren: function (element) { if (element.childSettings) { - for (var i = 0; i < element.childSettings.length; i++) { - element.childSettings[i].selectedIndex = 0; - element.childSettings[i].disabled = true; - if (element.config) { - this.options.state[element.config.id] = false; - } + _.each(element.childSettings, function (set) { + set.selectedIndex = 0; + set.disabled = true; + }); + + if (element.config) { + this.options.state[element.config.id] = false; } } }, @@ -284,25 +287,32 @@ define([ /** * Populates an option's selectable choices. * @private - * @param element Element associated with a configurable option. + * @param {*} element - Element associated with a configurable option. */ - _fillSelect: function(element) { + _fillSelect: function (element) { var attributeId = element.id.replace(/[a-z]*/, ''), - options = this._getAttributeOptions(attributeId); + options = this._getAttributeOptions(attributeId), + prevConfig, + index = 1, + allowedProducts, + i, + j; + this._clearSelect(element); element.options[0] = new Option('', ''); element.options[0].innerHTML = this.options.spConfig.chooseText; + prevConfig = false; - var prevConfig = false; if (element.prevSetting) { prevConfig = element.prevSetting.options[element.prevSetting.selectedIndex]; } + if (options) { - var index = 1; - for (var i = 0; i < options.length; i++) { - var allowedProducts = []; + for (i = 0; i < options.length; i++) { + allowedProducts = []; + if (prevConfig) { - for (var j = 0; j < options[i].products.length; j++) { + for (j = 0; j < options[i].products.length; j++) { // prevConfig.config can be undefined if (prevConfig.config && prevConfig.config.allowedProducts && @@ -313,12 +323,15 @@ define([ } else { allowedProducts = options[i].products.slice(0); } + if (allowedProducts.length > 0) { options[i].allowedProducts = allowedProducts; element.options[index] = new Option(this._getOptionLabel(options[i]), options[i].id); + if (typeof options[i].price !== 'undefined') { element.options[index].setAttribute('price', options[i].prices); } + element.options[index].config = options[i]; index++; } @@ -330,21 +343,22 @@ define([ * Generate the label associated with a configurable option. This includes the option's * label or value and the option's price. * @private - * @param option A single choice among a group of choices for a configurable option. - * @param selOption Current selected option. + * @param {*} option - A single choice among a group of choices for a configurable option. * @return {String} The option label with option value and price (e.g. Black +1.99) */ - _getOptionLabel: function(option, selOption) { + _getOptionLabel: function (option) { return option.label; }, /** * Removes an option's selections. * @private - * @param element The element associated with a configurable option. + * @param {*} element - The element associated with a configurable option. */ - _clearSelect: function(element) { - for (var i = element.options.length - 1; i >= 0; i--) { + _clearSelect: function (element) { + var i; + + for (i = element.options.length - 1; i >= 0; i--) { element.remove(i); } }, @@ -352,10 +366,10 @@ define([ /** * Retrieve the attribute options associated with a specific attribute Id. * @private - * @param attributeId The id of the attribute whose configurable options are sought. + * @param {Number} attributeId - The id of the attribute whose configurable options are sought. * @return {Object} Object containing the attribute options. */ - _getAttributeOptions: function(attributeId) { + _getAttributeOptions: function (attributeId) { if (this.options.spConfig.attributes[attributeId]) { return this.options.spConfig.attributes[attributeId].options; } @@ -364,19 +378,22 @@ define([ /** * Reload the price of the configurable product incorporating the prices of all of the * configurable product's option selections. - * @private - * @return {Number} The price of the configurable product including selected options. */ - _reloadPrice: function() { + _reloadPrice: function () { $(this.options.priceHolderSelector).trigger('updatePrice', this._getPrices()); }, + /** + * Get product various prices + * @returns {{}} + * @private + */ _getPrices: function () { var prices = {}, - elements = _.toArray(this.options.settings); + elements = _.toArray(this.options.settings), + hasProductPrice = false; - var hasProductPrice = false; - _.each(elements, function(element) { + _.each(elements, function (element) { var selected = element.options[element.selectedIndex], config = selected && selected.config, priceValue = {}; @@ -392,16 +409,50 @@ define([ return prices; }, + /** + * Returns pracies for configured products + * + * @param {*} config - Products configuration + * @returns {*} + * @private + */ _calculatePrice: function (config) { - var displayPrices = $(this.options.priceHolderSelector).priceBox('option').prices; - var newPrices = this.options.spConfig.optionPrices[_.first(config.allowedProducts)]; + var displayPrices = $(this.options.priceHolderSelector).priceBox('option').prices, + newPrices = this.options.spConfig.optionPrices[_.first(config.allowedProducts)]; _.each(displayPrices, function (price, code) { if (newPrices[code]) { - displayPrices[code].amount = newPrices[code].amount - displayPrices[code].amount + displayPrices[code].amount = newPrices[code].amount - displayPrices[code].amount; } }); + return displayPrices; + }, + + /** + * Returns Simple product Id + * depending on current selected option. + * + * @private + * @param {HTMLElement} element + * @returns {String|undefined} + */ + _getSimpleProductId: function (element) { + // TODO: Rewrite algorithm. It should return ID of + // simple product based on selected options. + var allOptions = element.config.options, + value = element.value, + config; + + config = _.filter(allOptions, function (option) { + return option.id === value; + }); + config = _.first(config); + + return _.isEmpty(config) ? + undefined : + _.first(config.allowedProducts); + } }); diff --git a/app/code/Magento/Contact/Test/Unit/Model/System/Config/Backend/LinksTest.php b/app/code/Magento/Contact/Test/Unit/Model/System/Config/Backend/LinksTest.php index 5a2c469bf10fc52bf8398e74d17a938831493b50..febdde20240b863408719cd5d1ed3ab59280c9bb 100644 --- a/app/code/Magento/Contact/Test/Unit/Model/System/Config/Backend/LinksTest.php +++ b/app/code/Magento/Contact/Test/Unit/Model/System/Config/Backend/LinksTest.php @@ -18,7 +18,7 @@ class LinksTest extends \PHPUnit_Framework_TestCase $this->getMock('\Magento\Framework\Model\Context', [], [], '', false), $this->getMock('\Magento\Framework\Registry', [], [], '', false), $this->getMockForAbstractClass('\Magento\Framework\App\Config\ScopeConfigInterface', [], '', false), - $this->getMockForAbstractClass('\Magento\Framework\Model\ModelResource\AbstractResource', [], '', false), + $this->getMockForAbstractClass('\Magento\Framework\Model\ResourceModel\AbstractResource', [], '', false), $this->getMock('\Magento\Framework\Data\Collection\AbstractDb', [], [], '', false) ); } diff --git a/app/code/Magento/Cookie/Model/Config/Backend/Domain.php b/app/code/Magento/Cookie/Model/Config/Backend/Domain.php index 0d8fb666c750643a8d78c1fd8aad5d04aa137628..50e5a4782d9e92ee77789effeb1140a48fd70c7c 100644 --- a/app/code/Magento/Cookie/Model/Config/Backend/Domain.php +++ b/app/code/Magento/Cookie/Model/Config/Backend/Domain.php @@ -18,7 +18,7 @@ class Domain extends \Magento\Framework\App\Config\Value * @param \Magento\Framework\Registry $registry * @param \Magento\Framework\App\Config\ScopeConfigInterface $config * @param \Magento\Framework\Session\Config\Validator\CookieDomainValidator $configValidator - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @codeCoverageIgnore @@ -28,7 +28,7 @@ class Domain extends \Magento\Framework\App\Config\Value \Magento\Framework\Registry $registry, \Magento\Framework\App\Config\ScopeConfigInterface $config, \Magento\Framework\Session\Config\Validator\CookieDomainValidator $configValidator, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Cookie/Model/Config/Backend/Lifetime.php b/app/code/Magento/Cookie/Model/Config/Backend/Lifetime.php index 3170aadb8f5975f4c9d86cffebf9b13e097710d3..bf2b2805dff6d9a71f5467a3e52eaff20f5638e5 100644 --- a/app/code/Magento/Cookie/Model/Config/Backend/Lifetime.php +++ b/app/code/Magento/Cookie/Model/Config/Backend/Lifetime.php @@ -18,7 +18,7 @@ class Lifetime extends \Magento\Framework\App\Config\Value * @param \Magento\Framework\Registry $registry * @param \Magento\Framework\App\Config\ScopeConfigInterface $config * @param \Magento\Framework\Session\Config\Validator\CookieLifetimeValidator $configValidator - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @codeCoverageIgnore @@ -28,7 +28,7 @@ class Lifetime extends \Magento\Framework\App\Config\Value \Magento\Framework\Registry $registry, \Magento\Framework\App\Config\ScopeConfigInterface $config, \Magento\Framework\Session\Config\Validator\CookieLifetimeValidator $configValidator, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Cookie/Model/Config/Backend/Path.php b/app/code/Magento/Cookie/Model/Config/Backend/Path.php index 7130085fbd8e7a28539107e4c786c5fb0ac06ced..f64d41dc1f0e62f194819c7aec35f293766cddd5 100644 --- a/app/code/Magento/Cookie/Model/Config/Backend/Path.php +++ b/app/code/Magento/Cookie/Model/Config/Backend/Path.php @@ -18,7 +18,7 @@ class Path extends \Magento\Framework\App\Config\Value * @param \Magento\Framework\Registry $registry * @param \Magento\Framework\App\Config\ScopeConfigInterface $config * @param \Magento\Framework\Session\Config\Validator\CookiePathValidator $configValidator - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @codeCoverageIgnore @@ -28,7 +28,7 @@ class Path extends \Magento\Framework\App\Config\Value \Magento\Framework\Registry $registry, \Magento\Framework\App\Config\ScopeConfigInterface $config, \Magento\Framework\Session\Config\Validator\CookiePathValidator $configValidator, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Cookie/Test/Unit/Model/Config/Backend/DomainTest.php b/app/code/Magento/Cookie/Test/Unit/Model/Config/Backend/DomainTest.php index 30ff0267ea833be834504ea8f867b39ecb4c0950..3e85d8a5dc9843dc04069cc69410e22ab4f3d59f 100644 --- a/app/code/Magento/Cookie/Test/Unit/Model/Config/Backend/DomainTest.php +++ b/app/code/Magento/Cookie/Test/Unit/Model/Config/Backend/DomainTest.php @@ -13,7 +13,7 @@ use Magento\Framework\Session\Config\Validator\CookieDomainValidator; */ class DomainTest extends \PHPUnit_Framework_TestCase { - /** @var \Magento\Framework\Model\ModelResource\AbstractResource | \PHPUnit_Framework_MockObject_MockObject */ + /** @var \Magento\Framework\Model\ResourceModel\AbstractResource | \PHPUnit_Framework_MockObject_MockObject */ protected $resourceMock; /** @var \Magento\Cookie\Model\Config\Backend\Domain */ @@ -37,7 +37,7 @@ class DomainTest extends \PHPUnit_Framework_TestCase ); $this->resourceMock = $this->getMock( - 'Magento\Framework\Model\ModelResource\AbstractResource', + 'Magento\Framework\Model\ResourceModel\AbstractResource', [ '_construct', 'getConnection', diff --git a/app/code/Magento/Cron/Model/Config/Backend/Product/Alert.php b/app/code/Magento/Cron/Model/Config/Backend/Product/Alert.php index 7427d72f392fc29b6d6c98f4699fdd5a1d4a8e43..67d69dfe2b5d6ef2ae6866c12f4cddd71a80a1d8 100644 --- a/app/code/Magento/Cron/Model/Config/Backend/Product/Alert.php +++ b/app/code/Magento/Cron/Model/Config/Backend/Product/Alert.php @@ -38,7 +38,7 @@ class Alert extends \Magento\Framework\App\Config\Value * @param \Magento\Framework\Registry $registry * @param \Magento\Framework\App\Config\ScopeConfigInterface $config * @param \Magento\Framework\App\Config\ValueFactory $configValueFactory - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param string $runModelPath * @param array $data @@ -48,7 +48,7 @@ class Alert extends \Magento\Framework\App\Config\Value \Magento\Framework\Registry $registry, \Magento\Framework\App\Config\ScopeConfigInterface $config, \Magento\Framework\App\Config\ValueFactory $configValueFactory, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, $runModelPath = '', array $data = [] diff --git a/app/code/Magento/Cron/Model/Config/Backend/Sitemap.php b/app/code/Magento/Cron/Model/Config/Backend/Sitemap.php index c49176ab6256b5e1e70d1b7a12ca77c4a1610ff4..fecbc2d676eb7e8393eab69f0eace5a99dead111 100644 --- a/app/code/Magento/Cron/Model/Config/Backend/Sitemap.php +++ b/app/code/Magento/Cron/Model/Config/Backend/Sitemap.php @@ -38,7 +38,7 @@ class Sitemap extends \Magento\Framework\App\Config\Value * @param \Magento\Framework\Registry $registry * @param \Magento\Framework\App\Config\ScopeConfigInterface $config * @param \Magento\Framework\App\Config\ValueFactory $configValueFactory - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param string $runModelPath * @param array $data @@ -48,7 +48,7 @@ class Sitemap extends \Magento\Framework\App\Config\Value \Magento\Framework\Registry $registry, \Magento\Framework\App\Config\ScopeConfigInterface $config, \Magento\Framework\App\Config\ValueFactory $configValueFactory, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, $runModelPath = '', array $data = [] diff --git a/app/code/Magento/Cron/Model/ResourceModel/Schedule.php b/app/code/Magento/Cron/Model/ResourceModel/Schedule.php index 6cad618e67894f0cd4f18f4b7db7ced8884ac7c5..469171d9e15432cc5818bfb4b9662eb78d4f577f 100644 --- a/app/code/Magento/Cron/Model/ResourceModel/Schedule.php +++ b/app/code/Magento/Cron/Model/ResourceModel/Schedule.php @@ -10,7 +10,7 @@ namespace Magento\Cron\Model\ResourceModel; * * @author Magento Core Team <core@magentocommerce.com> */ -class Schedule extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Schedule extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Initialize resource diff --git a/app/code/Magento/Cron/Model/ResourceModel/Schedule/Collection.php b/app/code/Magento/Cron/Model/ResourceModel/Schedule/Collection.php index 28bbcad12b8bc53dcf41ed1ea158b4c68d10e286..bbb579babc472bcd144e7d35844e4cf025bb360e 100644 --- a/app/code/Magento/Cron/Model/ResourceModel/Schedule/Collection.php +++ b/app/code/Magento/Cron/Model/ResourceModel/Schedule/Collection.php @@ -10,7 +10,7 @@ namespace Magento\Cron\Model\ResourceModel\Schedule; * * @author Magento Core Team <core@magentocommerce.com> */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Initialize resource collection diff --git a/app/code/Magento/Cron/Model/Schedule.php b/app/code/Magento/Cron/Model/Schedule.php index 4f4308b9db601e88455279692981ba8eaf67d42b..fbcb1fe5b27c4bfe8b61919c89cfa85e39ce35e7 100644 --- a/app/code/Magento/Cron/Model/Schedule.php +++ b/app/code/Magento/Cron/Model/Schedule.php @@ -47,14 +47,14 @@ class Schedule extends \Magento\Framework\Model\AbstractModel /** * @param \Magento\Framework\Model\Context $context * @param \Magento\Framework\Registry $registry - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ public function __construct( \Magento\Framework\Model\Context $context, \Magento\Framework\Registry $registry, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Cron/etc/crontab/events.xml b/app/code/Magento/Cron/etc/crontab/events.xml index db50815fbe89d12210001b756a54edf837f19cfa..19b0fa3d139d1261bbc7d170caad0bceb0d38280 100644 --- a/app/code/Magento/Cron/etc/crontab/events.xml +++ b/app/code/Magento/Cron/etc/crontab/events.xml @@ -7,6 +7,6 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="default"> - <observer name="cron_observer" instance="Magento\Cron\Observer\ProcessCronQueueObserver" method="execute" /> + <observer name="cron_observer" instance="Magento\Cron\Observer\ProcessCronQueueObserver" /> </event> </config> diff --git a/app/code/Magento/CurrencySymbol/etc/events.xml b/app/code/Magento/CurrencySymbol/etc/events.xml index 57abb36aff585f552a2bccc9841a85ad312443e5..98ee087948f2af1371ee9add122e238c5cb40839 100644 --- a/app/code/Magento/CurrencySymbol/etc/events.xml +++ b/app/code/Magento/CurrencySymbol/etc/events.xml @@ -7,6 +7,6 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="currency_display_options_forming"> - <observer name="magento_currencysymbol_currency_display_options" instance="Magento\CurrencySymbol\Observer\CurrencyDisplayOptions" method="execute" /> + <observer name="magento_currencysymbol_currency_display_options" instance="Magento\CurrencySymbol\Observer\CurrencyDisplayOptions" /> </event> </config> diff --git a/app/code/Magento/Customer/Block/CustomerData.php b/app/code/Magento/Customer/Block/CustomerData.php index 66d4043f152e6cc2a65324a1735da0b7837e3993..9d30a56de217b6df858d2aa6cff24c421bab3341 100644 --- a/app/code/Magento/Customer/Block/CustomerData.php +++ b/app/code/Magento/Customer/Block/CustomerData.php @@ -7,24 +7,14 @@ namespace Magento\Customer\Block; class CustomerData extends \Magento\Framework\View\Element\Template { - /** - * Sections that can not be cached on frontend-side - * - * @var array - */ - protected $nonCachedSections = []; - /** * @param \Magento\Framework\View\Element\Template\Context $context * @param array $data - * @param array $nonCachedSections */ public function __construct( \Magento\Framework\View\Element\Template\Context $context, - array $data = [], - array $nonCachedSections = [] + array $data = [] ) { - $this->nonCachedSections = $nonCachedSections; parent::__construct($context, $data); } @@ -50,24 +40,4 @@ class CustomerData extends \Magento\Framework\View\Element\Template { return $this->getUrl($route, ['_secure' => $this->getRequest()->isSecure()]); } - - /** - * Get sections that can not be cached on frontend-side - * - * @return array - */ - public function getNotCachedSections() - { - return $this->nonCachedSections; - } - - /** - * Get keys of sections that can not be cached on frontend-side - * - * @return array - */ - public function getNonCachedSectionKeys() - { - return array_keys($this->nonCachedSections); - } } diff --git a/app/code/Magento/Customer/Block/Form/Register.php b/app/code/Magento/Customer/Block/Form/Register.php index 4c3f28f819261ae96ccfdbca93907ff32c25c5d7..e6e77a075a8274e0a0315e12802158e53b64cd43 100644 --- a/app/code/Magento/Customer/Block/Form/Register.php +++ b/app/code/Magento/Customer/Block/Form/Register.php @@ -63,7 +63,7 @@ class Register extends \Magento\Directory\Block\Data $countryCollectionFactory, $data ); - $this->_isScopePrivate = false; + $this->_isScopePrivate = true; } /** diff --git a/app/code/Magento/Customer/Model/Address.php b/app/code/Magento/Customer/Model/Address.php index 1195715d8bb6ab0862cd41dae3453ca2b5eede2a..9318f0eb6a076cdd5e49a0b6b9e37a13bac2966c 100644 --- a/app/code/Magento/Customer/Model/Address.php +++ b/app/code/Magento/Customer/Model/Address.php @@ -64,7 +64,7 @@ class Address extends \Magento\Customer\Model\Address\AbstractAddress * @param CustomerFactory $customerFactory * @param \Magento\Framework\Reflection\DataObjectProcessor $dataProcessor * @param \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry - * @param \Magento\Framework\Model\ModelResource\AbstractResource|null $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource|null $resource * @param \Magento\Framework\Data\Collection\AbstractDb|null $resourceCollection * @param array $data * @@ -87,7 +87,7 @@ class Address extends \Magento\Customer\Model\Address\AbstractAddress CustomerFactory $customerFactory, \Magento\Framework\Reflection\DataObjectProcessor $dataProcessor, \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Customer/Model/Address/AbstractAddress.php b/app/code/Magento/Customer/Model/Address/AbstractAddress.php index ff3604e367bedea227f775d9905de9e09e466bfa..783b8c40017335e7151aeb24f332c83fb2c87fca 100644 --- a/app/code/Magento/Customer/Model/Address/AbstractAddress.php +++ b/app/code/Magento/Customer/Model/Address/AbstractAddress.php @@ -127,7 +127,7 @@ class AbstractAddress extends AbstractExtensibleModel implements AddressModelInt * @param AddressInterfaceFactory $addressDataFactory * @param RegionInterfaceFactory $regionDataFactory * @param \Magento\Framework\Api\DataObjectHelper $dataObjectHelper - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -146,7 +146,7 @@ class AbstractAddress extends AbstractExtensibleModel implements AddressModelInt AddressInterfaceFactory $addressDataFactory, RegionInterfaceFactory $regionDataFactory, \Magento\Framework\Api\DataObjectHelper $dataObjectHelper, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Customer/Model/Attribute.php b/app/code/Magento/Customer/Model/Attribute.php index 83f861b3ea4fa3f141a17baa745726cd5ffabeb4..e1e56c1e78c07f44bf2695be7fa6361f99cb4033 100644 --- a/app/code/Magento/Customer/Model/Attribute.php +++ b/app/code/Magento/Customer/Model/Attribute.php @@ -59,7 +59,7 @@ class Attribute extends \Magento\Eav\Model\Attribute * @param \Magento\Framework\Locale\ResolverInterface $localeResolver * @param DateTimeFormatterInterface $dateTimeFormatter * @param \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry - * @param \Magento\Framework\Model\ModelResource\AbstractResource|null $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource|null $resource * @param \Magento\Framework\Data\Collection\AbstractDb|null $resourceCollection * @param array $data * @@ -83,7 +83,7 @@ class Attribute extends \Magento\Eav\Model\Attribute \Magento\Framework\Locale\ResolverInterface $localeResolver, DateTimeFormatterInterface $dateTimeFormatter, \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Customer/Model/Config/Backend/Address/Street.php b/app/code/Magento/Customer/Model/Config/Backend/Address/Street.php index 014c25e8ea906730bb1f183e1f3d9b7a54cf3ba8..d456491e5c33462e25d49386eb0c77fbf7674684 100644 --- a/app/code/Magento/Customer/Model/Config/Backend/Address/Street.php +++ b/app/code/Magento/Customer/Model/Config/Backend/Address/Street.php @@ -28,7 +28,7 @@ class Street extends \Magento\Framework\App\Config\Value * @param \Magento\Framework\App\Config\ScopeConfigInterface $config * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param \Magento\Eav\Model\Config $eavConfig - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -38,7 +38,7 @@ class Street extends \Magento\Framework\App\Config\Value \Magento\Framework\App\Config\ScopeConfigInterface $config, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Eav\Model\Config $eavConfig, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Customer/Model/Config/Backend/CreateAccount/DisableAutoGroupAssignDefault.php b/app/code/Magento/Customer/Model/Config/Backend/CreateAccount/DisableAutoGroupAssignDefault.php index 2c39ad5de009772d5eb36eb1080d76413b72e363..2f889d0f7c0788ab8d8a0162fe0fea4b9d046484 100644 --- a/app/code/Magento/Customer/Model/Config/Backend/CreateAccount/DisableAutoGroupAssignDefault.php +++ b/app/code/Magento/Customer/Model/Config/Backend/CreateAccount/DisableAutoGroupAssignDefault.php @@ -17,7 +17,7 @@ class DisableAutoGroupAssignDefault extends \Magento\Framework\App\Config\Value * @param \Magento\Framework\Registry $registry * @param \Magento\Framework\App\Config\ScopeConfigInterface $config * @param \Magento\Eav\Model\Config $eavConfig - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -26,7 +26,7 @@ class DisableAutoGroupAssignDefault extends \Magento\Framework\App\Config\Value \Magento\Framework\Registry $registry, \Magento\Framework\App\Config\ScopeConfigInterface $config, \Magento\Eav\Model\Config $eavConfig, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Customer/Model/Config/Backend/Show/Customer.php b/app/code/Magento/Customer/Model/Config/Backend/Show/Customer.php index 2957d9ae35f986b01d70211a35e323be102da62d..31ed960864fcad1679749f632a44a348f21ecf49 100644 --- a/app/code/Magento/Customer/Model/Config/Backend/Show/Customer.php +++ b/app/code/Magento/Customer/Model/Config/Backend/Show/Customer.php @@ -28,7 +28,7 @@ class Customer extends \Magento\Framework\App\Config\Value * @param \Magento\Framework\App\Config\ScopeConfigInterface $config * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param \Magento\Eav\Model\Config $eavConfig - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -38,7 +38,7 @@ class Customer extends \Magento\Framework\App\Config\Value \Magento\Framework\App\Config\ScopeConfigInterface $config, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Eav\Model\Config $eavConfig, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Customer/Model/Config/Share.php b/app/code/Magento/Customer/Model/Config/Share.php index 5c8010c95b24eff991512045d34783dba8a8c66d..5fb8bacb5743c439a0b19e4e0f16e81d64b06083 100644 --- a/app/code/Magento/Customer/Model/Config/Share.php +++ b/app/code/Magento/Customer/Model/Config/Share.php @@ -42,7 +42,7 @@ class Share extends \Magento\Framework\App\Config\Value implements \Magento\Fram * @param \Magento\Framework\App\Config\ScopeConfigInterface $config * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param \Magento\Customer\Model\ResourceModel\Customer $customerResource - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -52,7 +52,7 @@ class Share extends \Magento\Framework\App\Config\Value implements \Magento\Fram \Magento\Framework\App\Config\ScopeConfigInterface $config, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Customer\Model\ResourceModel\Customer $customerResource, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Customer/Model/Group.php b/app/code/Magento/Customer/Model/Group.php index 1f1d549a6eb952ee2da5a1e6faeb3568aac67db2..8045a4056954eb64d455abf1d65095666a5fd1a0 100644 --- a/app/code/Magento/Customer/Model/Group.php +++ b/app/code/Magento/Customer/Model/Group.php @@ -64,7 +64,7 @@ class Group extends \Magento\Framework\Model\AbstractModel * @param \Magento\Store\Model\StoresConfig $storesConfig * @param \Magento\Framework\Reflection\DataObjectProcessor $dataObjectProcessor * @param \Magento\Tax\Model\ClassModelFactory $classModelFactory - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -75,7 +75,7 @@ class Group extends \Magento\Framework\Model\AbstractModel \Magento\Store\Model\StoresConfig $storesConfig, \Magento\Framework\Reflection\DataObjectProcessor $dataObjectProcessor, \Magento\Tax\Model\ClassModelFactory $classModelFactory, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Customer/Model/ResourceModel/Address.php b/app/code/Magento/Customer/Model/ResourceModel/Address.php index 5a5b476fb5ee56eb3509dcd346d047cbb16b7905..53502f748395b8eb7504edcf591bb5ffbbf70161 100644 --- a/app/code/Magento/Customer/Model/ResourceModel/Address.php +++ b/app/code/Magento/Customer/Model/ResourceModel/Address.php @@ -21,16 +21,16 @@ class Address extends \Magento\Eav\Model\Entity\VersionControl\AbstractEntity /** * @param \Magento\Eav\Model\Entity\Context $context - * @param \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot, - * @param \Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite $entityRelationComposite, + * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot, + * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite, * @param \Magento\Framework\Validator\Factory $validatorFactory * @param \Magento\Customer\Api\CustomerRepositoryInterface $customerRepository * @param array $data */ public function __construct( \Magento\Eav\Model\Entity\Context $context, - \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot, - \Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite $entityRelationComposite, + \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot, + \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite, \Magento\Framework\Validator\Factory $validatorFactory, \Magento\Customer\Api\CustomerRepositoryInterface $customerRepository, $data = [] diff --git a/app/code/Magento/Customer/Model/ResourceModel/Address/Relation.php b/app/code/Magento/Customer/Model/ResourceModel/Address/Relation.php index b5120a99178ecb624e68dab5a0c9e7ea80c9eddf..3267ab03cb61daa4b1777e062fd15c5674c2cb8d 100644 --- a/app/code/Magento/Customer/Model/ResourceModel/Address/Relation.php +++ b/app/code/Magento/Customer/Model/ResourceModel/Address/Relation.php @@ -7,7 +7,7 @@ */ namespace Magento\Customer\Model\ResourceModel\Address; -use Magento\Framework\Model\ModelResource\Db\VersionControl\RelationInterface; +use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationInterface; /** * Class represents save operations for customer address relations diff --git a/app/code/Magento/Customer/Model/ResourceModel/Customer.php b/app/code/Magento/Customer/Model/ResourceModel/Customer.php index a0125875c54847dce6515a475dc89b90cd919a35..e96b8c1b2a4df9ef57b91033b6ffe9275c1a4629 100644 --- a/app/code/Magento/Customer/Model/ResourceModel/Customer.php +++ b/app/code/Magento/Customer/Model/ResourceModel/Customer.php @@ -38,8 +38,8 @@ class Customer extends \Magento\Eav\Model\Entity\VersionControl\AbstractEntity /** * @param \Magento\Eav\Model\Entity\Context $context - * @param \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot - * @param \Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite $entityRelationComposite + * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot + * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig * @param \Magento\Framework\Validator\Factory $validatorFactory * @param \Magento\Framework\Stdlib\DateTime $dateTime @@ -48,8 +48,8 @@ class Customer extends \Magento\Eav\Model\Entity\VersionControl\AbstractEntity */ public function __construct( \Magento\Eav\Model\Entity\Context $context, - \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot, - \Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite $entityRelationComposite, + \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot, + \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite, \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig, \Magento\Framework\Validator\Factory $validatorFactory, \Magento\Framework\Stdlib\DateTime $dateTime, diff --git a/app/code/Magento/Customer/Model/ResourceModel/Customer/Collection.php b/app/code/Magento/Customer/Model/ResourceModel/Customer/Collection.php index 6d69c42c167a46a1aed8070fd61fdf53d622bc77..e8982afaba93cae57bef390cd236b8cdda58a8b4 100644 --- a/app/code/Magento/Customer/Model/ResourceModel/Customer/Collection.php +++ b/app/code/Magento/Customer/Model/ResourceModel/Customer/Collection.php @@ -38,7 +38,7 @@ class Collection extends \Magento\Eav\Model\Entity\Collection\VersionControl\Abs * @param \Magento\Eav\Model\EntityFactory $eavEntityFactory * @param \Magento\Eav\Model\ResourceModel\Helper $resourceHelper * @param \Magento\Framework\Validator\UniversalFactory $universalFactory - * @param \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot + * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot * @param \Magento\Framework\DataObject\Copy\Config $fieldsetConfig * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection * @param string $modelName @@ -55,7 +55,7 @@ class Collection extends \Magento\Eav\Model\Entity\Collection\VersionControl\Abs \Magento\Eav\Model\EntityFactory $eavEntityFactory, \Magento\Eav\Model\ResourceModel\Helper $resourceHelper, \Magento\Framework\Validator\UniversalFactory $universalFactory, - \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot, + \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot, \Magento\Framework\DataObject\Copy\Config $fieldsetConfig, \Magento\Framework\DB\Adapter\AdapterInterface $connection = null, $modelName = self::CUSTOMER_MODEL_NAME diff --git a/app/code/Magento/Customer/Model/ResourceModel/Customer/Relation.php b/app/code/Magento/Customer/Model/ResourceModel/Customer/Relation.php index 20b3124bcc2508b62fab138cd3f5b1fe2b0aec57..b809549ed79f35bb2908c43419a7cd5aa74864fd 100644 --- a/app/code/Magento/Customer/Model/ResourceModel/Customer/Relation.php +++ b/app/code/Magento/Customer/Model/ResourceModel/Customer/Relation.php @@ -9,7 +9,7 @@ namespace Magento\Customer\Model\ResourceModel\Customer; /** * Class Relation */ -class Relation implements \Magento\Framework\Model\ModelResource\Db\VersionControl\RelationInterface +class Relation implements \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationInterface { /** * Save relations for Customer diff --git a/app/code/Magento/Customer/Model/ResourceModel/Group.php b/app/code/Magento/Customer/Model/ResourceModel/Group.php index 395e49c2481c78031af8a8ab7ce4c3e3c0613d45..7c793f8fc9e9310571038692a9d5718e2509acb4 100644 --- a/app/code/Magento/Customer/Model/ResourceModel/Group.php +++ b/app/code/Magento/Customer/Model/ResourceModel/Group.php @@ -5,15 +5,15 @@ */ namespace Magento\Customer\Model\ResourceModel; -use Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot; -use Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite; +use Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot; +use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite; /** * Customer group resource model * * @author Magento Core Team <core@magentocommerce.com> */ -class Group extends \Magento\Framework\Model\ModelResource\Db\VersionControl\AbstractDb +class Group extends \Magento\Framework\Model\ResourceModel\Db\VersionControl\AbstractDb { /** * Group Management @@ -28,7 +28,7 @@ class Group extends \Magento\Framework\Model\ModelResource\Db\VersionControl\Abs protected $_customersFactory; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param Snapshot $entitySnapshot, * @param RelationComposite $entityRelationComposite, * @param \Magento\Customer\Api\GroupManagementInterface $groupManagement @@ -36,7 +36,7 @@ class Group extends \Magento\Framework\Model\ModelResource\Db\VersionControl\Abs * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, Snapshot $entitySnapshot, RelationComposite $entityRelationComposite, \Magento\Customer\Api\GroupManagementInterface $groupManagement, diff --git a/app/code/Magento/Customer/Model/ResourceModel/Group/Collection.php b/app/code/Magento/Customer/Model/ResourceModel/Group/Collection.php index bc7b863e7e0cd3cfedc386ac3b9a056bcf80f4cc..52d37da5646e30bd01228ac421bae204804624c3 100644 --- a/app/code/Magento/Customer/Model/ResourceModel/Group/Collection.php +++ b/app/code/Magento/Customer/Model/ResourceModel/Group/Collection.php @@ -10,7 +10,7 @@ namespace Magento\Customer\Model\ResourceModel\Group; * * @author Magento Core Team <core@magentocommerce.com> */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Resource initialization diff --git a/app/code/Magento/Customer/Model/ResourceModel/Visitor.php b/app/code/Magento/Customer/Model/ResourceModel/Visitor.php index 2c65387b19675a203974e6e6ab38cafa5253238b..1e3adf4d6ce6ff18e1fa8cabf55a24489c7e5b69 100644 --- a/app/code/Magento/Customer/Model/ResourceModel/Visitor.php +++ b/app/code/Magento/Customer/Model/ResourceModel/Visitor.php @@ -10,7 +10,7 @@ namespace Magento\Customer\Model\ResourceModel; * Class Visitor * @package Magento\Customer\Model\ResourceModel */ -class Visitor extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Visitor extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * @var \Magento\Framework\Stdlib\DateTime\DateTime @@ -23,13 +23,13 @@ class Visitor extends \Magento\Framework\Model\ModelResource\Db\AbstractDb protected $dateTime; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Framework\Stdlib\DateTime\DateTime $date * @param \Magento\Framework\Stdlib\DateTime $dateTime * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Framework\Stdlib\DateTime\DateTime $date, \Magento\Framework\Stdlib\DateTime $dateTime, $connectionName = null diff --git a/app/code/Magento/Customer/Model/ResourceModel/Visitor/Collection.php b/app/code/Magento/Customer/Model/ResourceModel/Visitor/Collection.php index cbad6afc46f5ae73a2d3eb8582fa92f07a3030d2..5ce707c294d9bfd0ebfc787bcbd420b281810b98 100644 --- a/app/code/Magento/Customer/Model/ResourceModel/Visitor/Collection.php +++ b/app/code/Magento/Customer/Model/ResourceModel/Visitor/Collection.php @@ -5,7 +5,7 @@ */ namespace Magento\Customer\Model\ResourceModel\Visitor; -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Resource initialization diff --git a/app/code/Magento/Customer/Model/Visitor.php b/app/code/Magento/Customer/Model/Visitor.php index 45c8c3408b8509a5c73d6be88b4c021a740d6f64..6f4a1d58b3b233dc29fa8422077adf624b3172a3 100644 --- a/app/code/Magento/Customer/Model/Visitor.php +++ b/app/code/Magento/Customer/Model/Visitor.php @@ -75,7 +75,7 @@ class Visitor extends \Magento\Framework\Model\AbstractModel * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig * @param \Magento\Framework\Stdlib\DateTime $dateTime * @param \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry - * @param \Magento\Framework\Model\ModelResource\AbstractResource|null $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource|null $resource * @param \Magento\Framework\Data\Collection\AbstractDb|null $resourceCollection * @param array $ignoredUserAgents * @param array $ignores @@ -91,7 +91,7 @@ class Visitor extends \Magento\Framework\Model\AbstractModel \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig, \Magento\Framework\Stdlib\DateTime $dateTime, \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $ignoredUserAgents = [], array $ignores = [], diff --git a/app/code/Magento/Customer/Setup/UpgradeData.php b/app/code/Magento/Customer/Setup/UpgradeData.php index a37210bd9fb8842bb56515853295cea334d0cad0..7f43ee046bdd2afe812cc15260a87976a8013047 100644 --- a/app/code/Magento/Customer/Setup/UpgradeData.php +++ b/app/code/Magento/Customer/Setup/UpgradeData.php @@ -240,6 +240,51 @@ class UpgradeData implements UpgradeDataInterface ]; $this->upgradeAttributes($entityAttributes, $customerSetup); } + if (version_compare($context->getVersion(), '2.0.6', '<')) { + $customerSetup->updateEntityType( + \Magento\Customer\Model\Customer::ENTITY, + 'entity_model', + 'Magento\Customer\Model\ResourceModel\Customer' + ); + $customerSetup->updateEntityType( + \Magento\Customer\Model\Customer::ENTITY, + 'increment_model', + 'Magento\Eav\Model\Entity\Increment\NumericValue' + ); + $customerSetup->updateEntityType( + \Magento\Customer\Model\Customer::ENTITY, + 'entity_attribute_collection', + 'Magento\Customer\Model\ResourceModel\Attribute\Collection' + ); + $customerSetup->updateEntityType( + 'customer_address', + 'entity_model', + 'Magento\Customer\Model\ResourceModel\Address' + ); + $customerSetup->updateEntityType( + 'customer_address', + 'entity_attribute_collection', + 'Magento\Customer\Model\ResourceModel\Address\Attribute\Collection' + ); + $customerSetup->updateAttribute( + 'customer_address', + 'country_id', + 'source_model', + 'Magento\Customer\Model\ResourceModel\Address\Attribute\Source\Country' + ); + $customerSetup->updateAttribute( + 'customer_address', + 'region', + 'backend_model', + 'Magento\Customer\Model\ResourceModel\Address\Attribute\Backend\Region' + ); + $customerSetup->updateAttribute( + 'customer_address', + 'region_id', + 'source_model', + 'Magento\Customer\Model\ResourceModel\Address\Attribute\Source\Region' + ); + } $indexer = $this->indexerRegistry->get(Customer::CUSTOMER_GRID_INDEXER_ID); $indexer->reindexAll(); diff --git a/app/code/Magento/Customer/Test/Unit/Model/AttributeTest.php b/app/code/Magento/Customer/Test/Unit/Model/AttributeTest.php index 7907716a7f7992173d93b823e279d284698510be..c779cd5d3f418a66360cee2c00f509703f60e274 100644 --- a/app/code/Magento/Customer/Test/Unit/Model/AttributeTest.php +++ b/app/code/Magento/Customer/Test/Unit/Model/AttributeTest.php @@ -70,7 +70,7 @@ class AttributeTest extends \PHPUnit_Framework_TestCase protected $timezoneMock; /** - * @var \Magento\Framework\Model\ModelResource\AbstractResource|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Model\ResourceModel\AbstractResource|\PHPUnit_Framework_MockObject_MockObject */ private $resourceMock; @@ -173,7 +173,7 @@ class AttributeTest extends \PHPUnit_Framework_TestCase ->getMock(); $this->dateTimeFormatter = $this->getMock('Magento\Framework\Stdlib\DateTime\DateTimeFormatterInterface'); - $this->resourceMock = $this->getMockBuilder('Magento\Framework\Model\ModelResource\AbstractResource') + $this->resourceMock = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\AbstractResource') ->setMethods(['_construct', 'getConnection', 'getIdFieldName', 'saveInSetIncluding']) ->getMockForAbstractClass(); $this->cacheManager = $this->getMockBuilder('Magento\Framework\App\CacheInterface') diff --git a/app/code/Magento/Customer/Test/Unit/Model/ResourceModel/Address/RelationTest.php b/app/code/Magento/Customer/Test/Unit/Model/ResourceModel/Address/RelationTest.php index 3f8a66cfc53eddcbaf044fba3e8edb846e797dc3..890d19c00ad2ee27e62907165d5ddd94f1be3a3e 100644 --- a/app/code/Magento/Customer/Test/Unit/Model/ResourceModel/Address/RelationTest.php +++ b/app/code/Magento/Customer/Test/Unit/Model/ResourceModel/Address/RelationTest.php @@ -69,7 +69,7 @@ class RelationTest extends \PHPUnit_Framework_TestCase false ); $customerResource = $this->getMockForAbstractClass( - 'Magento\Framework\Model\ModelResource\Db\AbstractDb', + 'Magento\Framework\Model\ResourceModel\Db\AbstractDb', [], '', false, diff --git a/app/code/Magento/Customer/Test/Unit/Model/ResourceModel/AddressTest.php b/app/code/Magento/Customer/Test/Unit/Model/ResourceModel/AddressTest.php index 04011dd7fd43f6d2256037bc55d6ceeca694fb44..61f3adb3dab7a1411b8faa4b3e83d575b22862e6 100644 --- a/app/code/Magento/Customer/Test/Unit/Model/ResourceModel/AddressTest.php +++ b/app/code/Magento/Customer/Test/Unit/Model/ResourceModel/AddressTest.php @@ -8,8 +8,8 @@ namespace Magento\Customer\Test\Unit\Model\ResourceModel; -use Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite; -use Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot; +use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite; +use Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper; class AddressTest extends \PHPUnit_Framework_TestCase @@ -32,7 +32,7 @@ class AddressTest extends \PHPUnit_Framework_TestCase protected function setUp() { $this->entitySnapshotMock = $this->getMock( - 'Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot', + 'Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot', [], [], '', @@ -41,7 +41,7 @@ class AddressTest extends \PHPUnit_Framework_TestCase $this->entityRelationCompositeMock = $this->getMock( - 'Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite', + 'Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite', [], [], '', diff --git a/app/code/Magento/Customer/Test/Unit/Model/ResourceModel/GroupTest.php b/app/code/Magento/Customer/Test/Unit/Model/ResourceModel/GroupTest.php index ccaa89a2061fa6c5b865c4b4b9732d5f680e8e22..2577c7fb4018f8374f95e8c472ee15e876ce6d62 100644 --- a/app/code/Magento/Customer/Test/Unit/Model/ResourceModel/GroupTest.php +++ b/app/code/Magento/Customer/Test/Unit/Model/ResourceModel/GroupTest.php @@ -53,18 +53,18 @@ class GroupTest extends \PHPUnit_Framework_TestCase $this->groupModel = $this->getMock('Magento\Customer\Model\Group', [], [], '', false); - $contextMock = $this->getMock('\Magento\Framework\Model\ModelResource\Db\Context', [], [], '', false); + $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false); $contextMock->expects($this->once())->method('getResources')->willReturn($this->resource); $this->relationProcessorMock = $this->getMock( - '\Magento\Framework\Model\ModelResource\Db\ObjectRelationProcessor', + '\Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor', [], [], '', false ); - $transactionManagerMock = $this->getMock('\Magento\Framework\Model\ModelResource\Db\TransactionManagerInterface'); + $transactionManagerMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\TransactionManagerInterface'); $transactionManagerMock->expects($this->once()) ->method('start') ->willReturn($this->getMock('\Magento\Framework\DB\Adapter\AdapterInterface')); diff --git a/app/code/Magento/Customer/Test/Unit/Ui/Component/DataProviderTest.php b/app/code/Magento/Customer/Test/Unit/Ui/Component/DataProviderTest.php new file mode 100644 index 0000000000000000000000000000000000000000..7e1b9f9d43779ed11698f2fa05eafa2b568026a6 --- /dev/null +++ b/app/code/Magento/Customer/Test/Unit/Ui/Component/DataProviderTest.php @@ -0,0 +1,164 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Customer\Test\Unit\Ui\Component; + +use Magento\Customer\Api\Data\AttributeMetadataInterface; +use Magento\Customer\Ui\Component\DataProvider; +use Magento\Customer\Ui\Component\Listing\AttributeRepository; +use Magento\Framework\Api\FilterBuilder; +use Magento\Framework\Api\Search\SearchCriteriaInterface; +use Magento\Framework\View\Element\UiComponent\DataProvider\Reporting; + +class DataProviderTest extends \PHPUnit_Framework_TestCase +{ + const TEST_REQUEST_NAME = 'test_request_name'; + + /** + * @var DataProvider + */ + protected $model; + + /** + * @var Reporting | \PHPUnit_Framework_MockObject_MockObject + */ + protected $reporting; + + /** + * @var SearchCriteriaInterface | \PHPUnit_Framework_MockObject_MockObject + */ + protected $searchCriteria; + + /** + * @var \Magento\Framework\App\RequestInterface | \PHPUnit_Framework_MockObject_MockObject + */ + protected $request; + + /** + * @var FilterBuilder | \PHPUnit_Framework_MockObject_MockObject + */ + protected $filterBuilder; + + /** + * @var AttributeRepository | \PHPUnit_Framework_MockObject_MockObject + */ + protected $attributeRepository; + + public function setUp() + { + $this->reporting = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\DataProvider\Reporting') + ->disableOriginalConstructor() + ->getMock(); + + $searchCriteriaBuilder = $this->mockSearchCriteria(); + + $this->request = $this->getMockBuilder('Magento\Framework\App\RequestInterface') + ->getMockForAbstractClass(); + + $this->filterBuilder = $this->getMockBuilder('Magento\Framework\Api\FilterBuilder') + ->disableOriginalConstructor() + ->getMock(); + + $this->attributeRepository = $this->getMockBuilder('Magento\Customer\Ui\Component\Listing\AttributeRepository') + ->disableOriginalConstructor() + ->getMock(); + + $this->model = new DataProvider( + self::TEST_REQUEST_NAME, + '', + '', + $this->reporting, + $searchCriteriaBuilder, + $this->request, + $this->filterBuilder, + $this->attributeRepository + ); + } + + public function testGetData() + { + $attributeCode = 'attribute_code'; + $attributeValue = [ + AttributeMetadataInterface::OPTIONS => [ + [ + 'label' => 'opt1_label', + 'value' => 'opt1_value', + ], + ], + ]; + + $expected = [ + [ + 'attribute_code' => ['opt1_value'], + ], + ]; + + $attributeMock = $this->getMockBuilder('Magento\Framework\Api\AttributeInterface') + ->getMockForAbstractClass(); + $attributeMock->expects($this->once()) + ->method('getAttributeCode') + ->willReturn($attributeCode); + $attributeMock->expects($this->once()) + ->method('getValue') + ->willReturn('opt1_value'); + + $searchDocumentMock = $this->getMockBuilder('Magento\Framework\Api\Search\DocumentInterface') + ->getMockForAbstractClass(); + $searchDocumentMock->expects($this->once()) + ->method('getCustomAttributes') + ->willReturn([$attributeMock]); + + $searchResultMock = $this->getMockBuilder('Magento\Framework\Api\Search\SearchResultInterface') + ->getMockForAbstractClass(); + $searchResultMock->expects($this->once()) + ->method('getTotalCount') + ->willReturn(1); + $searchResultMock->expects($this->once()) + ->method('getItems') + ->willReturn([$searchDocumentMock]); + + $this->searchCriteria->expects($this->once()) + ->method('setRequestName') + ->with(self::TEST_REQUEST_NAME) + ->willReturnSelf(); + + $this->reporting->expects($this->once()) + ->method('search') + ->with($this->searchCriteria) + ->willReturn($searchResultMock); + + $this->attributeRepository->expects($this->once()) + ->method('getList') + ->willReturn([$attributeCode => $attributeValue]); + + $result = $this->model->getData(); + + $this->assertTrue(is_array($result)); + $this->assertArrayHasKey('totalRecords', $result); + $this->assertEquals(1, $result['totalRecords']); + $this->assertArrayHasKey('items', $result); + $this->assertTrue(is_array($result['items'])); + $this->assertEquals($result['items'], $expected); + } + + /** + * @return \PHPUnit_Framework_MockObject_MockObject + */ + protected function mockSearchCriteria() + { + $this->searchCriteria = $this->getMockBuilder('Magento\Framework\Api\Search\SearchCriteriaInterface') + ->getMockForAbstractClass(); + + $searchCriteriaBuilder = $this->getMockBuilder('Magento\Framework\Api\Search\SearchCriteriaBuilder') + ->disableOriginalConstructor() + ->getMock(); + + $searchCriteriaBuilder->expects($this->any()) + ->method('create') + ->willReturn($this->searchCriteria); + + return $searchCriteriaBuilder; + } +} diff --git a/app/code/Magento/Customer/Test/Unit/Ui/Component/Listing/Column/ActionsTest.php b/app/code/Magento/Customer/Test/Unit/Ui/Component/Listing/Column/ActionsTest.php index 19809e6e5ae13e5629156909bccf0babbdc9d9b6..92df9f65692f64d3e6cda9aff0e2aa64fd7fb29a 100644 --- a/app/code/Magento/Customer/Test/Unit/Ui/Component/Listing/Column/ActionsTest.php +++ b/app/code/Magento/Customer/Test/Unit/Ui/Component/Listing/Column/ActionsTest.php @@ -23,12 +23,12 @@ class ActionsTest extends \PHPUnit_Framework_TestCase public function setup() { - $this->context = $this->getMockForAbstractClass( - 'Magento\Framework\View\Element\UiComponent\ContextInterface', - [], - '', - false - ); + $this->context = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\ContextInterface') + ->getMockForAbstractClass(); + $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor') + ->disableOriginalConstructor() + ->getMock(); + $this->context->expects($this->any())->method('getProcessor')->willReturn($processor); $this->uiComponentFactory = $this->getMock( 'Magento\Framework\View\Element\UiComponentFactory', [], diff --git a/app/code/Magento/Customer/Test/Unit/Ui/Component/Listing/Column/AttributeColumnTest.php b/app/code/Magento/Customer/Test/Unit/Ui/Component/Listing/Column/AttributeColumnTest.php index 68853c63e37515538ccc35e427120ab7200f9071..292f73888809a420b5055320577d49a5e1d5633e 100644 --- a/app/code/Magento/Customer/Test/Unit/Ui/Component/Listing/Column/AttributeColumnTest.php +++ b/app/code/Magento/Customer/Test/Unit/Ui/Component/Listing/Column/AttributeColumnTest.php @@ -27,12 +27,12 @@ class AttributeColumnTest extends \PHPUnit_Framework_TestCase public function setup() { - $this->context = $this->getMockForAbstractClass( - 'Magento\Framework\View\Element\UiComponent\ContextInterface', - [], - '', - false - ); + $this->context = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\ContextInterface') + ->getMockForAbstractClass(); + $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor') + ->disableOriginalConstructor() + ->getMock(); + $this->context->expects($this->any())->method('getProcessor')->willReturn($processor); $this->uiComponentFactory = $this->getMock( 'Magento\Framework\View\Element\UiComponentFactory', [], diff --git a/app/code/Magento/Customer/Test/Unit/Ui/Component/Listing/ColumnsTest.php b/app/code/Magento/Customer/Test/Unit/Ui/Component/Listing/ColumnsTest.php index fbdfdf3ff4798c2e0b034a175ca92a6d6844922e..2ff207ba75f96d75a54e8bd91a63ff175e0ae023 100644 --- a/app/code/Magento/Customer/Test/Unit/Ui/Component/Listing/ColumnsTest.php +++ b/app/code/Magento/Customer/Test/Unit/Ui/Component/Listing/ColumnsTest.php @@ -32,12 +32,12 @@ class ColumnsTest extends \PHPUnit_Framework_TestCase public function setUp() { - $this->context = $this->getMockForAbstractClass( - 'Magento\Framework\View\Element\UiComponent\ContextInterface', - [], - '', - false - ); + $this->context = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\ContextInterface') + ->getMockForAbstractClass(); + $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor') + ->disableOriginalConstructor() + ->getMock(); + $this->context->expects($this->any())->method('getProcessor')->willReturn($processor); $this->columnFactory = $this->getMock( 'Magento\Customer\Ui\Component\ColumnFactory', ['create'], @@ -173,6 +173,7 @@ class ColumnsTest extends \PHPUnit_Framework_TestCase [ 'name' => $attributeCode, 'dataType' => $backendType, + 'filter' => 'text', 'visible' => true ] ); diff --git a/app/code/Magento/Customer/Test/Unit/Ui/Component/Listing/FiltersTest.php b/app/code/Magento/Customer/Test/Unit/Ui/Component/Listing/FiltersTest.php deleted file mode 100644 index 2dc73c58104a5746ba8513e3816d646aba770240..0000000000000000000000000000000000000000 --- a/app/code/Magento/Customer/Test/Unit/Ui/Component/Listing/FiltersTest.php +++ /dev/null @@ -1,135 +0,0 @@ -<?php -/** - * Copyright © 2015 Magento. All rights reserved. - * See COPYING.txt for license details. - */ -namespace Magento\Customer\Test\Unit\Ui\Component\Listing; - -use Magento\Customer\Ui\Component\Listing\Filters; - -class FiltersTest extends \PHPUnit_Framework_TestCase -{ - /** @var \Magento\Framework\View\Element\UiComponent\ContextInterface|\PHPUnit_Framework_MockObject_MockObject */ - protected $context; - - /** @var \Magento\Customer\Ui\Component\FilterFactory|\PHPUnit_Framework_MockObject_MockObject */ - protected $filterFactory; - - /** @var \Magento\Customer\Ui\Component\Listing\AttributeRepository|\PHPUnit_Framework_MockObject_MockObject */ - protected $attributeRepository; - - /** @var \Magento\Customer\Api\Data\AttributeMetadataInterface|\PHPUnit_Framework_MockObject_MockObject */ - protected $attributeMetadata; - - /** @var \Magento\Ui\Component\Listing\Columns\ColumnInterface|\PHPUnit_Framework_MockObject_MockObject */ - protected $filter; - - /** @var Filters */ - protected $component; - - public function setUp() - { - $this->context = $this->getMockForAbstractClass( - 'Magento\Framework\View\Element\UiComponent\ContextInterface', - [], - '', - false - ); - $this->filterFactory = $this->getMock( - 'Magento\Customer\Ui\Component\FilterFactory', - ['create'], - [], - '', - false - ); - $this->attributeRepository = $this->getMock( - 'Magento\Customer\Ui\Component\Listing\AttributeRepository', - [], - [], - '', - false - ); - $this->attributeMetadata = $this->getMockForAbstractClass( - 'Magento\Customer\Api\Data\AttributeMetadataInterface', - [], - '', - false - ); - $this->filter = $this->getMockForAbstractClass( - 'Magento\Ui\Component\Listing\Columns\ColumnInterface', - [], - '', - false - ); - - $this->component = new Filters( - $this->context, - $this->filterFactory, - $this->attributeRepository - ); - } - - public function testPrepare() - { - $attributeCode = 'billing_attribute_code'; - $attributeData = [ - 'attribute_code' => $attributeCode, - 'frontend_input' => 'frontend-input', - 'frontend_label' => 'frontend-label', - 'backend_type' => 'backend-type', - 'options' => [ - [ - 'label' => 'Label', - 'value' => 'Value' - ] - ], - 'is_used_in_grid' => true, - 'is_visible_in_grid' => true, - 'is_filterable_in_grid' => true, - 'is_searchable_in_grid' => true, - ]; - - $this->attributeRepository->expects($this->atLeastOnce()) - ->method('getList') - ->willReturn([$attributeCode => $attributeData]); - $this->filterFactory->expects($this->once()) - ->method('create') - ->with($attributeData, $this->context) - ->willReturn($this->filter); - $this->filter->expects($this->once()) - ->method('prepare'); - - $this->component->prepare(); - $this->assertSame($this->filter, $this->component->getComponent($attributeCode)); - } - - public function testPrepareWithAlreadyAddedComponent() - { - $attributeCode = 'billing_attribute_code'; - $attributeData = [ - 'attribute_code' => $attributeCode, - 'frontend_input' => 'frontend-input', - 'frontend_label' => 'frontend-label', - 'backend_type' => 'backend-type', - 'options' => [ - [ - 'label' => 'Label', - 'value' => 'Value' - ] - ], - 'is_used_in_grid' => true, - 'is_visible_in_grid' => true, - 'is_filterable_in_grid' => false, - 'is_searchable_in_grid' => true, - ]; - - $this->component->addComponent($attributeCode, $this->filter); - - $this->attributeRepository->expects($this->atLeastOnce()) - ->method('getList') - ->willReturn([$attributeCode => $attributeData]); - - $this->component->prepare(); - $this->assertEquals(null, $this->component->getComponent($attributeCode)); - } -} diff --git a/app/code/Magento/Customer/Ui/Component/Listing/Columns.php b/app/code/Magento/Customer/Ui/Component/Listing/Columns.php index 36b2f42d3b020710b6fa2e653a6778e0926fa36f..bcb43fb4bfc2123dd62678e27fee5127c0fcd361 100644 --- a/app/code/Magento/Customer/Ui/Component/Listing/Columns.php +++ b/app/code/Magento/Customer/Ui/Component/Listing/Columns.php @@ -23,6 +23,17 @@ class Columns extends \Magento\Ui\Component\Listing\Columns /** @var InlineEditUpdater */ protected $inlineEditUpdater; + /** + * @var array + */ + protected $filterMap = [ + 'default' => 'text', + 'select' => 'select', + 'boolean' => 'select', + 'multiselect' => 'select', + 'date' => 'dateRange', + ]; + /** * @param ContextInterface $context * @param ColumnFactory $columnFactory @@ -103,6 +114,9 @@ class Columns extends \Magento\Ui\Component\Listing\Columns public function addColumn(array $attributeData, $columnName) { $config['sortOrder'] = ++$this->columnSortOrder; + if ($attributeData[AttributeMetadata::IS_FILTERABLE_IN_GRID]) { + $config['filter'] = $this->getFilterType($attributeData[AttributeMetadata::FRONTEND_INPUT]); + } $column = $this->columnFactory->create($attributeData, $columnName, $this->getContext(), $config); $column->prepare(); $this->addComponent($attributeData[AttributeMetadata::ATTRIBUTE_CODE], $column); @@ -128,6 +142,9 @@ class Columns extends \Magento\Ui\Component\Listing\Columns 'visible' => (bool)$attributeData[AttributeMetadata::IS_VISIBLE_IN_GRID] ] ); + if ($attributeData[AttributeMetadata::IS_FILTERABLE_IN_GRID]) { + $config['filter'] = $this->getFilterType($attributeData[AttributeMetadata::FRONTEND_INPUT]); + } $component->setData('config', $config); } } else { @@ -168,4 +185,15 @@ class Columns extends \Magento\Ui\Component\Listing\Columns ); } } + + /** + * Retrieve filter type by $frontendInput + * + * @param string $frontendInput + * @return string + */ + protected function getFilterType($frontendInput) + { + return isset($this->filterMap[$frontendInput]) ? $this->filterMap[$frontendInput] : $this->filterMap['default']; + } } diff --git a/app/code/Magento/Customer/Ui/Component/Listing/Filters.php b/app/code/Magento/Customer/Ui/Component/Listing/Filters.php deleted file mode 100644 index 2e0816d079729756e70f826148fcb86c66fd3835..0000000000000000000000000000000000000000 --- a/app/code/Magento/Customer/Ui/Component/Listing/Filters.php +++ /dev/null @@ -1,55 +0,0 @@ -<?php -/** - * Copyright © 2015 Magento. All rights reserved. - * See COPYING.txt for license details. - */ -namespace Magento\Customer\Ui\Component\Listing; - -use Magento\Customer\Api\Data\AttributeMetadataInterface as AttributeMetadata; - -class Filters extends \Magento\Ui\Component\Filters -{ - /** - * @param \Magento\Framework\View\Element\UiComponent\ContextInterface $context - * @param \Magento\Customer\Ui\Component\FilterFactory $filterFactory - * @param AttributeRepository $attributeRepository - * @param array $components - * @param array $data - */ - public function __construct( - \Magento\Framework\View\Element\UiComponent\ContextInterface $context, - \Magento\Customer\Ui\Component\FilterFactory $filterFactory, - \Magento\Customer\Ui\Component\Listing\AttributeRepository $attributeRepository, - array $components = [], - array $data = [] - ) { - parent::__construct($context, $components, $data); - $this->filterFactory = $filterFactory; - $this->attributeRepository = $attributeRepository; - } - - /** - * {@inheritdoc} - */ - public function prepare() - { - /** @var \Magento\Customer\Model\Attribute $attribute */ - foreach ($this->attributeRepository->getList() as $attributeCode => $attributeData) { - if (!isset($this->components[$attributeCode])) { - if (!$attributeData[AttributeMetadata::BACKEND_TYPE] != 'static' - && $attributeData[AttributeMetadata::IS_USED_IN_GRID] - && $attributeData[AttributeMetadata::IS_FILTERABLE_IN_GRID] - ) { - $filter = $this->filterFactory->create($attributeData, $this->getContext()); - $filter->prepare(); - $this->addComponent($attributeCode, $filter); - } - } elseif ($attributeData[AttributeMetadata::IS_USED_IN_GRID] - && !$attributeData[AttributeMetadata::IS_FILTERABLE_IN_GRID] - ) { - unset($this->components[$attributeCode]); - } - } - parent::prepare(); - } -} diff --git a/app/code/Magento/Customer/etc/di.xml b/app/code/Magento/Customer/etc/di.xml index 384841938d0338355c6be1a72c4923555ecfeec7..0b8450f053a0786ca82977d55e6b9510140fc0fe 100644 --- a/app/code/Magento/Customer/etc/di.xml +++ b/app/code/Magento/Customer/etc/di.xml @@ -139,19 +139,19 @@ </argument> </arguments> </type> - <virtualType name="EavVersionControlSnapshot" type="Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot"> + <virtualType name="EavVersionControlSnapshot" type="Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot"> <arguments> <argument name="metadata" xsi:type="object">Magento\Eav\Model\Entity\VersionControl\Metadata</argument> </arguments> </virtualType> - <virtualType name="CustomerRelationsComposite" type="Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite"> + <virtualType name="CustomerRelationsComposite" type="Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite"> <arguments> <argument name="relationProcessors" xsi:type="array"> <item name="default" xsi:type="object">Magento\Customer\Model\ResourceModel\Customer\Relation</item> </argument> </arguments> </virtualType> - <virtualType name="CustomerAddressRelationsComposite" type="Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite"> + <virtualType name="CustomerAddressRelationsComposite" type="Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite"> <arguments> <argument name="relationProcessors" xsi:type="array"> <item name="default" xsi:type="object">Magento\Customer\Model\ResourceModel\Address\Relation</item> diff --git a/app/code/Magento/Customer/etc/events.xml b/app/code/Magento/Customer/etc/events.xml index c4e0f72765f836bef4422d59fd51f2fd73e13d0a..5486118de8d1901b5d6b422f6790dc04c885eaaf 100644 --- a/app/code/Magento/Customer/etc/events.xml +++ b/app/code/Magento/Customer/etc/events.xml @@ -7,12 +7,12 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="customer_address_save_before"> - <observer name="customer_address_before_save_viv_observer" instance="Magento\Customer\Observer\BeforeAddressSaveObserver" method="execute" /> + <observer name="customer_address_before_save_viv_observer" instance="Magento\Customer\Observer\BeforeAddressSaveObserver" /> </event> <event name="customer_address_save_after"> - <observer name="customer_addres_after_save_viv_observer" instance="Magento\Customer\Observer\AfterAddressSaveObserver" method="execute" /> + <observer name="customer_addres_after_save_viv_observer" instance="Magento\Customer\Observer\AfterAddressSaveObserver" /> </event> <event name="sales_quote_save_after"> - <observer name="customer_visitor" instance="Magento\Customer\Observer\Visitor\BindQuoteCreateObserver" method="execute" /> + <observer name="customer_visitor" instance="Magento\Customer\Observer\Visitor\BindQuoteCreateObserver" /> </event> </config> diff --git a/app/code/Magento/Customer/etc/frontend/events.xml b/app/code/Magento/Customer/etc/frontend/events.xml index d82220f964d756d3791d4bd3115e55e71e2f3443..7bd2182dd361ece1f93623fbfbd90825750ff9ba 100644 --- a/app/code/Magento/Customer/etc/frontend/events.xml +++ b/app/code/Magento/Customer/etc/frontend/events.xml @@ -7,25 +7,25 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="controller_action_predispatch"> - <observer name="customer_visitor" instance="Magento\Customer\Observer\Visitor\InitByRequestObserver" method="execute" /> + <observer name="customer_visitor" instance="Magento\Customer\Observer\Visitor\InitByRequestObserver" /> </event> <event name="controller_action_postdispatch"> - <observer name="customer_visitor" instance="Magento\Customer\Observer\Visitor\SaveByRequestObserver" method="execute" /> + <observer name="customer_visitor" instance="Magento\Customer\Observer\Visitor\SaveByRequestObserver" /> </event> <event name="customer_data_object_login"> - <observer name="customer_visitor" instance="Magento\Customer\Observer\Visitor\BindCustomerLoginObserver" method="execute" /> + <observer name="customer_visitor" instance="Magento\Customer\Observer\Visitor\BindCustomerLoginObserver" /> </event> <event name="customer_logout"> - <observer name="customer_visitor" instance="Magento\Customer\Observer\Visitor\BindCustomerLogoutObserver" method="execute" /> - <observer name="customer_log_logout" instance="Magento\Customer\Observer\LogLastLogoutAtObserver" method="execute" /> + <observer name="customer_visitor" instance="Magento\Customer\Observer\Visitor\BindCustomerLogoutObserver" /> + <observer name="customer_log_logout" instance="Magento\Customer\Observer\LogLastLogoutAtObserver" /> </event> <event name="checkout_quote_destroy"> - <observer name="customer_visitor" instance="Magento\Customer\Observer\Visitor\BindQuoteDestroyObserver" method="execute" /> + <observer name="customer_visitor" instance="Magento\Customer\Observer\Visitor\BindQuoteDestroyObserver" /> </event> <event name="customer_login"> - <observer name="customer_log_login" instance="Magento\Customer\Observer\LogLastLoginAtObserver" method="execute" /> + <observer name="customer_log_login" instance="Magento\Customer\Observer\LogLastLoginAtObserver" /> </event> <event name="customer_customer_authenticated"> - <observer name="customer_password" instance="Magento\Customer\Observer\UpgradeCustomerPasswordObserver" method="execute" /> + <observer name="customer_password" instance="Magento\Customer\Observer\UpgradeCustomerPasswordObserver" /> </event> </config> diff --git a/app/code/Magento/Customer/etc/module.xml b/app/code/Magento/Customer/etc/module.xml index a2b9b1eacfe848a8c9f392d5c2cdf09da8062161..20c352f8c538ccad9400b5a01de968b3fff7101d 100644 --- a/app/code/Magento/Customer/etc/module.xml +++ b/app/code/Magento/Customer/etc/module.xml @@ -6,7 +6,7 @@ */ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"> - <module name="Magento_Customer" setup_version="2.0.5"> + <module name="Magento_Customer" setup_version="2.0.6"> <sequence> <module name="Magento_Eav"/> <module name="Magento_Directory"/> diff --git a/app/code/Magento/Customer/view/adminhtml/templates/tab/cart.phtml b/app/code/Magento/Customer/view/adminhtml/templates/tab/cart.phtml index 82cd7c7066718720a42ff7239656bb3956f838bb..f7d93b699c1af76a20db9c3aa4f522d07701c838 100644 --- a/app/code/Magento/Customer/view/adminhtml/templates/tab/cart.phtml +++ b/app/code/Magento/Customer/view/adminhtml/templates/tab/cart.phtml @@ -24,8 +24,10 @@ ?> <script> require([ + "Magento_Ui/js/modal/alert", + "Magento_Ui/js/modal/confirm", "Magento_Catalog/catalog/product/composite/configure" -], function(){ +], function(alert, confirm){ <?php /* @escapeNotVerified */ echo $block->getJsObjectName() ?>cartControl = { reload: function (params) { @@ -51,17 +53,24 @@ require([ }, removeItem: function (itemId) { + var self = this; + if (!itemId) { - alert('<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('No item specified.')) ?>'); - return false; - } - if(!confirm('<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('Are you sure you want to remove this item?')) ?>')) { + alert({ + content: '<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('No item specified.')) ?>' + }); + return false; } - this.reload({'delete':itemId}); - - return false; + confirm({ + content: '<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('Are you sure you want to remove this item?')) ?>', + actions: { + confirm: function(){ + self.reload({'delete':itemId}); + } + } + }); } }; diff --git a/app/code/Magento/Customer/view/adminhtml/ui_component/customer_listing.xml b/app/code/Magento/Customer/view/adminhtml/ui_component/customer_listing.xml index 44af0c2764ffa164c440fcb38c6c6efa701b3971..5c01b2cb6c7b8aced92bd6ddd731325c7abcc3bd 100644 --- a/app/code/Magento/Customer/view/adminhtml/ui_component/customer_listing.xml +++ b/app/code/Magento/Customer/view/adminhtml/ui_component/customer_listing.xml @@ -48,17 +48,13 @@ <bookmark name="bookmarks"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/controls/bookmarks/bookmarks</item> - <item name="displayArea" xsi:type="string">dataGridActions</item> <item name="storageConfig" xsi:type="array"> - <item name="saveUrl" xsi:type="url" path="mui/bookmark/save"/> - <item name="deleteUrl" xsi:type="url" path="mui/bookmark/delete"/> <item name="namespace" xsi:type="string">customer_listing</item> </item> </item> </argument> </bookmark> - <container name="columns_controls"> + <component name="columns_controls"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> <item name="columnsData" xsi:type="array"> @@ -68,7 +64,7 @@ <item name="displayArea" xsi:type="string">dataGridActions</item> </item> </argument> - </container> + </component> <exportButton name="export_button"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> @@ -79,8 +75,6 @@ <filterSearch name="fulltext"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/search/search</item> - <item name="displayArea" xsi:type="string">dataGridFilters</item> <item name="provider" xsi:type="string">customer_listing.customer_listing_data_source</item> <item name="chipsProvider" xsi:type="string">customer_listing.customer_listing.listing_top.listing_filters_chips</item> <item name="storageConfig" xsi:type="array"> @@ -90,11 +84,10 @@ </item> </argument> </filterSearch> - <filters name="listing_filters" class="Magento\Customer\Ui\Component\Listing\Filters"> + <filters name="listing_filters"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> - <item name="displayArea" xsi:type="string">dataGridFilters</item> - <item name="dataScope" xsi:type="string">filters</item> + <item name="columnsProvider" xsi:type="string">customer_listing.customer_listing.customer_columns</item> <item name="storageConfig" xsi:type="array"> <item name="provider" xsi:type="string">customer_listing.customer_listing.listing_top.bookmarks</item> <item name="namespace" xsi:type="string">current.filters</item> @@ -102,154 +95,17 @@ <item name="childDefaults" xsi:type="array"> <item name="provider" xsi:type="string">customer_listing.customer_listing.listing_top.listing_filters</item> <item name="imports" xsi:type="array"> - <item name="visible" xsi:type="string">customer_listing.customer_listing.listing_top.bookmarks:current.columns.${ $.index }.visible</item> + <item name="visible" xsi:type="string">customer_listing.customer_listing.customer_columns.${ $.index }:visible</item> </item> </item> </item> </argument> - <filterRange name="entity_id"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">entity_id</item> - <item name="label" xsi:type="string" translate="true">ID</item> - <item name="childDefaults" xsi:type="array"> - <item name="provider" xsi:type="string">customer_listing.customer_listing.listing_top.listing_filters</item> - </item> - </item> - </argument> - <filterInput name="from"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">from</item> - <item name="label" xsi:type="string" translate="true">from</item> - <item name="placeholder" xsi:type="string" translate="true">From</item> - </item> - </argument> - </filterInput> - <filterInput name="to"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">to</item> - <item name="label" xsi:type="string" translate="true">to</item> - <item name="placeholder" xsi:type="string" translate="true">To</item> - </item> - </argument> - </filterInput> - </filterRange> - <filterInput name="name"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">name</item> - <item name="label" xsi:type="string" translate="true">Name</item> - </item> - </argument> - </filterInput> - <filterInput name="email"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">email</item> - <item name="label" xsi:type="string" translate="true">Email</item> - </item> - </argument> - </filterInput> - <filterSelect name="group_id"> - <argument name="optionsProvider" xsi:type="configurableObject"> - <argument name="class" xsi:type="string">Magento\Customer\Model\Config\Source\Group\Multiselect</argument> - </argument> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">group_id</item> - <item name="label" xsi:type="string" translate="true">Group</item> - <item name="caption" xsi:type="string" translate="true">Select...</item> - </item> - </argument> - </filterSelect> - <filterInput name="billing_telephone"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">billing_telephone</item> - <item name="label" xsi:type="string" translate="true">Phone</item> - </item> - </argument> - </filterInput> - <filterInput name="billing_postcode"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">billing_postcode</item> - <item name="label" xsi:type="string" translate="true">ZIP</item> - </item> - </argument> - </filterInput> - <filterSelect name="billing_country_id"> - <argument name="optionsProvider" xsi:type="configurableObject"> - <argument name="class" xsi:type="string">Magento\Directory\Model\ResourceModel\Country\Collection</argument> - </argument> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">billing_country_id</item> - <item name="label" xsi:type="string" translate="true">Country</item> - <item name="caption" xsi:type="string" translate="true">Select...</item> - </item> - </argument> - </filterSelect> - <filterInput name="billing_region"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">billing_region</item> - <item name="label" xsi:type="string" translate="true">State/Province</item> - </item> - </argument> - </filterInput> - <filterRange name="created_at" class="Magento\Ui\Component\Filters\Type\DateRange"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">created_at</item> - <item name="label" xsi:type="string" translate="true">Customer Since</item> - <item name="childDefaults" xsi:type="array"> - <item name="provider" xsi:type="string">customer_listing.customer_listing.listing_top.listing_filters</item> - </item> - </item> - </argument> - <filterDate name="from"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">from</item> - <item name="label" xsi:type="string" translate="true">From</item> - <item name="placeholder" xsi:type="string" translate="true">From</item> - <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item> - </item> - </argument> - </filterDate> - <filterDate name="to"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">to</item> - <item name="label" xsi:type="string" translate="true">To</item> - <item name="placeholder" xsi:type="string" translate="true">To</item> - <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item> - </item> - </argument> - </filterDate> - </filterRange> - <filterSelect name="website_id"> - <argument name="optionsProvider" xsi:type="configurableObject"> - <argument name="class" xsi:type="string">Magento\Config\Model\Config\Source\Website</argument> - </argument> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">website_id</item> - <item name="label" xsi:type="string" translate="true">Website</item> - <item name="caption" xsi:type="string" translate="true">Select...</item> - </item> - </argument> - </filterSelect> </filters> <massaction name="listing_massaction"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> <item name="selectProvider" xsi:type="string">customer_listing.customer_listing.customer_columns.ids</item> <item name="component" xsi:type="string">Magento_Ui/js/grid/tree-massactions</item> - <item name="displayArea" xsi:type="string">bottom</item> <item name="indexField" xsi:type="string">entity_id</item> </item> </argument> @@ -328,7 +184,6 @@ <item name="namespace" xsi:type="string">current.paging</item> </item> <item name="selectProvider" xsi:type="string">customer_listing.customer_listing.customer_columns.ids</item> - <item name="displayArea" xsi:type="string">bottom</item> </item> </argument> </paging> @@ -345,8 +200,7 @@ <item name="enabled" xsi:type="boolean">true</item> <item name="indexField" xsi:type="string">entity_id</item> <item name="clientConfig" xsi:type="array"> - <item name="saveUrl" xsi:type="string">customer/index/inlineEdit</item> - <item name="validateUrl" xsi:type="string">/path/to</item> + <item name="saveUrl" xsi:type="url" path="customer/index/inlineEdit"/> <item name="validateBeforeSave" xsi:type="boolean">false</item> </item> </item> @@ -359,7 +213,6 @@ <item name="1" xsi:type="boolean">true</item> </item> </item> - <item name="controlVisibility" xsi:type="boolean">true</item> <item name="storageConfig" xsi:type="array"> <item name="provider" xsi:type="string">customer_listing.customer_listing.listing_top.bookmarks</item> <item name="root" xsi:type="string">columns.${ $.index }</item> @@ -368,28 +221,19 @@ </item> </item> </argument> - <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column"> + <selectionsColumn name="ids"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item> - </item> <item name="config" xsi:type="array"> <item name="indexField" xsi:type="string">entity_id</item> - <item name="controlVisibility" xsi:type="boolean">false</item> <item name="sortOrder" xsi:type="number">10</item> </item> </argument> - </column> + </selectionsColumn> <column name="entity_id"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> - <item name="dataType" xsi:type="string">text</item> + <item name="filter" xsi:type="string">textRange</item> <item name="sorting" xsi:type="string">asc</item> - <item name="sortable" xsi:type="string">true</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">ID</item> <item name="sortOrder" xsi:type="number">20</item> </item> @@ -397,13 +241,8 @@ </column> <column name="name"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> - <item name="sortable" xsi:type="string">true</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="filter" xsi:type="string">text</item> <item name="label" xsi:type="string" translate="true">Name</item> <item name="sortOrder" xsi:type="number">30</item> </item> @@ -411,14 +250,9 @@ </column> <column name="email"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">text</item> <item name="editor" xsi:type="string">text</item> - <item name="sortable" xsi:type="string">true</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Email</item> <item name="sortOrder" xsi:type="number">40</item> </item> @@ -426,16 +260,11 @@ </column> <column name="group_id"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> - </item> <item name="config" xsi:type="array"> - <item name="editor" xsi:type="array"> - <item name="editorType" xsi:type="string">select</item> - </item> - <item name="sortable" xsi:type="string">true</item> + <item name="filter" xsi:type="string">select</item> + <item name="editor" xsi:type="string">select</item> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> <item name="dataType" xsi:type="string">select</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Group</item> <item name="sortOrder" xsi:type="number">50</item> </item> @@ -443,14 +272,9 @@ </column> <column name="billing_telephone"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">text</item> <item name="editor" xsi:type="string">text</item> - <item name="sortable" xsi:type="string">true</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Phone</item> <item name="sortOrder" xsi:type="number">60</item> </item> @@ -458,14 +282,9 @@ </column> <column name="billing_postcode"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">text</item> <item name="editor" xsi:type="string">text</item> - <item name="sortable" xsi:type="string">true</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">ZIP</item> <item name="sortOrder" xsi:type="number">70</item> </item> @@ -473,12 +292,10 @@ </column> <column name="billing_country_id"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">select</item> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> <item name="dataType" xsi:type="string">select</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Country</item> <item name="sortOrder" xsi:type="number">80</item> </item> @@ -486,13 +303,8 @@ </column> <column name="billing_region"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> - <item name="sortable" xsi:type="string">true</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="filter" xsi:type="string">text</item> <item name="label" xsi:type="string" translate="true">State/Province</item> <item name="sortOrder" xsi:type="number">90</item> </item> @@ -500,13 +312,9 @@ </column> <column name="created_at"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item> - </item> <item name="config" xsi:type="array"> - <item name="sortable" xsi:type="string">true</item> + <item name="filter" xsi:type="string">dateRange</item> <item name="dataType" xsi:type="string">date</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Customer Since</item> <item name="sortOrder" xsi:type="number">100</item> </item> @@ -514,30 +322,23 @@ </column> <column name="website_id"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> - </item> <item name="config" xsi:type="array"> - <item name="editor" xsi:type="array"> - <item name="editorType" xsi:type="string">select</item> - </item> + <item name="filter" xsi:type="string">select</item> + <item name="editor" xsi:type="string">select</item> <item name="dataType" xsi:type="string">select</item> - <item name="align" xsi:type="string">left</item> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> <item name="label" xsi:type="string" translate="true">Web Site</item> <item name="sortOrder" xsi:type="number">110</item> </item> </argument> </column> - <column name="last_visit_at" > + <column name="last_visit_at"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item> - </item> <item name="config" xsi:type="array"> - <item name="sortable" xsi:type="string">true</item> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item> + <item name="filter" xsi:type="string">dateRange</item> <item name="visible" xsi:type="boolean">false</item> <item name="dataType" xsi:type="string">date</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Last Logged In</item> <item name="sortOrder" xsi:type="number">120</item> </item> @@ -545,14 +346,8 @@ </column> <column name="confirmation"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> - <item name="sortable" xsi:type="string">true</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Confirmed email</item> <item name="sortOrder" xsi:type="number">130</item> </item> @@ -560,14 +355,8 @@ </column> <column name="created_in"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> - <item name="sortable" xsi:type="string">true</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Account Created in</item> <item name="sortOrder" xsi:type="number">140</item> </item> @@ -575,13 +364,8 @@ </column> <column name="billing_full"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Billing Address</item> <item name="sortOrder" xsi:type="number">150</item> </item> @@ -589,13 +373,8 @@ </column> <column name="shipping_full"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Shipping Address</item> <item name="sortOrder" xsi:type="number">160</item> </item> @@ -603,31 +382,22 @@ </column> <column name="dob"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item> - </item> <item name="config" xsi:type="array"> - <item name="editor" xsi:type="string">date</item> - <item name="sortable" xsi:type="string">true</item> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item> <item name="visible" xsi:type="boolean">false</item> + <item name="filter" xsi:type="string">dateRange</item> <item name="dataType" xsi:type="string">date</item> - <item name="align" xsi:type="string">left</item> - <item name="label" xsi:type="string" translate="true">Date Of Birth</item> + <item name="label" xsi:type="string" translate="true">Date of Birth</item> <item name="sortOrder" xsi:type="number">170</item> </item> </argument> </column> <column name="taxvat"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">text</item> <item name="editor" xsi:type="string">text</item> - <item name="sortable" xsi:type="string">true</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Tax VAT Number</item> <item name="sortOrder" xsi:type="number">180</item> </item> @@ -635,14 +405,12 @@ </column> <column name="gender"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> - </item> <item name="config" xsi:type="array"> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> + <item name="filter" xsi:type="string">select</item> <item name="editor" xsi:type="string">select</item> <item name="visible" xsi:type="boolean">false</item> <item name="dataType" xsi:type="string">select</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Gender</item> <item name="sortOrder" xsi:type="number">190</item> </item> @@ -650,13 +418,8 @@ </column> <column name="billing_street"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Street Address</item> <item name="sortOrder" xsi:type="number">200</item> </item> @@ -664,15 +427,10 @@ </column> <column name="billing_city"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">text</item> <item name="editor" xsi:type="string">text</item> - <item name="sortable" xsi:type="string">true</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">City</item> <item name="sortOrder" xsi:type="number">210</item> </item> @@ -680,15 +438,10 @@ </column> <column name="billing_fax"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">text</item> <item name="editor" xsi:type="string">text</item> - <item name="sortable" xsi:type="string">true</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Fax</item> <item name="sortOrder" xsi:type="number">220</item> </item> @@ -696,15 +449,10 @@ </column> <column name="billing_vat_id"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">text</item> <item name="editor" xsi:type="string">text</item> - <item name="sortable" xsi:type="string">true</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">VAT Number</item> <item name="sortOrder" xsi:type="number">230</item> </item> @@ -712,15 +460,10 @@ </column> <column name="billing_company"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">text</item> <item name="editor" xsi:type="string">text</item> - <item name="sortable" xsi:type="string">true</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Company</item> <item name="sortOrder" xsi:type="number">240</item> </item> @@ -728,15 +471,10 @@ </column> <column name="billing_firstname"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">text</item> <item name="editor" xsi:type="string">text</item> - <item name="sortable" xsi:type="string">true</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Billing Firstname</item> <item name="sortOrder" xsi:type="number">250</item> </item> @@ -744,33 +482,21 @@ </column> <column name="billing_lastname"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">text</item> <item name="editor" xsi:type="string">text</item> - <item name="sortable" xsi:type="string">true</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Billing Lastname</item> <item name="sortOrder" xsi:type="number">260</item> </item> </argument> </column> - <column name="actions" class="Magento\Customer\Ui\Component\Listing\Column\Actions"> + <actionsColumn name="actions" class="Magento\Customer\Ui\Component\Listing\Column\Actions"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> - <item name="draggable" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">actions</item> <item name="indexField" xsi:type="string">entity_id</item> - <item name="align" xsi:type="string">left</item> - <item name="label" xsi:type="string" translate="true">Action</item> - <item name="data_type" xsi:type="string">actions</item> - <item name="filterable" xsi:type="boolean">false</item> - <item name="sortable" xsi:type="boolean">false</item> </item> </argument> - </column> + </actionsColumn> </columns> </listing> diff --git a/app/code/Magento/Customer/view/adminhtml/ui_component/customer_online_grid.xml b/app/code/Magento/Customer/view/adminhtml/ui_component/customer_online_grid.xml index 4c7b5ed565fb1c03faebb1afcdde2f34b2a8c49c..c864f2ac240f44a160f0420ce22dcbfaee91081f 100644 --- a/app/code/Magento/Customer/view/adminhtml/ui_component/customer_online_grid.xml +++ b/app/code/Magento/Customer/view/adminhtml/ui_component/customer_online_grid.xml @@ -40,17 +40,13 @@ <bookmark name="bookmarks"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/controls/bookmarks/bookmarks</item> - <item name="displayArea" xsi:type="string">dataGridActions</item> <item name="storageConfig" xsi:type="array"> - <item name="saveUrl" xsi:type="url" path="mui/bookmark/save"/> - <item name="deleteUrl" xsi:type="url" path="mui/bookmark/delete"/> <item name="namespace" xsi:type="string">customer_online_grid</item> </item> </item> </argument> </bookmark> - <container name="columns_controls"> + <component name="columns_controls"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> <item name="columnsData" xsi:type="array"> @@ -60,12 +56,11 @@ <item name="displayArea" xsi:type="string">dataGridActions</item> </item> </argument> - </container> + </component> <filters name="listing_filters"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> - <item name="displayArea" xsi:type="string">dataGridFilters</item> - <item name="dataScope" xsi:type="string">filters</item> + <item name="columnsProvider" xsi:type="string">customer_online_grid.customer_online_grid.customer_online_columns</item> <item name="storageConfig" xsi:type="array"> <item name="provider" xsi:type="string">customer_online_grid.customer_online_grid.listing_top.bookmarks</item> <item name="namespace" xsi:type="string">current.filters</item> @@ -73,107 +68,11 @@ <item name="childDefaults" xsi:type="array"> <item name="provider" xsi:type="string">customer_online_grid.customer_online_grid.listing_top.listing_filters</item> <item name="imports" xsi:type="array"> - <item name="visible" xsi:type="string">customer_online_grid.customer_online_grid.listing_top.bookmarks:current.columns.${ $.index }.visible</item> + <item name="visible" xsi:type="string">customer_online_grid.customer_online_grid.customer_online_columns.${ $.index }:visible</item> </item> </item> </item> </argument> - <filterRange name="customer_id"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">customer_id</item> - <item name="label" xsi:type="string" translate="true">ID</item> - <item name="childDefaults" xsi:type="array"> - <item name="provider" xsi:type="string">customer_online_grid.customer_online_grid.listing_top.listing_filters</item> - </item> - </item> - </argument> - <filterInput name="from"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">from</item> - <item name="label" xsi:type="string" translate="true">From</item> - <item name="placeholder" xsi:type="string" translate="true">From</item> - </item> - </argument> - </filterInput> - <filterInput name="to"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">to</item> - <item name="label" xsi:type="string" translate="true">To</item> - <item name="placeholder" xsi:type="string" translate="true">To</item> - </item> - </argument> - </filterInput> - </filterRange> - <filterInput name="firstname"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">firstname</item> - <item name="label" xsi:type="string" translate="true">First Name</item> - </item> - </argument> - </filterInput> - <filterInput name="lastname"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">lastname</item> - <item name="label" xsi:type="string" translate="true">Last Name</item> - </item> - </argument> - </filterInput> - <filterInput name="email"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">email</item> - <item name="label" xsi:type="string" translate="true">Email</item> - </item> - </argument> - </filterInput> - <filterRange name="last_visit_at" class="Magento\Ui\Component\Filters\Type\DateRange"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">last_visit_at</item> - <item name="label" xsi:type="string" translate="true">Last Activity</item> - <item name="childDefaults" xsi:type="array"> - <item name="provider" xsi:type="string">customer_online_grid.customer_online_grid.listing_top.listing_filters</item> - </item> - </item> - </argument> - <filterDate name="from"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">from</item> - <item name="label" xsi:type="string" translate="true">From</item> - <item name="placeholder" xsi:type="string" translate="true">From</item> - <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item> - </item> - </argument> - </filterDate> - <filterDate name="to"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">to</item> - <item name="label" xsi:type="string" translate="true">To</item> - <item name="placeholder" xsi:type="string" translate="true">To</item> - <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item> - </item> - </argument> - </filterDate> - </filterRange> - <filterSelect name="visitor_type"> - <argument name="optionsProvider" xsi:type="configurableObject"> - <argument name="class" xsi:type="string">Magento\Customer\Ui\Component\Listing\Column\Online\Type\Options</argument> - </argument> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="caption" xsi:type="string" translate="true">Select...</item> - <item name="dataScope" xsi:type="string">visitor_type</item> - <item name="label" xsi:type="string" translate="true">Type</item> - </item> - </argument> - </filterSelect> </filters> <paging name="listing_paging"> <argument name="data" xsi:type="array"> @@ -183,7 +82,6 @@ <item name="namespace" xsi:type="string">current.paging</item> </item> <item name="selectProvider" xsi:type="string">customer_online_grid.customer_online_grid.customer_online_columns.ids</item> - <item name="displayArea" xsi:type="string">bottom</item> </item> </argument> </paging> @@ -196,9 +94,6 @@ <item name="namespace" xsi:type="string">current</item> </item> <item name="childDefaults" xsi:type="array"> - <item name="controlVisibility" xsi:type="boolean">true</item> - <item name="actionField" xsi:type="string">actions</item> - <item name="clickAction" xsi:type="string">view</item> <item name="storageConfig" xsi:type="array"> <item name="provider" xsi:type="string">customer_online_grid.customer_online_grid.listing_top.bookmarks</item> <item name="root" xsi:type="string">columns.${ $.index }</item> @@ -207,125 +102,80 @@ </item> </item> </argument> - <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column"> - <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item> - </item> - <item name="config" xsi:type="array"> - <item name="draggable" xsi:type="boolean">false</item> - <item name="indexField" xsi:type="string">visitor_id</item> - <item name="controlVisibility" xsi:type="boolean">false</item> - </item> - </argument> - </column> <column name="customer_id"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="filter" xsi:type="string">textRange</item> + <item name="sorting" xsi:type="string">asc</item> <item name="label" xsi:type="string" translate="true">ID</item> </item> </argument> </column> <column name="firstname"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="filter" xsi:type="string">text</item> <item name="label" xsi:type="string" translate="true">First Name</item> </item> </argument> </column> <column name="lastname"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="filter" xsi:type="string">text</item> <item name="label" xsi:type="string" translate="true">Last Name</item> </item> </argument> </column> <column name="email"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="filter" xsi:type="string">text</item> <item name="label" xsi:type="string" translate="true">Email</item> </item> </argument> </column> - <!--<column name="remote_addr">--> - <!--<argument name="data" xsi:type="array">--> - <!--<item name="js_config" xsi:type="array">--> - <!--<item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>--> - <!--</item>--> - <!--<item name="config" xsi:type="array">--> - <!--<item name="dataType" xsi:type="string">text</item>--> - <!--<item name="align" xsi:type="string">left</item>--> - <!--<item name="label" xsi:type="string" translate="true">IP Address</item>--> - <!--</item>--> - <!--</argument>--> - <!--</column>--> - <column name="first_visit_at"> + <!-- <column name="remote_addr"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item> + <item name="config" xsi:type="array"> + <item name="label" xsi:type="string" translate="true">IP Address</item> </item> + </argument> + </column> --> + <column name="first_visit_at"> + <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> <item name="dataType" xsi:type="string">date</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Session Start Time</item> </item> </argument> </column> <column name="last_visit_at"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">dateRange</item> <item name="dataType" xsi:type="string">date</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Last Activity</item> </item> </argument> </column> - <column name="visitor_type" class="Magento\Customer\Ui\Component\Listing\Column\Online\Type"> + <column name="visitor_type"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> - </item> + <item name="options" xsi:type="object">Magento\Customer\Ui\Component\Listing\Column\Online\Type\Options</item> <item name="config" xsi:type="array"> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="filter" xsi:type="string">select</item> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> + <item name="dataType" xsi:type="string">select</item> <item name="label" xsi:type="string" translate="true">Type</item> </item> </argument> </column> - <!--<column name="last_url">--> - <!--<argument name="data" xsi:type="array">--> - <!--<item name="js_config" xsi:type="array">--> - <!--<item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>--> - <!--</item>--> - <!--<item name="config" xsi:type="array">--> - <!--<item name="dataType" xsi:type="string">text</item>--> - <!--<item name="align" xsi:type="string">left</item>--> - <!--<item name="label" xsi:type="string" translate="true">Last URL</item>--> - <!--</item>--> - <!--</argument>--> - <!--</column>--> + <!-- <column name="last_url"> + <argument name="data" xsi:type="array"> + <item name="config" xsi:type="array"> + <item name="label" xsi:type="string" translate="true">Last URL</item> + </item> + </argument> + </column> --> </columns> </listing> diff --git a/app/code/Magento/Customer/view/adminhtml/web/edit/tab/js/addresses.js b/app/code/Magento/Customer/view/adminhtml/web/edit/tab/js/addresses.js index 7067fbe2e153bed002acf81ced41a5daba3fefe0..cbaaafb86bcdf51b31d9f8f93e389f9c09ac346d 100644 --- a/app/code/Magento/Customer/view/adminhtml/web/edit/tab/js/addresses.js +++ b/app/code/Magento/Customer/view/adminhtml/web/edit/tab/js/addresses.js @@ -5,9 +5,10 @@ define([ 'jquery', 'mage/template', + 'Magento_Ui/js/modal/confirm', 'jquery/ui', 'mage/backend/tabs' -], function ($, mageTemplate) { +], function ($, mageTemplate, confirm) { 'use strict'; $.widget('mage.addressTabs', $.mage.tabs, { @@ -136,9 +137,16 @@ define([ * @private */ _deleteItemPrompt: function (event, data) { - if (window.confirm(this.options.deleteConfirmPrompt)) { - this._deleteItem(data.item); - } + var self = this; + + confirm({ + content: this.options.deleteConfirmPrompt, + actions: { + confirm: function () { + self._deleteItem(data.item); + } + } + }); }, /** diff --git a/app/code/Magento/Customer/view/base/ui_component/customer_form.xml b/app/code/Magento/Customer/view/base/ui_component/customer_form.xml index b7646d9b11f48af4e8f40c5154be6897150f9877..0fa2ab59bcc75e9d49a6c72c7475adafefca3332 100644 --- a/app/code/Magento/Customer/view/base/ui_component/customer_form.xml +++ b/app/code/Magento/Customer/view/base/ui_component/customer_form.xml @@ -120,10 +120,8 @@ <container name="container_group"> <argument name="data" xsi:type="array"> <item name="type" xsi:type="string">group</item> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/form/components/group</item> - </item> <item name="config" xsi:type="array"> + <item name="component" xsi:type="string">Magento_Ui/js/form/components/group</item> <item name="label" xsi:type="string" translate="true">Group</item> <item name="required" xsi:type="boolean">true</item> <item name="dataScope" xsi:type="boolean">false</item> @@ -351,10 +349,8 @@ <container name="street_container"> <argument name="data" xsi:type="array"> <item name="type" xsi:type="string">group</item> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/form/components/group</item> - </item> <item name="config" xsi:type="array"> + <item name="component" xsi:type="string">Magento_Ui/js/form/components/group</item> <item name="label" xsi:type="string" translate="true">Street Address</item> <item name="required" xsi:type="boolean">true</item> <item name="dataScope" xsi:type="string">street</item> diff --git a/app/code/Magento/Customer/view/frontend/templates/js/customer-data.phtml b/app/code/Magento/Customer/view/frontend/templates/js/customer-data.phtml index 60441eb039d7267340a22e87e5d18e4dcbd2bb6c..b34e7c871d3bf455e5295f3c8f80226ded3b0c38 100644 --- a/app/code/Magento/Customer/view/frontend/templates/js/customer-data.phtml +++ b/app/code/Magento/Customer/view/frontend/templates/js/customer-data.phtml @@ -13,7 +13,6 @@ '*' => ['Magento_Customer/js/customer-data' => [ 'sectionLoadUrl' => $block->getCustomerDataUrl('customer/section/load'), 'cookieLifeTime' => $block->getCookieLifeTime(), - 'nonCachedSections' => $block->getNonCachedSectionKeys(), ]], ]); ?> diff --git a/app/code/Magento/Customer/view/frontend/web/address.js b/app/code/Magento/Customer/view/frontend/web/address.js index 5a6ea1b6ee3e76127760dd8759bdd742b8b8ea2e..4ea88c7067b400500e22917c25ec5dc21084d6f5 100644 --- a/app/code/Magento/Customer/view/frontend/web/address.js +++ b/app/code/Magento/Customer/view/frontend/web/address.js @@ -6,9 +6,10 @@ /*global confirm:true*/ define([ "jquery", + 'Magento_Ui/js/modal/confirm', "jquery/ui", "mage/translate" -], function($){ +], function($, confirm){ "use strict"; $.widget('mage.address', { @@ -53,14 +54,22 @@ define([ * @return {Boolean} */ _deleteAddress: function(e) { - if (confirm(this.options.deleteConfirmMessage)) { - if (typeof $(e.target).parent().data('address') !== 'undefined') { - window.location = this.options.deleteUrlPrefix + $(e.target).parent().data('address'); - } - else { - window.location = this.options.deleteUrlPrefix + $(e.target).data('address'); + var self = this; + + confirm({ + content: this.options.deleteConfirmMessage, + actions: { + confirm: function() { + if (typeof $(e.target).parent().data('address') !== 'undefined') { + window.location = self.options.deleteUrlPrefix + $(e.target).parent().data('address'); + } + else { + window.location = self.options.deleteUrlPrefix + $(e.target).data('address'); + } + } } - } + }); + return false; } }); diff --git a/app/code/Magento/Customer/view/frontend/web/js/customer-data.js b/app/code/Magento/Customer/view/frontend/web/js/customer-data.js index ae42dc978922e98ed38dd6cd91b4700a36a716fd..f4f79932d397cd5ee11cc9a4ad1435547efcac1c 100644 --- a/app/code/Magento/Customer/view/frontend/web/js/customer-data.js +++ b/app/code/Magento/Customer/view/frontend/web/js/customer-data.js @@ -23,8 +23,6 @@ define([ storage.removeAll(); var date = new Date(Date.now() + parseInt(options.cookieLifeTime, 10) * 1000); $.localStorage.set('mage-cache-timeout', date); - } else { - invalidateNonCachedSections(options); } }; @@ -35,12 +33,6 @@ define([ } }; - var invalidateNonCachedSections = function(options) { - _.each(options.nonCachedSections, function (sectionName) { - storageInvalidation.set(sectionName, true); - }); - } - var dataProvider = { getFromStorage: function (sectionNames) { var result = {}; diff --git a/app/code/Magento/Customer/view/frontend/web/js/view/authentication-popup.js b/app/code/Magento/Customer/view/frontend/web/js/view/authentication-popup.js index 324b0711f6b0381c7d323d3b9f1f9d0c25cc1996..dffbc6c380eade6a17adfd1b7d26c01b9ba5bc46 100644 --- a/app/code/Magento/Customer/view/frontend/web/js/view/authentication-popup.js +++ b/app/code/Magento/Customer/view/frontend/web/js/view/authentication-popup.js @@ -14,9 +14,10 @@ define( 'Magento_Customer/js/model/authentication-popup', 'mage/translate', 'mage/url', + 'Magento_Ui/js/modal/alert', 'mage/validation' ], - function($, ko, Component, loginAction, customerData, authenticationPopup, $t, url) { + function($, ko, Component, loginAction, customerData, authenticationPopup, $t, url, alert) { 'use strict'; return Component.extend({ registerUrl: window.authenticationPopup.customerRegisterUrl, @@ -55,7 +56,9 @@ define( if (this.modalWindow) { $(this.modalWindow).modal('openModal'); } else { - alert($t('Guest checkout is disabled.')); + alert({ + content: $t('Guest checkout is disabled.') + }); } }, diff --git a/app/code/Magento/CustomerImportExport/Model/ResourceModel/Import/CustomerComposite/Data.php b/app/code/Magento/CustomerImportExport/Model/ResourceModel/Import/CustomerComposite/Data.php index f0ebc53c926a70b6220adc66297d58a9c1755690..c1df86ca09f903344b9f2a058b42df85fcd030ce 100644 --- a/app/code/Magento/CustomerImportExport/Model/ResourceModel/Import/CustomerComposite/Data.php +++ b/app/code/Magento/CustomerImportExport/Model/ResourceModel/Import/CustomerComposite/Data.php @@ -26,13 +26,13 @@ class Data extends \Magento\ImportExport\Model\ResourceModel\Import\Data /** * Class constructor * - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Framework\Json\Helper\Data $coreHelper * @param string $connectionName * @param array $arguments */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Framework\Json\Helper\Data $jsonHelper, $connectionName = null, array $arguments = [] diff --git a/app/code/Magento/CustomerImportExport/Test/Unit/Model/ResourceModel/Import/CustomerComposite/DataTest.php b/app/code/Magento/CustomerImportExport/Test/Unit/Model/ResourceModel/Import/CustomerComposite/DataTest.php index cd6ce233b8a93c8d5a8ce7e0d201cbfb4fd9b56b..d68c554241d3f7ad830fdf74f79e5acc5cd9f05b 100644 --- a/app/code/Magento/CustomerImportExport/Test/Unit/Model/ResourceModel/Import/CustomerComposite/DataTest.php +++ b/app/code/Magento/CustomerImportExport/Test/Unit/Model/ResourceModel/Import/CustomerComposite/DataTest.php @@ -111,7 +111,7 @@ class DataTest extends \PHPUnit_Framework_TestCase ); unset($dependencies['resource'], $dependencies['json_helper']); - $contextMock = $this->getMock('\Magento\Framework\Model\ModelResource\Db\Context', [], [], '', false); + $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false); $contextMock->expects($this->once())->method('getResources')->willReturn($resource); $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this); diff --git a/app/code/Magento/Developer/Model/Config/Backend/AllowedIps.php b/app/code/Magento/Developer/Model/Config/Backend/AllowedIps.php index e4552761129ea9fc8833e3ac6d2f8e77ebf7aade..531e4fc64c3907c591edcc5a1256dc392cec6b4b 100644 --- a/app/code/Magento/Developer/Model/Config/Backend/AllowedIps.php +++ b/app/code/Magento/Developer/Model/Config/Backend/AllowedIps.php @@ -32,7 +32,7 @@ class AllowedIps extends \Magento\Framework\App\Config\Value * @param \Magento\Framework\App\Config\ScopeConfigInterface $config * @param \Magento\Framework\Message\ManagerInterface $messageManager * @param \Magento\Framework\Escaper $escaper - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -42,7 +42,7 @@ class AllowedIps extends \Magento\Framework\App\Config\Value \Magento\Framework\App\Config\ScopeConfigInterface $config, \Magento\Framework\Message\ManagerInterface $messageManager, \Magento\Framework\Escaper $escaper, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Directory/Helper/Data.php b/app/code/Magento/Directory/Helper/Data.php index 705fe05da7b077537ae68538eeb49f926a01be0c..836851386b2dc484900ba25b92929b918d417e2f 100644 --- a/app/code/Magento/Directory/Helper/Data.php +++ b/app/code/Magento/Directory/Helper/Data.php @@ -9,6 +9,8 @@ */ namespace Magento\Directory\Helper; +use Magento\Store\Model\ScopeInterface; + class Data extends \Magento\Framework\App\Helper\AbstractHelper { /** @@ -40,6 +42,11 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper */ const XML_PATH_TOP_COUNTRIES = 'general/country/destinations'; + /** + * Path to config value that contains weight unit + */ + const XML_PATH_WEIGHT_UNIT = 'general/locale/weight_unit'; + /** * Country collection * @@ -214,7 +221,7 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper $value = trim( $this->scopeConfig->getValue( self::OPTIONAL_ZIP_COUNTRIES_CONFIG_PATH, - \Magento\Store\Model\ScopeInterface::SCOPE_STORE + ScopeInterface::SCOPE_STORE ) ); $this->_optZipCountries = preg_split('/\,/', $value, 0, PREG_SPLIT_NO_EMPTY); @@ -248,7 +255,7 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper $value = trim( $this->scopeConfig->getValue( self::XML_PATH_STATES_REQUIRED, - \Magento\Store\Model\ScopeInterface::SCOPE_STORE + ScopeInterface::SCOPE_STORE ) ); $countryList = preg_split('/\,/', $value, 0, PREG_SPLIT_NO_EMPTY); @@ -267,7 +274,7 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper { return (bool)$this->scopeConfig->getValue( self::XML_PATH_DISPLAY_ALL_STATES, - \Magento\Store\Model\ScopeInterface::SCOPE_STORE + ScopeInterface::SCOPE_STORE ); } @@ -306,7 +313,7 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper { return $this->scopeConfig->getValue( self::XML_PATH_DEFAULT_COUNTRY, - \Magento\Store\Model\ScopeInterface::SCOPE_STORE, + ScopeInterface::SCOPE_STORE, $store ); } @@ -352,8 +359,18 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper { $configValue = (string)$this->scopeConfig->getValue( self::XML_PATH_TOP_COUNTRIES, - \Magento\Store\Model\ScopeInterface::SCOPE_STORE + ScopeInterface::SCOPE_STORE ); return !empty($configValue) ? explode(',', $configValue) : []; } + + /** + * Retrieve weight unit + * + * @return string + */ + public function getWeightUnit() + { + return $this->scopeConfig->getValue(self::XML_PATH_WEIGHT_UNIT, ScopeInterface::SCOPE_STORE); + } } diff --git a/app/code/Magento/Directory/Model/Config/Source/WeightUnit.php b/app/code/Magento/Directory/Model/Config/Source/WeightUnit.php new file mode 100644 index 0000000000000000000000000000000000000000..912e4bbb385a50ad568997f98c300c7ec92ff2f5 --- /dev/null +++ b/app/code/Magento/Directory/Model/Config/Source/WeightUnit.php @@ -0,0 +1,17 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Directory\Model\Config\Source; + +class WeightUnit implements \Magento\Framework\Option\ArrayInterface +{ + /** + * {@inheritdoc} + */ + public function toOptionArray() + { + return [['value' => 'lbs', 'label' => __('lbs')], ['value' => 'kgs', 'label' => __('kgs')]]; + } +} diff --git a/app/code/Magento/Directory/Model/Country.php b/app/code/Magento/Directory/Model/Country.php index d7cb16893856c9c23e2040e66e6fc9be8546cddc..fca0524c09595913e148b53e2f6f60f6d883419f 100644 --- a/app/code/Magento/Directory/Model/Country.php +++ b/app/code/Magento/Directory/Model/Country.php @@ -44,7 +44,7 @@ class Country extends \Magento\Framework\Model\AbstractModel * @param \Magento\Framework\Locale\ListsInterface $localeLists * @param Country\FormatFactory $formatFactory * @param \Magento\Directory\Model\ResourceModel\Region\CollectionFactory $regionCollectionFactory - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -54,7 +54,7 @@ class Country extends \Magento\Framework\Model\AbstractModel \Magento\Framework\Locale\ListsInterface $localeLists, \Magento\Directory\Model\Country\FormatFactory $formatFactory, \Magento\Directory\Model\ResourceModel\Region\CollectionFactory $regionCollectionFactory, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Directory/Model/Currency.php b/app/code/Magento/Directory/Model/Currency.php index ff09a021d42bf6a042428c64a2ee632800523802..576c946d0d64775ab62357f11286426129923524 100644 --- a/app/code/Magento/Directory/Model/Currency.php +++ b/app/code/Magento/Directory/Model/Currency.php @@ -73,7 +73,7 @@ class Currency extends \Magento\Framework\Model\AbstractModel * @param \Magento\Directory\Helper\Data $directoryHelper * @param Currency\FilterFactory $currencyFilterFactory * @param \Magento\Framework\Locale\CurrencyInterface $localeCurrency - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -86,7 +86,7 @@ class Currency extends \Magento\Framework\Model\AbstractModel \Magento\Directory\Helper\Data $directoryHelper, \Magento\Directory\Model\Currency\FilterFactory $currencyFilterFactory, \Magento\Framework\Locale\CurrencyInterface $localeCurrency, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Directory/Model/ResourceModel/Country.php b/app/code/Magento/Directory/Model/ResourceModel/Country.php index b315f23df0d6cd24acca2c561f56cc1c4179f8bd..09ef9f9aba63e88fe0f0553490e24fcc36f6464f 100644 --- a/app/code/Magento/Directory/Model/ResourceModel/Country.php +++ b/app/code/Magento/Directory/Model/ResourceModel/Country.php @@ -8,7 +8,7 @@ namespace Magento\Directory\Model\ResourceModel; /** * Directory Country Resource Model */ -class Country extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Country extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Resource initialization diff --git a/app/code/Magento/Directory/Model/ResourceModel/Country/Collection.php b/app/code/Magento/Directory/Model/ResourceModel/Country/Collection.php index 23d0e57ffef6bd836ea045b33d88fc3e626bdbdc..da1d524f7ab4c644ceb188e1287329c887dabe3c 100644 --- a/app/code/Magento/Directory/Model/ResourceModel/Country/Collection.php +++ b/app/code/Magento/Directory/Model/ResourceModel/Country/Collection.php @@ -15,7 +15,7 @@ namespace Magento\Directory\Model\ResourceModel\Country; * Class Collection * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Locale model @@ -65,7 +65,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab * @param \Magento\Framework\Locale\ResolverInterface $localeResolver * @param \Magento\Framework\App\Helper\AbstractHelper $helperData * @param mixed $connection - * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource + * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( @@ -80,7 +80,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab \Magento\Framework\Locale\ResolverInterface $localeResolver, \Magento\Framework\App\Helper\AbstractHelper $helperData, \Magento\Framework\DB\Adapter\AdapterInterface $connection = null, - \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null + \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null ) { parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource); $this->_scopeConfig = $scopeConfig; diff --git a/app/code/Magento/Directory/Model/ResourceModel/Country/Format.php b/app/code/Magento/Directory/Model/ResourceModel/Country/Format.php index d3a838305e5af2b27f5ad8988104fb83413fc79c..ad8e077284910cf5fb49114d7fd2c8dc76ed467f 100644 --- a/app/code/Magento/Directory/Model/ResourceModel/Country/Format.php +++ b/app/code/Magento/Directory/Model/ResourceModel/Country/Format.php @@ -10,7 +10,7 @@ namespace Magento\Directory\Model\ResourceModel\Country; * * @author Magento Core Team <core@magentocommerce.com> */ -class Format extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Format extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Resource initialization diff --git a/app/code/Magento/Directory/Model/ResourceModel/Country/Format/Collection.php b/app/code/Magento/Directory/Model/ResourceModel/Country/Format/Collection.php index 9c6a84806e3065959555fcc9a9bae645590e87a8..25982b5729fcaf5a57b5d44fe2894d8f78c07e97 100644 --- a/app/code/Magento/Directory/Model/ResourceModel/Country/Format/Collection.php +++ b/app/code/Magento/Directory/Model/ResourceModel/Country/Format/Collection.php @@ -10,7 +10,7 @@ namespace Magento\Directory\Model\ResourceModel\Country\Format; * * @author Magento Core Team <core@magentocommerce.com> */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Define main table diff --git a/app/code/Magento/Directory/Model/ResourceModel/Currency.php b/app/code/Magento/Directory/Model/ResourceModel/Currency.php index 36e7c5b128f1919a255ae7ef54980c9e32fe2f76..7e5b29b6e991ebdfd5ae1e8a1a5ce83e3a7a447c 100644 --- a/app/code/Magento/Directory/Model/ResourceModel/Currency.php +++ b/app/code/Magento/Directory/Model/ResourceModel/Currency.php @@ -9,7 +9,7 @@ */ namespace Magento\Directory\Model\ResourceModel; -class Currency extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Currency extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Currency rate table diff --git a/app/code/Magento/Directory/Model/ResourceModel/Region.php b/app/code/Magento/Directory/Model/ResourceModel/Region.php index 952696382f1bf2f8b41474f40cd75648e1f30d55..d03ce611e7b61f376b3b4b3d2279298ce0f93e46 100644 --- a/app/code/Magento/Directory/Model/ResourceModel/Region.php +++ b/app/code/Magento/Directory/Model/ResourceModel/Region.php @@ -11,7 +11,7 @@ */ namespace Magento\Directory\Model\ResourceModel; -class Region extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Region extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Table with localized region names @@ -26,12 +26,12 @@ class Region extends \Magento\Framework\Model\ModelResource\Db\AbstractDb protected $_localeResolver; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Framework\Locale\ResolverInterface $localeResolver * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Framework\Locale\ResolverInterface $localeResolver, $connectionName = null ) { diff --git a/app/code/Magento/Directory/Model/ResourceModel/Region/Collection.php b/app/code/Magento/Directory/Model/ResourceModel/Region/Collection.php index b60aa8bd5d4483736410ccfe1a9c44ecf3875e80..23e48367c17f131896fe2c636148614c482856d9 100644 --- a/app/code/Magento/Directory/Model/ResourceModel/Region/Collection.php +++ b/app/code/Magento/Directory/Model/ResourceModel/Region/Collection.php @@ -9,7 +9,7 @@ */ namespace Magento\Directory\Model\ResourceModel\Region; -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Locale region name table name @@ -37,7 +37,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab * @param \Magento\Framework\Event\ManagerInterface $eventManager * @param \Magento\Framework\Locale\ResolverInterface $localeResolver * @param mixed $connection - * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource + * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource */ public function __construct( \Magento\Framework\Data\Collection\EntityFactory $entityFactory, @@ -46,7 +46,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab \Magento\Framework\Event\ManagerInterface $eventManager, \Magento\Framework\Locale\ResolverInterface $localeResolver, \Magento\Framework\DB\Adapter\AdapterInterface $connection = null, - \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null + \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null ) { $this->_localeResolver = $localeResolver; parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource); diff --git a/app/code/Magento/Directory/Test/Unit/Model/ResourceModel/Country/CollectionTest.php b/app/code/Magento/Directory/Test/Unit/Model/ResourceModel/Country/CollectionTest.php index 2a2037a73ceafbb203b30fff20aed92d079e3833..dbbd2d935d5e4882703379ed9b17a9aaf6a03475 100644 --- a/app/code/Magento/Directory/Test/Unit/Model/ResourceModel/Country/CollectionTest.php +++ b/app/code/Magento/Directory/Test/Unit/Model/ResourceModel/Country/CollectionTest.php @@ -21,7 +21,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase $select = $this->getMock('Magento\Framework\DB\Select', [], [], '', false); $connection->expects($this->once())->method('select')->will($this->returnValue($select)); - $resource = $this->getMockForAbstractClass('Magento\Framework\Model\ModelResource\Db\AbstractDb', + $resource = $this->getMockForAbstractClass('Magento\Framework\Model\ResourceModel\Db\AbstractDb', [], '', false, diff --git a/app/code/Magento/Directory/etc/adminhtml/system.xml b/app/code/Magento/Directory/etc/adminhtml/system.xml index fa22d9f4dd20ca29505fc7585e3b0b27490059ec..170b16c1eb79167627561a6646bcc14bb4cfa2fe 100644 --- a/app/code/Magento/Directory/etc/adminhtml/system.xml +++ b/app/code/Magento/Directory/etc/adminhtml/system.xml @@ -103,6 +103,12 @@ <source_model>Magento\Config\Model\Config\Source\Yesno</source_model> </field> </group> + <group id="locale"> + <field id="weight_unit" translate="label" type="select" sortOrder="7" showInDefault="1" showInWebsite="1" showInStore="1"> + <label>Weight Unit</label> + <source_model>Magento\Directory\Model\Config\Source\WeightUnit</source_model> + </field> + </group> </section> </system> </config> diff --git a/app/code/Magento/Directory/etc/config.xml b/app/code/Magento/Directory/etc/config.xml index d1a23705b3b4ede7f5ad53ba0bc66abd22b4c1d7..3afc87961eb28e7f3633233b2e551ba3d13a17df 100644 --- a/app/code/Magento/Directory/etc/config.xml +++ b/app/code/Magento/Directory/etc/config.xml @@ -44,6 +44,7 @@ <language>en</language> <code>en_US</code> <timezone>America/Los_Angeles</timezone> + <weight_unit>lbs</weight_unit> </locale> </general> </default> diff --git a/app/code/Magento/Downloadable/Model/Link.php b/app/code/Magento/Downloadable/Model/Link.php index 6f72a840756ed83fb4566019009e9fafb3c78692..bfc7c484ffe3a197338802e7a4138d4bdd199b2d 100644 --- a/app/code/Magento/Downloadable/Model/Link.php +++ b/app/code/Magento/Downloadable/Model/Link.php @@ -56,7 +56,7 @@ class Link extends \Magento\Framework\Model\AbstractExtensibleModel implements C * @param \Magento\Framework\Registry $registry * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory * @param \Magento\Framework\Api\AttributeValueFactory $customAttributeFactory - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -65,7 +65,7 @@ class Link extends \Magento\Framework\Model\AbstractExtensibleModel implements C \Magento\Framework\Registry $registry, \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory, \Magento\Framework\Api\AttributeValueFactory $customAttributeFactory, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Downloadable/Model/ResourceModel/Link.php b/app/code/Magento/Downloadable/Model/ResourceModel/Link.php index c8c3147e8257d6cf2ee6c473d7b1097be65483ba..04652bee14cef646f781c5dbfe2ce1696896fa7b 100644 --- a/app/code/Magento/Downloadable/Model/ResourceModel/Link.php +++ b/app/code/Magento/Downloadable/Model/ResourceModel/Link.php @@ -10,7 +10,7 @@ namespace Magento\Downloadable\Model\ResourceModel; * * @author Magento Core Team <core@magentocommerce.com> */ -class Link extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Link extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Catalog data @@ -35,7 +35,7 @@ class Link extends \Magento\Framework\Model\ModelResource\Db\AbstractDb protected $_storeManager; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Catalog\Helper\Data $catalogData * @param \Magento\Framework\App\Config\ScopeConfigInterface $configuration * @param \Magento\Directory\Model\CurrencyFactory $currencyFactory @@ -43,7 +43,7 @@ class Link extends \Magento\Framework\Model\ModelResource\Db\AbstractDb * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Catalog\Helper\Data $catalogData, \Magento\Framework\App\Config\ScopeConfigInterface $configuration, \Magento\Directory\Model\CurrencyFactory $currencyFactory, diff --git a/app/code/Magento/Downloadable/Model/ResourceModel/Link/Collection.php b/app/code/Magento/Downloadable/Model/ResourceModel/Link/Collection.php index 7b794e611b32575624b2556ba255558118a5b537..37e85d665b7dcb5d5f7f21c2a5cf71f3209c2728 100644 --- a/app/code/Magento/Downloadable/Model/ResourceModel/Link/Collection.php +++ b/app/code/Magento/Downloadable/Model/ResourceModel/Link/Collection.php @@ -10,7 +10,7 @@ namespace Magento\Downloadable\Model\ResourceModel\Link; * * @author Magento Core Team <core@magentocommerce.com> */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Init resource model diff --git a/app/code/Magento/Downloadable/Model/ResourceModel/Link/Purchased.php b/app/code/Magento/Downloadable/Model/ResourceModel/Link/Purchased.php index 1617400758726c9e63fc7a713671f0fb01edbc3b..1b108de2f30965256e8fcaec5158a045cde3488a 100644 --- a/app/code/Magento/Downloadable/Model/ResourceModel/Link/Purchased.php +++ b/app/code/Magento/Downloadable/Model/ResourceModel/Link/Purchased.php @@ -10,7 +10,7 @@ namespace Magento\Downloadable\Model\ResourceModel\Link; * * @author Magento Core Team <core@magentocommerce.com> */ -class Purchased extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Purchased extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Magento class constructor diff --git a/app/code/Magento/Downloadable/Model/ResourceModel/Link/Purchased/Collection.php b/app/code/Magento/Downloadable/Model/ResourceModel/Link/Purchased/Collection.php index 7b23cdf41398b99ed8cba25b291a1133ac00e9a2..d7510b23074d84747e69b7be557d5b6d2c50323e 100644 --- a/app/code/Magento/Downloadable/Model/ResourceModel/Link/Purchased/Collection.php +++ b/app/code/Magento/Downloadable/Model/ResourceModel/Link/Purchased/Collection.php @@ -10,7 +10,7 @@ namespace Magento\Downloadable\Model\ResourceModel\Link\Purchased; * * @author Magento Core Team <core@magentocommerce.com> */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Init resource model diff --git a/app/code/Magento/Downloadable/Model/ResourceModel/Link/Purchased/Item.php b/app/code/Magento/Downloadable/Model/ResourceModel/Link/Purchased/Item.php index 7d934e97b65af39764e52ca2db10de949db01dcf..3252860648496c096080c3e62ccb571c2ec60c4e 100644 --- a/app/code/Magento/Downloadable/Model/ResourceModel/Link/Purchased/Item.php +++ b/app/code/Magento/Downloadable/Model/ResourceModel/Link/Purchased/Item.php @@ -10,7 +10,7 @@ namespace Magento\Downloadable\Model\ResourceModel\Link\Purchased; * * @author Magento Core Team <core@magentocommerce.com> */ -class Item extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Item extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Magento class constructor diff --git a/app/code/Magento/Downloadable/Model/ResourceModel/Link/Purchased/Item/Collection.php b/app/code/Magento/Downloadable/Model/ResourceModel/Link/Purchased/Item/Collection.php index 64e2248d554d4aee36dd17959856dff1bfcea9d1..632015fec2ad906bb140b87d2b73b5d3b64c0374 100644 --- a/app/code/Magento/Downloadable/Model/ResourceModel/Link/Purchased/Item/Collection.php +++ b/app/code/Magento/Downloadable/Model/ResourceModel/Link/Purchased/Item/Collection.php @@ -10,7 +10,7 @@ namespace Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item; * * @author Magento Core Team <core@magentocommerce.com> */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Init resource model diff --git a/app/code/Magento/Downloadable/Model/ResourceModel/Sample.php b/app/code/Magento/Downloadable/Model/ResourceModel/Sample.php index 78958f26c402a51af7018510d27dee8b4f6b6620..df1708786960ece7e9fa289205da3d250da4ed30 100644 --- a/app/code/Magento/Downloadable/Model/ResourceModel/Sample.php +++ b/app/code/Magento/Downloadable/Model/ResourceModel/Sample.php @@ -10,7 +10,7 @@ namespace Magento\Downloadable\Model\ResourceModel; * * @author Magento Core Team <core@magentocommerce.com> */ -class Sample extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Sample extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Initialize connection diff --git a/app/code/Magento/Downloadable/Model/ResourceModel/Sample/Collection.php b/app/code/Magento/Downloadable/Model/ResourceModel/Sample/Collection.php index c224b46484e9dfc32cc1941eb0dfc7cd74b5822d..8a5878d95e5c94f74eef2176b7d39415ca8c0cf7 100644 --- a/app/code/Magento/Downloadable/Model/ResourceModel/Sample/Collection.php +++ b/app/code/Magento/Downloadable/Model/ResourceModel/Sample/Collection.php @@ -10,7 +10,7 @@ namespace Magento\Downloadable\Model\ResourceModel\Sample; * * @author Magento Core Team <core@magentocommerce.com> */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Init resource model diff --git a/app/code/Magento/Downloadable/Model/Sales/Order/Pdf/Items/AbstractItems.php b/app/code/Magento/Downloadable/Model/Sales/Order/Pdf/Items/AbstractItems.php index f535d50abfbfcab118e87a1ab117cdef0b5e92ff..fcfc62e908747b3f4c01da458084e8301d4bf285 100644 --- a/app/code/Magento/Downloadable/Model/Sales/Order/Pdf/Items/AbstractItems.php +++ b/app/code/Magento/Downloadable/Model/Sales/Order/Pdf/Items/AbstractItems.php @@ -47,7 +47,7 @@ abstract class AbstractItems extends \Magento\Sales\Model\Order\Pdf\Items\Abstra * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig * @param \Magento\Downloadable\Model\Link\PurchasedFactory $purchasedFactory * @param \Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory $itemsFactory - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -61,7 +61,7 @@ abstract class AbstractItems extends \Magento\Sales\Model\Order\Pdf\Items\Abstra \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig, \Magento\Downloadable\Model\Link\PurchasedFactory $purchasedFactory, \Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory $itemsFactory, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Downloadable/Model/Sales/Order/Pdf/Items/Creditmemo.php b/app/code/Magento/Downloadable/Model/Sales/Order/Pdf/Items/Creditmemo.php index 67b34be95fd8b16f3f35491d3459d7c577f579c9..ea563923353fecf8c9e2d2b5c618aa50406f332f 100644 --- a/app/code/Magento/Downloadable/Model/Sales/Order/Pdf/Items/Creditmemo.php +++ b/app/code/Magento/Downloadable/Model/Sales/Order/Pdf/Items/Creditmemo.php @@ -25,7 +25,7 @@ class Creditmemo extends \Magento\Downloadable\Model\Sales\Order\Pdf\Items\Abstr * @param \Magento\Downloadable\Model\Link\PurchasedFactory $purchasedFactory * @param \Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory $itemsFactory * @param \Magento\Framework\Stdlib\StringUtils $string - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -40,7 +40,7 @@ class Creditmemo extends \Magento\Downloadable\Model\Sales\Order\Pdf\Items\Abstr \Magento\Downloadable\Model\Link\PurchasedFactory $purchasedFactory, \Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory $itemsFactory, \Magento\Framework\Stdlib\StringUtils $string, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Downloadable/Model/Sales/Order/Pdf/Items/Invoice.php b/app/code/Magento/Downloadable/Model/Sales/Order/Pdf/Items/Invoice.php index 4ab859d7ae773503f1a92ad5710450d014063763..952932d1258e567aa2e900328f6e788640b3003e 100644 --- a/app/code/Magento/Downloadable/Model/Sales/Order/Pdf/Items/Invoice.php +++ b/app/code/Magento/Downloadable/Model/Sales/Order/Pdf/Items/Invoice.php @@ -25,7 +25,7 @@ class Invoice extends \Magento\Downloadable\Model\Sales\Order\Pdf\Items\Abstract * @param \Magento\Downloadable\Model\Link\PurchasedFactory $purchasedFactory * @param \Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory $itemsFactory * @param \Magento\Framework\Stdlib\StringUtils $string - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -40,7 +40,7 @@ class Invoice extends \Magento\Downloadable\Model\Sales\Order\Pdf\Items\Abstract \Magento\Downloadable\Model\Link\PurchasedFactory $purchasedFactory, \Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory $itemsFactory, \Magento\Framework\Stdlib\StringUtils $string, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Downloadable/Model/Sample.php b/app/code/Magento/Downloadable/Model/Sample.php index 54064495b48d69ce4a7b83130817d7619794109a..3fcc4cebb82ef7683a1a1a1ec6f179ce3d4e4041 100644 --- a/app/code/Magento/Downloadable/Model/Sample.php +++ b/app/code/Magento/Downloadable/Model/Sample.php @@ -36,7 +36,7 @@ class Sample extends \Magento\Framework\Model\AbstractExtensibleModel implements * @param \Magento\Framework\Registry $registry * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory * @param \Magento\Framework\Api\AttributeValueFactory $customAttributeFactory - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -45,7 +45,7 @@ class Sample extends \Magento\Framework\Model\AbstractExtensibleModel implements \Magento\Framework\Registry $registry, \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory, \Magento\Framework\Api\AttributeValueFactory $customAttributeFactory, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Downloadable/etc/events.xml b/app/code/Magento/Downloadable/etc/events.xml index ba57bb11aeaa925e93357690056774d4e4d15210..b2ab5cccab3cde7effa65d7024a2bebd76291087 100644 --- a/app/code/Magento/Downloadable/etc/events.xml +++ b/app/code/Magento/Downloadable/etc/events.xml @@ -7,12 +7,12 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="sales_order_item_save_commit_after"> - <observer name="downloadable_observer" instance="Magento\Downloadable\Observer\SaveDownloadableOrderItemObserver" method="execute" /> + <observer name="downloadable_observer" instance="Magento\Downloadable\Observer\SaveDownloadableOrderItemObserver" /> </event> <event name="sales_order_save_commit_after"> - <observer name="downloadable_observer" instance="Magento\Downloadable\Observer\SetLinkStatusObserver" method="execute" /> + <observer name="downloadable_observer" instance="Magento\Downloadable\Observer\SetLinkStatusObserver" /> </event> <event name="sales_model_service_quote_submit_success"> - <observer name="checkout_type_onepage_save_order_after" instance="Magento\Downloadable\Observer\SetHasDownloadableProductsObserver" method="execute" /> + <observer name="checkout_type_onepage_save_order_after" instance="Magento\Downloadable\Observer\SetHasDownloadableProductsObserver" /> </event> </config> diff --git a/app/code/Magento/Downloadable/etc/frontend/events.xml b/app/code/Magento/Downloadable/etc/frontend/events.xml index b1834afe1815d18b47c039a891dd1a428d53338d..bcbac84cf12e595b70575b872ba7f1ea503ecb03 100644 --- a/app/code/Magento/Downloadable/etc/frontend/events.xml +++ b/app/code/Magento/Downloadable/etc/frontend/events.xml @@ -7,12 +7,12 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="checkout_type_multishipping_create_orders_single"> - <observer name="checkout_type_multishipping_create_orders_single" instance="Magento\Downloadable\Observer\SetHasDownloadableProductsObserver" method="execute" /> + <observer name="checkout_type_multishipping_create_orders_single" instance="Magento\Downloadable\Observer\SetHasDownloadableProductsObserver" /> </event> <event name="checkout_allow_guest"> - <observer name="checkout_allow_guest" instance="Magento\Downloadable\Observer\IsAllowedGuestCheckoutObserver" method="execute" /> + <observer name="checkout_allow_guest" instance="Magento\Downloadable\Observer\IsAllowedGuestCheckoutObserver" /> </event> <event name="product_option_renderer_init"> - <observer name="downloadable_observer" instance="Magento\Downloadable\Observer\InitOptionRendererObserver" method="execute" /> + <observer name="downloadable_observer" instance="Magento\Downloadable\Observer\InitOptionRendererObserver" /> </event> </config> diff --git a/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable.phtml b/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable.phtml index 688d231547f437eaf906b38beca4503ea91ab729..0c4077543059fd746f88a67b946889ca286ce287 100644 --- a/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable.phtml +++ b/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable.phtml @@ -16,11 +16,12 @@ <script> require([ 'jquery', - 'Magento_Ui/js/lib/registry/registry', + 'uiRegistry', 'mage/template', + 'Magento_Ui/js/modal/alert', 'mage/mage', 'prototype' -], function (jQuery, registry, mageTemplate) { +], function (jQuery, registry, mageTemplate, alert) { //<![CDATA[> var uploaderTemplate = '<div class="no-display" id="[[idName]]-template">' + @@ -113,7 +114,9 @@ var uploaderTemplate = '<div class="no-display" id="[[idName]]-template">' + try { console.log(e); } catch (e2) { - alert(e.name + '\n' + e.message); + alert({ + content: e.name + '\n' + e.message + }); } } }, @@ -124,7 +127,9 @@ var uploaderTemplate = '<div class="no-display" id="[[idName]]-template">' + try { console.log(e); } catch (e2) { - alert(e.name + '\n' + e.message); + alert({ + content: e.name + '\n' + e.message + }); } } }, @@ -142,7 +147,9 @@ var uploaderTemplate = '<div class="no-display" id="[[idName]]-template">' + try { console.log(e); } catch (e2) { - alert(e.name + '\n' + e.message); + alert({ + content: e.name + '\n' + e.message + }); } } } diff --git a/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/links.phtml b/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/links.phtml index f68fcc7b1963f5406a6bc57d7f33530efd1dfb3d..d5c4b6dca86ea769bc9bb04fe98309bffcccd0e5 100644 --- a/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/links.phtml +++ b/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/links.phtml @@ -73,7 +73,7 @@ <script> require([ 'jquery', - 'Magento_Ui/js/lib/registry/registry', + 'uiRegistry', 'mage/template', 'jquery/file-uploader', 'mage/mage', diff --git a/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/samples.phtml b/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/samples.phtml index 7ea23e633c6c9732a5857a16ddd81065a9db399b..cd78725695ef1d6b2590310c721d4fa412127cfa 100644 --- a/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/samples.phtml +++ b/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/samples.phtml @@ -60,7 +60,7 @@ $block->getConfigJson(); <script> require([ 'jquery', - 'Magento_Ui/js/lib/registry/registry', + 'uiRegistry', 'mage/template', 'jquery/file-uploader', 'prototype' diff --git a/app/code/Magento/Eav/Model/Entity/AbstractEntity.php b/app/code/Magento/Eav/Model/Entity/AbstractEntity.php index 74eaf71453863dc94a044dbe6a2ebb586b57a60b..14147d6849de94bee388891d8ecfe389fd252ee5 100644 --- a/app/code/Magento/Eav/Model/Entity/AbstractEntity.php +++ b/app/code/Magento/Eav/Model/Entity/AbstractEntity.php @@ -16,10 +16,10 @@ use Magento\Framework\App\Config\Element; use Magento\Framework\App\ResourceConnection\Config; use Magento\Framework\Exception\LocalizedException; use Magento\Framework\Model\AbstractModel; -use Magento\Framework\Model\ModelResource\Db\ObjectRelationProcessor; -use Magento\Framework\Model\ModelResource\Db\TransactionManagerInterface; +use Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor; +use Magento\Framework\Model\ResourceModel\Db\TransactionManagerInterface; use Magento\Eav\Model\ResourceModel\Attribute\DefaultEntityAttributes\ProviderInterface as DefaultAttributesProvider; -use Magento\Framework\Model\ModelResource\AbstractResource; +use Magento\Framework\Model\ResourceModel\AbstractResource; /** * Entity/Attribute/Model - entity abstract diff --git a/app/code/Magento/Eav/Model/Entity/Attribute.php b/app/code/Magento/Eav/Model/Entity/Attribute.php index ac8627c964415fcfe1a91efd63bb8fe5c1974d65..e26146bc9aa2366aec0033b5ccd92238dbce2cf1 100644 --- a/app/code/Magento/Eav/Model/Entity/Attribute.php +++ b/app/code/Magento/Eav/Model/Entity/Attribute.php @@ -87,7 +87,7 @@ class Attribute extends \Magento\Eav\Model\Entity\Attribute\AbstractAttribute im * @param \Magento\Catalog\Model\Product\ReservedAttributeList $reservedAttributeList * @param \Magento\Framework\Locale\ResolverInterface $localeResolver * @param DateTimeFormatterInterface $dateTimeFormatter - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -110,7 +110,7 @@ class Attribute extends \Magento\Eav\Model\Entity\Attribute\AbstractAttribute im \Magento\Catalog\Model\Product\ReservedAttributeList $reservedAttributeList, \Magento\Framework\Locale\ResolverInterface $localeResolver, DateTimeFormatterInterface $dateTimeFormatter, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Eav/Model/Entity/Attribute/AbstractAttribute.php b/app/code/Magento/Eav/Model/Entity/Attribute/AbstractAttribute.php index 7709a9170842e9317da351e8e485d75aef078dfc..b77183b6c05f300bdb69ea5660fad43783276ac9 100644 --- a/app/code/Magento/Eav/Model/Entity/Attribute/AbstractAttribute.php +++ b/app/code/Magento/Eav/Model/Entity/Attribute/AbstractAttribute.php @@ -124,7 +124,7 @@ abstract class AbstractAttribute extends \Magento\Framework\Model\AbstractExtens * @param \Magento\Eav\Api\Data\AttributeOptionInterfaceFactory $optionDataFactory * @param \Magento\Framework\Reflection\DataObjectProcessor $dataObjectProcessor * @param \Magento\Framework\Api\DataObjectHelper $dataObjectHelper - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -143,7 +143,7 @@ abstract class AbstractAttribute extends \Magento\Framework\Model\AbstractExtens \Magento\Eav\Api\Data\AttributeOptionInterfaceFactory $optionDataFactory, \Magento\Framework\Reflection\DataObjectProcessor $dataObjectProcessor, \Magento\Framework\Api\DataObjectHelper $dataObjectHelper, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Eav/Model/Entity/Attribute/Set.php b/app/code/Magento/Eav/Model/Entity/Attribute/Set.php index d7311a351f8714134da2851f94614039646ce55e..cd5705a566b030797bf6ccb22b21c543b07e15e5 100644 --- a/app/code/Magento/Eav/Model/Entity/Attribute/Set.php +++ b/app/code/Magento/Eav/Model/Entity/Attribute/Set.php @@ -81,7 +81,7 @@ class Set extends \Magento\Framework\Model\AbstractExtensibleModel implements * @param GroupFactory $attrGroupFactory * @param \Magento\Eav\Model\Entity\AttributeFactory $attributeFactory * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute $resourceAttribute - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -96,7 +96,7 @@ class Set extends \Magento\Framework\Model\AbstractExtensibleModel implements \Magento\Eav\Model\Entity\Attribute\GroupFactory $attrGroupFactory, \Magento\Eav\Model\Entity\AttributeFactory $attributeFactory, \Magento\Eav\Model\ResourceModel\Entity\Attribute $resourceAttribute, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { @@ -348,7 +348,7 @@ class Set extends \Magento\Framework\Model\AbstractExtensibleModel implements /** * Get resource instance * - * @return \Magento\Framework\Model\ModelResource\Db\AbstractDb + * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb */ protected function _getResource() { diff --git a/app/code/Magento/Eav/Model/Entity/Collection/AbstractCollection.php b/app/code/Magento/Eav/Model/Entity/Collection/AbstractCollection.php index 9d1ebdeb1832a3feaddc6a50fbc1be1041b2d6e5..9527e4a162d40f3a33fc7bd7e9a492899e6cc10b 100644 --- a/app/code/Magento/Eav/Model/Entity/Collection/AbstractCollection.php +++ b/app/code/Magento/Eav/Model/Entity/Collection/AbstractCollection.php @@ -265,7 +265,7 @@ abstract class AbstractCollection extends AbstractDb implements SourceProviderIn /** * Get resource instance * - * @return \Magento\Framework\Model\ModelResource\Db\AbstractDb + * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb * @codeCoverageIgnore */ public function getResource() diff --git a/app/code/Magento/Eav/Model/Entity/Collection/VersionControl/AbstractCollection.php b/app/code/Magento/Eav/Model/Entity/Collection/VersionControl/AbstractCollection.php index aceca7018b67e6124211e30a47ad25e0cb4081d9..bda308469301f3542f5fabfd78236488d62ec5f8 100644 --- a/app/code/Magento/Eav/Model/Entity/Collection/VersionControl/AbstractCollection.php +++ b/app/code/Magento/Eav/Model/Entity/Collection/VersionControl/AbstractCollection.php @@ -11,7 +11,7 @@ namespace Magento\Eav\Model\Entity\Collection\VersionControl; abstract class AbstractCollection extends \Magento\Eav\Model\Entity\Collection\AbstractCollection { /** - * @var \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot + * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot */ protected $entitySnapshot; @@ -25,7 +25,7 @@ abstract class AbstractCollection extends \Magento\Eav\Model\Entity\Collection\A * @param \Magento\Eav\Model\EntityFactory $eavEntityFactory * @param \Magento\Eav\Model\ResourceModel\Helper $resourceHelper * @param \Magento\Framework\Validator\UniversalFactory $universalFactory - * @param \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot, + * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot, * @param mixed $connection * @SuppressWarnings(PHPMD.ExcessiveParameterList) * @codeCoverageIgnore @@ -40,7 +40,7 @@ abstract class AbstractCollection extends \Magento\Eav\Model\Entity\Collection\A \Magento\Eav\Model\EntityFactory $eavEntityFactory, \Magento\Eav\Model\ResourceModel\Helper $resourceHelper, \Magento\Framework\Validator\UniversalFactory $universalFactory, - \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot, + \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot, \Magento\Framework\DB\Adapter\AdapterInterface $connection = null ) { $this->entitySnapshot = $entitySnapshot; diff --git a/app/code/Magento/Eav/Model/Entity/Context.php b/app/code/Magento/Eav/Model/Entity/Context.php index 974fdedd8bef2f96d1235fce88f1e423657e9cda..1f858af9378d75e84dd901431ab47f19c81086c8 100644 --- a/app/code/Magento/Eav/Model/Entity/Context.php +++ b/app/code/Magento/Eav/Model/Entity/Context.php @@ -42,12 +42,12 @@ class Context implements \Magento\Framework\ObjectManager\ContextInterface protected $universalFactory; /** - * @var \Magento\Framework\Model\ModelResource\Db\TransactionManagerInterface + * @var \Magento\Framework\Model\ResourceModel\Db\TransactionManagerInterface */ protected $transactionManager; /** - * @var \Magento\Framework\Model\ModelResource\Db\ObjectRelationProcessor + * @var \Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor */ protected $objectRelationProcessor; @@ -58,8 +58,8 @@ class Context implements \Magento\Framework\ObjectManager\ContextInterface * @param \Magento\Framework\Locale\FormatInterface $localeFormat * @param \Magento\Eav\Model\ResourceModel\Helper $resourceHelper * @param \Magento\Framework\Validator\UniversalFactory $universalFactory - * @param \Magento\Framework\Model\ModelResource\Db\TransactionManagerInterface $transactionManager - * @param \Magento\Framework\Model\ModelResource\Db\ObjectRelationProcessor $objectRelationProcessor + * @param \Magento\Framework\Model\ResourceModel\Db\TransactionManagerInterface $transactionManager + * @param \Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor $objectRelationProcessor */ public function __construct( \Magento\Framework\App\ResourceConnection $resource, @@ -68,8 +68,8 @@ class Context implements \Magento\Framework\ObjectManager\ContextInterface \Magento\Framework\Locale\FormatInterface $localeFormat, \Magento\Eav\Model\ResourceModel\Helper $resourceHelper, \Magento\Framework\Validator\UniversalFactory $universalFactory, - \Magento\Framework\Model\ModelResource\Db\TransactionManagerInterface $transactionManager, - \Magento\Framework\Model\ModelResource\Db\ObjectRelationProcessor $objectRelationProcessor + \Magento\Framework\Model\ResourceModel\Db\TransactionManagerInterface $transactionManager, + \Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor $objectRelationProcessor ) { $this->eavConfig = $eavConfig; $this->resource = $resource; @@ -130,7 +130,7 @@ class Context implements \Magento\Framework\ObjectManager\ContextInterface } /** - * @return \Magento\Framework\Model\ModelResource\Db\ObjectRelationProcessor + * @return \Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor */ public function getObjectRelationProcessor() { @@ -138,7 +138,7 @@ class Context implements \Magento\Framework\ObjectManager\ContextInterface } /** - * @return \Magento\Framework\Model\ModelResource\Db\TransactionManagerInterface + * @return \Magento\Framework\Model\ResourceModel\Db\TransactionManagerInterface */ public function getTransactionManager() { diff --git a/app/code/Magento/Eav/Model/Entity/Type.php b/app/code/Magento/Eav/Model/Entity/Type.php index 4a95e8dc6173797e270e318e94af33c8699a87d4..362e8fc2ddd69f68bc3fa78aee85a8f91c3fabaf 100644 --- a/app/code/Magento/Eav/Model/Entity/Type.php +++ b/app/code/Magento/Eav/Model/Entity/Type.php @@ -86,7 +86,7 @@ class Type extends \Magento\Framework\Model\AbstractModel * @param \Magento\Eav\Model\Entity\Attribute\SetFactory $attSetFactory * @param \Magento\Eav\Model\Entity\StoreFactory $storeFactory * @param \Magento\Framework\Validator\UniversalFactory $universalFactory - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @codeCoverageIgnore @@ -98,7 +98,7 @@ class Type extends \Magento\Framework\Model\AbstractModel \Magento\Eav\Model\Entity\Attribute\SetFactory $attSetFactory, \Magento\Eav\Model\Entity\StoreFactory $storeFactory, \Magento\Framework\Validator\UniversalFactory $universalFactory, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { @@ -359,7 +359,7 @@ class Type extends \Magento\Framework\Model\AbstractModel /** * Retrieve resource entity object * - * @return \Magento\Framework\Model\ModelResource\AbstractResource + * @return \Magento\Framework\Model\ResourceModel\AbstractResource */ public function getEntity() { diff --git a/app/code/Magento/Eav/Model/Entity/VersionControl/AbstractEntity.php b/app/code/Magento/Eav/Model/Entity/VersionControl/AbstractEntity.php index 87e2fbd15c8cea216a5c8700d516de354e50bb1c..0e32219f56f5eac9e5717242366c05dfbe9903ad 100644 --- a/app/code/Magento/Eav/Model/Entity/VersionControl/AbstractEntity.php +++ b/app/code/Magento/Eav/Model/Entity/VersionControl/AbstractEntity.php @@ -11,26 +11,26 @@ namespace Magento\Eav\Model\Entity\VersionControl; abstract class AbstractEntity extends \Magento\Eav\Model\Entity\AbstractEntity { /** - * @var \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot + * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot */ protected $entitySnapshot; /** - * @var \Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite + * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite */ protected $entityRelationComposite; /** * @param \Magento\Eav\Model\Entity\Context $context - * @param \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot - * @param \Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite $entityRelationComposite + * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot + * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite * @param array $data * @codeCoverageIgnore */ public function __construct( \Magento\Eav\Model\Entity\Context $context, - \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot, - \Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite $entityRelationComposite, + \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot, + \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite, $data = [] ) { $this->entitySnapshot = $entitySnapshot; diff --git a/app/code/Magento/Eav/Model/Entity/VersionControl/Metadata.php b/app/code/Magento/Eav/Model/Entity/VersionControl/Metadata.php index 7ac09d827a84c6e697ed9e57ceff202712ea5029..40184c1e67f496de718760a3a001093d0a1fef1d 100644 --- a/app/code/Magento/Eav/Model/Entity/VersionControl/Metadata.php +++ b/app/code/Magento/Eav/Model/Entity/VersionControl/Metadata.php @@ -8,7 +8,7 @@ namespace Magento\Eav\Model\Entity\VersionControl; /** * Class Metadata represents a list of entity fields that are applicable for persistence operations */ -class Metadata extends \Magento\Framework\Model\ModelResource\Db\VersionControl\Metadata +class Metadata extends \Magento\Framework\Model\ResourceModel\Db\VersionControl\Metadata { /** * Returns list of entity fields that are applicable for persistence operations diff --git a/app/code/Magento/Eav/Model/Form/Element.php b/app/code/Magento/Eav/Model/Form/Element.php index 53b09ca969697b45ba6bbf31d164a5cc9ebee859..2c573a42e8d1c155e84d71b8347621be1ca9428e 100644 --- a/app/code/Magento/Eav/Model/Form/Element.php +++ b/app/code/Magento/Eav/Model/Form/Element.php @@ -40,7 +40,7 @@ class Element extends \Magento\Framework\Model\AbstractModel * @param \Magento\Framework\Model\Context $context * @param \Magento\Framework\Registry $registry * @param \Magento\Eav\Model\Config $eavConfig - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @codeCoverageIgnore @@ -49,7 +49,7 @@ class Element extends \Magento\Framework\Model\AbstractModel \Magento\Framework\Model\Context $context, \Magento\Framework\Registry $registry, \Magento\Eav\Model\Config $eavConfig, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Eav/Model/Form/Fieldset.php b/app/code/Magento/Eav/Model/Form/Fieldset.php index f62c929a56d2afc0a87c4aeeda046408a976c7e8..6b7a6fd4561a79887c395eb199aacf29ed7ca0b2 100644 --- a/app/code/Magento/Eav/Model/Form/Fieldset.php +++ b/app/code/Magento/Eav/Model/Form/Fieldset.php @@ -36,7 +36,7 @@ class Fieldset extends \Magento\Framework\Model\AbstractModel * @param \Magento\Framework\Model\Context $context * @param \Magento\Framework\Registry $registry * @param \Magento\Store\Model\StoreManagerInterface $storeManager - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @codeCoverageIgnore @@ -45,7 +45,7 @@ class Fieldset extends \Magento\Framework\Model\AbstractModel \Magento\Framework\Model\Context $context, \Magento\Framework\Registry $registry, \Magento\Store\Model\StoreManagerInterface $storeManager, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Eav/Model/Form/Type.php b/app/code/Magento/Eav/Model/Form/Type.php index 2d2d71ed23023698e811be1e3376a3bf968d6b88..011a751799b5f40b70fa2eb64812dc97860e16bc 100644 --- a/app/code/Magento/Eav/Model/Form/Type.php +++ b/app/code/Magento/Eav/Model/Form/Type.php @@ -46,7 +46,7 @@ class Type extends \Magento\Framework\Model\AbstractModel * @param \Magento\Framework\Registry $registry * @param \Magento\Eav\Model\Form\FieldsetFactory $fieldsetFactory * @param \Magento\Eav\Model\Form\ElementFactory $elementFactory - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @codeCoverageIgnore @@ -56,7 +56,7 @@ class Type extends \Magento\Framework\Model\AbstractModel \Magento\Framework\Registry $registry, \Magento\Eav\Model\Form\FieldsetFactory $fieldsetFactory, \Magento\Eav\Model\Form\ElementFactory $elementFactory, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Eav/Model/ResourceModel/Attribute/Collection.php b/app/code/Magento/Eav/Model/ResourceModel/Attribute/Collection.php index e65443fc19d9faa415499f7262245c21bc3c8acf..b4212e0de80259b37f2bbc174477ae98015468f0 100644 --- a/app/code/Magento/Eav/Model/ResourceModel/Attribute/Collection.php +++ b/app/code/Magento/Eav/Model/ResourceModel/Attribute/Collection.php @@ -46,7 +46,7 @@ abstract class Collection extends \Magento\Eav\Model\ResourceModel\Entity\Attrib * @param \Magento\Eav\Model\Config $eavConfig * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param mixed $connection - * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource + * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource * @codeCoverageIgnore */ public function __construct( @@ -57,7 +57,7 @@ abstract class Collection extends \Magento\Eav\Model\ResourceModel\Entity\Attrib \Magento\Eav\Model\Config $eavConfig, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Framework\DB\Adapter\AdapterInterface $connection = null, - \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null + \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null ) { $this->_storeManager = $storeManager; parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $eavConfig, $connection, $resource); diff --git a/app/code/Magento/Eav/Model/ResourceModel/Config.php b/app/code/Magento/Eav/Model/ResourceModel/Config.php index cc094ce9b9087f6855c638763262b8c24f9c10a4..f4c086a01609a46a603aed710ee3bdf127de6255 100644 --- a/app/code/Magento/Eav/Model/ResourceModel/Config.php +++ b/app/code/Magento/Eav/Model/ResourceModel/Config.php @@ -10,7 +10,7 @@ namespace Magento\Eav\Model\ResourceModel; * * @author Magento Core Team <core@magentocommerce.com> */ -class Config extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Config extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Array of entity types diff --git a/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute.php b/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute.php index 6eb91a04c7fd8ef28f308e4f5ca107de8c426b55..46d4c57cf0a7a1c3602af0de224f638be4a0df11 100644 --- a/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute.php +++ b/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute.php @@ -15,7 +15,7 @@ use Magento\Framework\Model\AbstractModel; * * @author Magento Core Team <core@magentocommerce.com> */ -class Attribute extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Attribute extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Eav Entity attributes cache @@ -37,14 +37,14 @@ class Attribute extends \Magento\Framework\Model\ModelResource\Db\AbstractDb /** * Class constructor * - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param Type $eavEntityType * @param string $connectionName * @codeCoverageIgnore */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Store\Model\StoreManagerInterface $storeManager, Type $eavEntityType, $connectionName = null diff --git a/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Collection.php b/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Collection.php index 0dc661628ea62ccfcd59bd85a8aa9857a7d19cbc..b750d50f7419fe210cc2ac95c2e1d5b300b6f1a4 100644 --- a/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Collection.php +++ b/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Collection.php @@ -12,7 +12,7 @@ use Magento\Eav\Model\Entity\Type; * * @author Magento Core Team <core@magentocommerce.com> */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Add attribute set info flag @@ -33,7 +33,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab * @param \Magento\Framework\Event\ManagerInterface $eventManager * @param \Magento\Eav\Model\Config $eavConfig * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection - * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource + * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource * @codeCoverageIgnore */ public function __construct( @@ -43,7 +43,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab \Magento\Framework\Event\ManagerInterface $eventManager, \Magento\Eav\Model\Config $eavConfig, \Magento\Framework\DB\Adapter\AdapterInterface $connection = null, - \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null + \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null ) { $this->eavConfig = $eavConfig; parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource); @@ -418,7 +418,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab /** * Ad information about attribute sets to collection result data * - * @return \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection + * @return \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection */ protected function _afterLoadData() { diff --git a/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Grid/Collection.php b/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Grid/Collection.php index 1afe6d928f75557f9a86a953dee377d773cdb767..4dca475039911a4c11b730f50bd42840799daff4 100644 --- a/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Grid/Collection.php +++ b/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Grid/Collection.php @@ -5,7 +5,7 @@ */ namespace Magento\Eav\Model\ResourceModel\Entity\Attribute\Grid; -use Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection; +use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection; /** * Eav Resource Attribute Set Collection @@ -26,7 +26,7 @@ class Collection extends \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\C * @param \Magento\Framework\Event\ManagerInterface $eventManager * @param \Magento\Framework\Registry $registryManager * @param mixed $connection - * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource + * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource * @codeCoverageIgnore */ public function __construct( @@ -36,7 +36,7 @@ class Collection extends \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\C \Magento\Framework\Event\ManagerInterface $eventManager, \Magento\Framework\Registry $registryManager, \Magento\Framework\DB\Adapter\AdapterInterface $connection = null, - \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null + \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null ) { $this->_registryManager = $registryManager; parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource); @@ -45,7 +45,7 @@ class Collection extends \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\C /** * Add filter by entity type id to collection * - * @return \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection|$this + * @return \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection|$this */ protected function _initSelect() { diff --git a/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Group.php b/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Group.php index 1cc51c103a0d077c91eb4dea77eab8ecf662a76e..6a4a8f0e70ffa11ee4d6c779c6040b9757abeb85 100644 --- a/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Group.php +++ b/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Group.php @@ -10,7 +10,7 @@ namespace Magento\Eav\Model\ResourceModel\Entity\Attribute; * * @author Magento Core Team <core@magentocommerce.com> */ -class Group extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Group extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Constants for attribute group codes @@ -58,7 +58,7 @@ class Group extends \Magento\Framework\Model\ModelResource\Db\AbstractDb * Perform actions before object save * * @param \Magento\Framework\Model\AbstractModel $object - * @return \Magento\Framework\Model\ModelResource\Db\AbstractDb + * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb */ protected function _beforeSave(\Magento\Framework\Model\AbstractModel $object) { @@ -72,7 +72,7 @@ class Group extends \Magento\Framework\Model\ModelResource\Db\AbstractDb * Perform actions after object save * * @param \Magento\Framework\Model\AbstractModel $object - * @return \Magento\Framework\Model\ModelResource\Db\AbstractDb + * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb */ protected function _afterSave(\Magento\Framework\Model\AbstractModel $object) { diff --git a/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Group/Collection.php b/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Group/Collection.php index 0b6f42bad99c5a83ab2e4dda841ffa42beed1a0e..57304cbe277be0d67054980b3942eb91236d4aba 100644 --- a/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Group/Collection.php +++ b/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Group/Collection.php @@ -10,7 +10,7 @@ namespace Magento\Eav\Model\ResourceModel\Entity\Attribute\Group; * * @author Magento Core Team <core@magentocommerce.com> */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Init resource model for collection diff --git a/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Option.php b/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Option.php index aab2b48e9fd4289e2253a219cc1c5f51ea27ab5e..2bb306fa7c2e67e552b3ec1913657291d5868cae 100644 --- a/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Option.php +++ b/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Option.php @@ -10,7 +10,7 @@ namespace Magento\Eav\Model\ResourceModel\Entity\Attribute; * * @author Magento Core Team <core@magentocommerce.com> */ -class Option extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Option extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Resource initialization diff --git a/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Option/Collection.php b/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Option/Collection.php index 1af5aa93515806748e31b444097d1f3c427cba8b..730312c0940724a17495eb9ce0cd34ee348ccf16 100644 --- a/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Option/Collection.php +++ b/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Option/Collection.php @@ -10,7 +10,7 @@ namespace Magento\Eav\Model\ResourceModel\Entity\Attribute\Option; * * @author Magento Core Team <core@magentocommerce.com> */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Option value table @@ -37,7 +37,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab * @param \Magento\Framework\App\ResourceConnection $coreResource * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param mixed $connection - * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource + * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource * @codeCoverageIgnore */ public function __construct( @@ -48,7 +48,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab \Magento\Framework\App\ResourceConnection $coreResource, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Framework\DB\Adapter\AdapterInterface $connection = null, - \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null + \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null ) { $this->_storeManager = $storeManager; $this->_coreResource = $coreResource; diff --git a/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Set.php b/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Set.php index 73463d6bf41b6a05702baea20a02684926fbb59d..913be1826cab74d61377e0e381693c70d2e91752 100644 --- a/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Set.php +++ b/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Set.php @@ -10,7 +10,7 @@ namespace Magento\Eav\Model\ResourceModel\Entity\Attribute; * * @author Magento Core Team <core@magentocommerce.com> */ -class Set extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Set extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * EAV cache ids @@ -28,14 +28,14 @@ class Set extends \Magento\Framework\Model\ModelResource\Db\AbstractDb protected $eavConfig; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param GroupFactory $attrGroupFactory * @param \Magento\Eav\Model\Config $eavConfig * @param string $connectionName * @codeCoverageIgnore */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Eav\Model\ResourceModel\Entity\Attribute\GroupFactory $attrGroupFactory, \Magento\Eav\Model\Config $eavConfig, $connectionName = null diff --git a/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Set/Collection.php b/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Set/Collection.php index b387d79d3f8500ebf3fab17262284150c6fefb4c..63cd97ef0d80acc6c18d9fb8f7c92c0c2412e5ae 100644 --- a/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Set/Collection.php +++ b/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Set/Collection.php @@ -10,7 +10,7 @@ namespace Magento\Eav\Model\ResourceModel\Entity\Attribute\Set; * * @author Magento Core Team <core@magentocommerce.com> */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Resource initialization diff --git a/app/code/Magento/Eav/Model/ResourceModel/Entity/Store.php b/app/code/Magento/Eav/Model/ResourceModel/Entity/Store.php index 3ac344709ef6321c3a5557627bf8511499c5066b..eddbe7edce3ea6d505903d89e68657781f92945c 100644 --- a/app/code/Magento/Eav/Model/ResourceModel/Entity/Store.php +++ b/app/code/Magento/Eav/Model/ResourceModel/Entity/Store.php @@ -13,7 +13,7 @@ use Magento\Framework\DataObject; * * @author Magento Core Team <core@magentocommerce.com> */ -class Store extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Store extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Resource initialization diff --git a/app/code/Magento/Eav/Model/ResourceModel/Entity/Type.php b/app/code/Magento/Eav/Model/ResourceModel/Entity/Type.php index 27962971bcc56dabdde816dff74e2e34ff4267c3..0b54022ab9960c06a3295d96f8cb1faa5edfe244 100644 --- a/app/code/Magento/Eav/Model/ResourceModel/Entity/Type.php +++ b/app/code/Magento/Eav/Model/ResourceModel/Entity/Type.php @@ -10,7 +10,7 @@ namespace Magento\Eav\Model\ResourceModel\Entity; * * @author Magento Core Team <core@magentocommerce.com> */ -class Type extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Type extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Resource initialization diff --git a/app/code/Magento/Eav/Model/ResourceModel/Entity/Type/Collection.php b/app/code/Magento/Eav/Model/ResourceModel/Entity/Type/Collection.php index d95ba269528984ad9a25d01c930c310f6b3aa315..769bff41b50ca9ff768303e8083388cb86a07228 100644 --- a/app/code/Magento/Eav/Model/ResourceModel/Entity/Type/Collection.php +++ b/app/code/Magento/Eav/Model/ResourceModel/Entity/Type/Collection.php @@ -10,7 +10,7 @@ namespace Magento\Eav\Model\ResourceModel\Entity\Type; * * @author Magento Core Team <core@magentocommerce.com> */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Resource initialization diff --git a/app/code/Magento/Eav/Model/ResourceModel/Form/Attribute.php b/app/code/Magento/Eav/Model/ResourceModel/Form/Attribute.php index a4612becca0e8936a96ec49c5d76769232ee63e6..53aec9967498224629038397fc7a591aa7f6dc4d 100644 --- a/app/code/Magento/Eav/Model/ResourceModel/Form/Attribute.php +++ b/app/code/Magento/Eav/Model/ResourceModel/Form/Attribute.php @@ -11,7 +11,7 @@ */ namespace Magento\Eav\Model\ResourceModel\Form; -abstract class Attribute extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +abstract class Attribute extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Return form attribute IDs by form code diff --git a/app/code/Magento/Eav/Model/ResourceModel/Form/Attribute/Collection.php b/app/code/Magento/Eav/Model/ResourceModel/Form/Attribute/Collection.php index 45d58985f0fe0dfb89adeb36c6ef3738bcd7f902..2e364087647622b038152b806397c2d553216a2b 100644 --- a/app/code/Magento/Eav/Model/ResourceModel/Form/Attribute/Collection.php +++ b/app/code/Magento/Eav/Model/ResourceModel/Form/Attribute/Collection.php @@ -10,7 +10,7 @@ namespace Magento\Eav\Model\ResourceModel\Form\Attribute; * * @author Magento Core Team <core@magentocommerce.com> */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Current module pathname @@ -58,7 +58,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab * @param \Magento\Eav\Model\Config $eavConfig * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param mixed $connection - * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource + * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource * @codeCoverageIgnore */ public function __construct( @@ -69,7 +69,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab \Magento\Eav\Model\Config $eavConfig, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Framework\DB\Adapter\AdapterInterface $connection = null, - \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null + \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null ) { $this->_storeManager = $storeManager; $this->_eavConfig = $eavConfig; diff --git a/app/code/Magento/Eav/Model/ResourceModel/Form/Element.php b/app/code/Magento/Eav/Model/ResourceModel/Form/Element.php index 997fe96c0d61738bb199e332e6dcfdb208b6b8d2..82772b7436f1a62c9c8bec53e015e2015b0188ab 100644 --- a/app/code/Magento/Eav/Model/ResourceModel/Form/Element.php +++ b/app/code/Magento/Eav/Model/ResourceModel/Form/Element.php @@ -10,7 +10,7 @@ namespace Magento\Eav\Model\ResourceModel\Form; * * @author Magento Core Team <core@magentocommerce.com> */ -class Element extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Element extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Initialize connection and define main table diff --git a/app/code/Magento/Eav/Model/ResourceModel/Form/Element/Collection.php b/app/code/Magento/Eav/Model/ResourceModel/Form/Element/Collection.php index 8acab7d4249eacd9434f05df0a6ec71394589aca..3f1fc938e124ad2df070ffe0244d51fac5c150e2 100644 --- a/app/code/Magento/Eav/Model/ResourceModel/Form/Element/Collection.php +++ b/app/code/Magento/Eav/Model/ResourceModel/Form/Element/Collection.php @@ -10,7 +10,7 @@ namespace Magento\Eav\Model\ResourceModel\Form\Element; * * @author Magento Core Team <core@magentocommerce.com> */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Initialize collection model diff --git a/app/code/Magento/Eav/Model/ResourceModel/Form/Fieldset.php b/app/code/Magento/Eav/Model/ResourceModel/Form/Fieldset.php index 58a6960591b062ff0d2ae9d9da3558c257f7e912..7b6897229aab83d91c50157b3a2f44153346c910 100644 --- a/app/code/Magento/Eav/Model/ResourceModel/Form/Fieldset.php +++ b/app/code/Magento/Eav/Model/ResourceModel/Form/Fieldset.php @@ -14,7 +14,7 @@ use Magento\Framework\Model\AbstractModel; * * @author Magento Core Team <core@magentocommerce.com> */ -class Fieldset extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Fieldset extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Initialize connection and define main table diff --git a/app/code/Magento/Eav/Model/ResourceModel/Form/Fieldset/Collection.php b/app/code/Magento/Eav/Model/ResourceModel/Form/Fieldset/Collection.php index 171f9246305c32a3501cf93243ed1eb4b0535b7a..3d6feedcc1cddaa49cc0aaa4fb6aae591722f5b5 100644 --- a/app/code/Magento/Eav/Model/ResourceModel/Form/Fieldset/Collection.php +++ b/app/code/Magento/Eav/Model/ResourceModel/Form/Fieldset/Collection.php @@ -16,11 +16,11 @@ use Magento\Framework\Data\Collection\EntityFactory; use Magento\Eav\Model\Form\Type; use Magento\Framework\Event\ManagerInterface; use Magento\Framework\Data\Collection\Db\FetchStrategyInterface; -use Magento\Framework\Model\ModelResource\Db\AbstractDb; +use Magento\Framework\Model\ResourceModel\Db\AbstractDb; use Psr\Log\LoggerInterface as Logger; use Magento\Store\Model\StoreManagerInterface; -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * @var StoreManagerInterface diff --git a/app/code/Magento/Eav/Model/ResourceModel/Form/Type.php b/app/code/Magento/Eav/Model/ResourceModel/Form/Type.php index f08f56e1499347e2859ccd6bb5b9ca2235820cd3..38535f4831db3ece09c8fad3363f59e4a7e5ecfd 100644 --- a/app/code/Magento/Eav/Model/ResourceModel/Form/Type.php +++ b/app/code/Magento/Eav/Model/ResourceModel/Form/Type.php @@ -13,7 +13,7 @@ use Magento\Framework\Model\AbstractModel; * * @author Magento Core Team <core@magentocommerce.com> */ -class Type extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Type extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Initialize connection and define main table @@ -71,7 +71,7 @@ class Type extends \Magento\Framework\Model\ModelResource\Db\AbstractDb /** * Save entity types after save form type * - * @see \Magento\Framework\Model\ModelResource\Db\AbstractDb#_afterSave($object) + * @see \Magento\Framework\Model\ResourceModel\Db\AbstractDb#_afterSave($object) * * @param FormType|AbstractModel $object * @return $this diff --git a/app/code/Magento/Eav/Model/ResourceModel/Form/Type/Collection.php b/app/code/Magento/Eav/Model/ResourceModel/Form/Type/Collection.php index cee833b666020295f40f30bd4d822e1702d56cd1..5fcb127bca110eb4efb4c0d6d4c7c0542740b2a6 100644 --- a/app/code/Magento/Eav/Model/ResourceModel/Form/Type/Collection.php +++ b/app/code/Magento/Eav/Model/ResourceModel/Form/Type/Collection.php @@ -13,7 +13,7 @@ namespace Magento\Eav\Model\ResourceModel\Form\Type; use Magento\Eav\Model\Entity\Type; -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Initialize collection model diff --git a/app/code/Magento/Eav/Test/Unit/Model/Entity/Collection/VersionControl/AbstractCollectionTest.php b/app/code/Magento/Eav/Test/Unit/Model/Entity/Collection/VersionControl/AbstractCollectionTest.php index 6782fb524cc9c046615dddec6e42c2997de38645..6a0aa5039c69c47714e43afb2d12687ffbabbdda 100644 --- a/app/code/Magento/Eav/Test/Unit/Model/Entity/Collection/VersionControl/AbstractCollectionTest.php +++ b/app/code/Magento/Eav/Test/Unit/Model/Entity/Collection/VersionControl/AbstractCollectionTest.php @@ -21,7 +21,7 @@ class AbstractCollectionTest extends \Magento\Eav\Test\Unit\Model\Entity\Collect protected $subject; /** - * @var \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject */ protected $entitySnapshot; @@ -32,7 +32,7 @@ class AbstractCollectionTest extends \Magento\Eav\Test\Unit\Model\Entity\Collect $objectManager = new ObjectManager($this); $this->entitySnapshot = $this->getMock( - 'Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot', + 'Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot', ['registerSnapshot'], [], '', diff --git a/app/code/Magento/Eav/Test/Unit/Model/Entity/TypeTest.php b/app/code/Magento/Eav/Test/Unit/Model/Entity/TypeTest.php index 69d0a66513ca279bc62bdb65adfedd3eb19060bd..7d578fa8d577cd3fcbce2434b25fd19291f5fa36 100644 --- a/app/code/Magento/Eav/Test/Unit/Model/Entity/TypeTest.php +++ b/app/code/Magento/Eav/Test/Unit/Model/Entity/TypeTest.php @@ -80,7 +80,7 @@ class TypeTest extends \PHPUnit_Framework_TestCase false ); $this->resourceMock = $this->getMockForAbstractClass( - 'Magento\Framework\Model\ModelResource\Db\AbstractDb', + 'Magento\Framework\Model\ResourceModel\Db\AbstractDb', [], '', false, diff --git a/app/code/Magento/Eav/Test/Unit/Model/Entity/VersionControl/AbstractEntityTest.php b/app/code/Magento/Eav/Test/Unit/Model/Entity/VersionControl/AbstractEntityTest.php index c0cd702328177876f85a010dc43d439c3cf5c4eb..8c98d7c65899f16ef6eed570bff5092bf8f2afda 100644 --- a/app/code/Magento/Eav/Test/Unit/Model/Entity/VersionControl/AbstractEntityTest.php +++ b/app/code/Magento/Eav/Test/Unit/Model/Entity/VersionControl/AbstractEntityTest.php @@ -6,7 +6,7 @@ namespace Magento\Eav\Test\Unit\Model\Entity\VersionControl; use Magento\Eav\Model\Entity\VersionControl\AbstractEntity; -use Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite; +use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; /** @@ -15,7 +15,7 @@ use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; class AbstractEntityTest extends \Magento\Eav\Test\Unit\Model\Entity\AbstractEntityTest { /** - * @var \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject */ protected $entitySnapshot; @@ -27,7 +27,7 @@ class AbstractEntityTest extends \Magento\Eav\Test\Unit\Model\Entity\AbstractEnt protected function setUp() { $this->entitySnapshot = $this->getMock( - 'Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot', + 'Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot', ['isModified', 'registerSnapshot'], [], '', @@ -35,7 +35,7 @@ class AbstractEntityTest extends \Magento\Eav\Test\Unit\Model\Entity\AbstractEnt ); $this->entityRelationComposite = $this->getMock( - 'Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite', + 'Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite', ['processRelations'], [], '', diff --git a/app/code/Magento/Eav/Test/Unit/Model/Entity/VersionControl/MetadataTest.php b/app/code/Magento/Eav/Test/Unit/Model/Entity/VersionControl/MetadataTest.php index f7532efa226c3341da9233a96c5627e866691d8b..070dbdaa28f9e05d083c945c301e9ad8abdd3bff 100644 --- a/app/code/Magento/Eav/Test/Unit/Model/Entity/VersionControl/MetadataTest.php +++ b/app/code/Magento/Eav/Test/Unit/Model/Entity/VersionControl/MetadataTest.php @@ -23,7 +23,7 @@ class MetadataTest extends \PHPUnit_Framework_TestCase protected $model; /** - * @var \Magento\Framework\Model\ModelResource\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject */ protected $resource; diff --git a/app/code/Magento/Eav/Test/Unit/Model/ResourceModel/Attribute/CollectionTest.php b/app/code/Magento/Eav/Test/Unit/Model/ResourceModel/Attribute/CollectionTest.php index b456cd248c55192b59db6f29e4d77bd6eb5f1101..9424e4d62a99c33c9ea5ad9250ba93e2a37a9945 100644 --- a/app/code/Magento/Eav/Test/Unit/Model/ResourceModel/Attribute/CollectionTest.php +++ b/app/code/Magento/Eav/Test/Unit/Model/ResourceModel/Attribute/CollectionTest.php @@ -56,7 +56,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase protected $connectionMock; /** - * @var \Magento\Framework\Model\ModelResource\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject */ protected $resourceMock; @@ -94,7 +94,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase $this->select = new \Magento\Framework\DB\Select($this->connectionMock); $this->resourceMock = $this->getMockForAbstractClass( - 'Magento\Framework\Model\ModelResource\Db\AbstractDb', + 'Magento\Framework\Model\ResourceModel\Db\AbstractDb', [], '', false, diff --git a/app/code/Magento/Eav/Test/Unit/Model/ResourceModel/Entity/Attribute/Option/CollectionTest.php b/app/code/Magento/Eav/Test/Unit/Model/ResourceModel/Entity/Attribute/Option/CollectionTest.php index cfbfb8fd54591243a3422a4b86bb66e2bed099a0..2da0008b0771dd4bde1eb6af5ce3716d59013b6d 100644 --- a/app/code/Magento/Eav/Test/Unit/Model/ResourceModel/Entity/Attribute/Option/CollectionTest.php +++ b/app/code/Magento/Eav/Test/Unit/Model/ResourceModel/Entity/Attribute/Option/CollectionTest.php @@ -48,7 +48,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase protected $connectionMock; /** - * @var \Magento\Framework\Model\ModelResource\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject */ protected $resourceMock; @@ -91,7 +91,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase ); $this->connectionMock = $this->getMock('Magento\Framework\DB\Adapter\Pdo\Mysql', [], [], '', false); $this->resourceMock = $this->getMockForAbstractClass( - 'Magento\Framework\Model\ModelResource\Db\AbstractDb', + 'Magento\Framework\Model\ResourceModel\Db\AbstractDb', [], '', false, diff --git a/app/code/Magento/Eav/Test/Unit/Model/ResourceModel/Entity/Attribute/SetTest.php b/app/code/Magento/Eav/Test/Unit/Model/ResourceModel/Entity/Attribute/SetTest.php index 0de43ba3fdaf876216514bdf91603b2585b95ba1..f554327bf7644d8af50963a1406091ed90a1a895 100644 --- a/app/code/Magento/Eav/Test/Unit/Model/ResourceModel/Entity/Attribute/SetTest.php +++ b/app/code/Magento/Eav/Test/Unit/Model/ResourceModel/Entity/Attribute/SetTest.php @@ -56,16 +56,16 @@ class SetTest extends \PHPUnit_Framework_TestCase ->setMethods(['getConnection', 'getTableName']) ->getMock(); $this->transactionManagerMock = $this->getMock( - '\Magento\Framework\Model\ModelResource\Db\TransactionManagerInterface' + '\Magento\Framework\Model\ResourceModel\Db\TransactionManagerInterface' ); $this->relationProcessor = $this->getMock( - '\Magento\Framework\Model\ModelResource\Db\ObjectRelationProcessor', + '\Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor', [], [], '', false ); - $contextMock = $this->getMock('Magento\Framework\Model\ModelResource\Db\Context', [], [], '', false); + $contextMock = $this->getMock('Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false); $contextMock->expects($this->once()) ->method('getTransactionManager') ->willReturn($this->transactionManagerMock); diff --git a/app/code/Magento/Eav/Test/Unit/Model/ResourceModel/Entity/AttributeTest.php b/app/code/Magento/Eav/Test/Unit/Model/ResourceModel/Entity/AttributeTest.php index 24558ba8092b25f3c0e87b849e6e6091259c1af6..f1ec1a31b9888dde8defc91df9707b1dbebdc085 100644 --- a/app/code/Magento/Eav/Test/Unit/Model/ResourceModel/Entity/AttributeTest.php +++ b/app/code/Magento/Eav/Test/Unit/Model/ResourceModel/Entity/AttributeTest.php @@ -296,14 +296,14 @@ class AttributeTest extends \PHPUnit_Framework_TestCase $eavEntityType = $this->getMock('Magento\Eav\Model\ResourceModel\Entity\Type', [], [], '', false, false); $relationProcessorMock = $this->getMock( - '\Magento\Framework\Model\ModelResource\Db\ObjectRelationProcessor', + '\Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor', [], [], '', false ); - $contextMock = $this->getMock('\Magento\Framework\Model\ModelResource\Db\Context', [], [], '', false); + $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false); $contextMock->expects($this->once())->method('getResources')->willReturn($resource); $contextMock->expects($this->once())->method('getObjectRelationProcessor')->willReturn($relationProcessorMock); diff --git a/app/code/Magento/Email/Model/ResourceModel/Template.php b/app/code/Magento/Email/Model/ResourceModel/Template.php index bcc8efc5e727e246a517cb45cc275355a7f9768f..2196c831348c2c8219c1bcdf6ad0a28ac8202c87 100644 --- a/app/code/Magento/Email/Model/ResourceModel/Template.php +++ b/app/code/Magento/Email/Model/ResourceModel/Template.php @@ -12,7 +12,7 @@ use Magento\Framework\Model\AbstractModel; * * @author Magento Core Team <core@magentocommerce.com> */ -class Template extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Template extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * @var \Magento\Framework\Stdlib\DateTime @@ -20,12 +20,12 @@ class Template extends \Magento\Framework\Model\ModelResource\Db\AbstractDb protected $dateTime; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Framework\Stdlib\DateTime $dateTime * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Framework\Stdlib\DateTime $dateTime, $connectionName = null ) { diff --git a/app/code/Magento/Email/Model/ResourceModel/Template/Collection.php b/app/code/Magento/Email/Model/ResourceModel/Template/Collection.php index 5f35b0b66572ce16d5cf557347169e18c15d4578..018aed027e16b425c0e3dbb59b447877eaef8b98 100644 --- a/app/code/Magento/Email/Model/ResourceModel/Template/Collection.php +++ b/app/code/Magento/Email/Model/ResourceModel/Template/Collection.php @@ -10,7 +10,7 @@ namespace Magento\Email\Model\ResourceModel\Template; * * @author Magento Core Team <core@magentocommerce.com> */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Template table name diff --git a/app/code/Magento/Email/Model/Template/Filter.php b/app/code/Magento/Email/Model/Template/Filter.php index e8a50715085442b9a8c785873c589a2e0cc641b9..ebe3d0d8e2974409158217668265124e261bc860 100644 --- a/app/code/Magento/Email/Model/Template/Filter.php +++ b/app/code/Magento/Email/Model/Template/Filter.php @@ -214,7 +214,6 @@ class Filter extends \Magento\Framework\Filter\Template /** * Setter whether SID is allowed in store directive - * Doesn't set anything intentionally, since SID is not allowed in any kind of emails * * @param bool $flag * @return $this diff --git a/app/code/Magento/Email/view/adminhtml/templates/template/edit.phtml b/app/code/Magento/Email/view/adminhtml/templates/template/edit.phtml index 6ca97943019f9a2a128f6dd78c716b1fa3a1176a..7036d332825c43d4068879ebccf080a4993c74b2 100644 --- a/app/code/Magento/Email/view/adminhtml/templates/template/edit.phtml +++ b/app/code/Magento/Email/view/adminhtml/templates/template/edit.phtml @@ -59,10 +59,11 @@ use Magento\Framework\App\TemplateTypesInterface; require([ "jquery", "tinymce", + "Magento_Ui/js/modal/alert", "mage/mage", "Magento_Variable/variables", "prototype" -], function(jQuery, tinyMCE){ +], function(jQuery, tinyMCE, alert){ //<![CDATA[ jQuery('#email_template_edit_form').mage('form').mage('validation'); @@ -207,7 +208,9 @@ require([ } }.bind(this)); } else { - alert('<?php /* @escapeNotVerified */ echo __('The template did not load. Please review the log for details.') ?>'); + alert({ + content: '<?php /* @escapeNotVerified */ echo __('The template did not load. Please review the log for details.') ?>' + }); } }.bind(this) }); diff --git a/app/code/Magento/EncryptionKey/Model/ResourceModel/Key/Change.php b/app/code/Magento/EncryptionKey/Model/ResourceModel/Key/Change.php index 7e2202db2c81488c292a4d06bb466212fe874c4f..5daa8da5d227e64edea5b41663574824abe54a5f 100644 --- a/app/code/Magento/EncryptionKey/Model/ResourceModel/Key/Change.php +++ b/app/code/Magento/EncryptionKey/Model/ResourceModel/Key/Change.php @@ -14,7 +14,7 @@ use Magento\Framework\Config\File\ConfigFilePool; * Encryption key changer resource model * The operation must be done in one transaction */ -class Change extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Change extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Encryptor interface @@ -45,7 +45,7 @@ class Change extends \Magento\Framework\Model\ModelResource\Db\AbstractDb protected $writer; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Framework\Filesystem $filesystem * @param \Magento\Config\Model\Config\Structure $structure * @param \Magento\Framework\Encryption\EncryptorInterface $encryptor @@ -53,7 +53,7 @@ class Change extends \Magento\Framework\Model\ModelResource\Db\AbstractDb * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Framework\Filesystem $filesystem, \Magento\Config\Model\Config\Structure $structure, \Magento\Framework\Encryption\EncryptorInterface $encryptor, diff --git a/app/code/Magento/EncryptionKey/Test/Unit/Model/ResourceModel/Key/ChangeTest.php b/app/code/Magento/EncryptionKey/Test/Unit/Model/ResourceModel/Key/ChangeTest.php index 53f89136b82f859ba8eb051f6bffa4c07c228932..55286de60bca43654318c71ceb153cd84f63ce57 100644 --- a/app/code/Magento/EncryptionKey/Test/Unit/Model/ResourceModel/Key/ChangeTest.php +++ b/app/code/Magento/EncryptionKey/Test/Unit/Model/ResourceModel/Key/ChangeTest.php @@ -25,7 +25,7 @@ class ChangeTest extends \PHPUnit_Framework_TestCase protected $resourceMock; /** @var \Magento\Framework\DB\Select|\PHPUnit_Framework_MockObject_MockObject */ protected $selectMock; - /** @var \Magento\Framework\Model\ModelResource\Db\TransactionManagerInterface */ + /** @var \Magento\Framework\Model\ResourceModel\Db\TransactionManagerInterface */ protected $tansactionMock; /** @var |\PHPUnit_Framework_MockObject_MockObject */ protected $objRelationMock; @@ -62,12 +62,12 @@ class ChangeTest extends \PHPUnit_Framework_TestCase ->disableOriginalConstructor() ->setMethods([]) ->getMock(); - $translationClassName = 'Magento\Framework\Model\ModelResource\Db\TransactionManagerInterface'; + $translationClassName = 'Magento\Framework\Model\ResourceModel\Db\TransactionManagerInterface'; $this->tansactionMock = $this->getMockBuilder($translationClassName) ->disableOriginalConstructor() ->setMethods([]) ->getMock(); - $relationClassName = 'Magento\Framework\Model\ModelResource\Db\ObjectRelationProcessor'; + $relationClassName = 'Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor'; $this->objRelationMock = $this->getMockBuilder($relationClassName) ->disableOriginalConstructor() ->setMethods([]) diff --git a/app/code/Magento/Fedex/Model/Carrier.php b/app/code/Magento/Fedex/Model/Carrier.php index 2600509ba068d7f37a36ca4fc52a3a58ec6940d8..90275b764741db6a9c67f22ccdf63fd3bac2cdea 100644 --- a/app/code/Magento/Fedex/Model/Carrier.php +++ b/app/code/Magento/Fedex/Model/Carrier.php @@ -1282,6 +1282,8 @@ class Carrier extends AbstractCarrierOnline implements \Magento\Shipping\Model\C } $paymentType = $request->getIsReturn() ? 'RECIPIENT' : 'SENDER'; + $optionType = $request->getShippingMethod() == self::RATE_REQUEST_SMARTPOST + ? 'SERVICE_DEFAULT' : $packageParams->getDeliveryConfirmation(); $requestClient = [ 'RequestedShipment' => [ 'ShipTimestamp' => time(), @@ -1344,7 +1346,7 @@ class Carrier extends AbstractCarrierOnline implements \Magento\Shipping\Model\C ], 'SpecialServicesRequested' => [ 'SpecialServiceTypes' => 'SIGNATURE_OPTION', - 'SignatureOptionDetail' => ['OptionType' => $packageParams->getDeliveryConfirmation()], + 'SignatureOptionDetail' => ['OptionType' => $optionType], ], ], ], @@ -1382,6 +1384,13 @@ class Carrier extends AbstractCarrierOnline implements \Magento\Shipping\Model\C $requestClient['RequestedShipment']['MasterTrackingId'] = $request->getMasterTrackingId(); } + if ($request->getShippingMethod() == self::RATE_REQUEST_SMARTPOST) { + $requestClient['RequestedShipment']['SmartPostDetail'] = [ + 'Indicia' => (double)$request->getPackageWeight() >= 1 ? 'PARCEL_SELECT' : 'PRESORTED_STANDARD', + 'HubId' => $this->getConfigData('smartpost_hubid'), + ]; + } + // set dimensions if ($length || $width || $height) { $requestClient['RequestedShipment']['RequestedPackageLineItems']['Dimensions'] = []; @@ -1411,7 +1420,9 @@ class Carrier extends AbstractCarrierOnline implements \Magento\Shipping\Model\C if ($response->HighestSeverity != 'FAILURE' && $response->HighestSeverity != 'ERROR') { $shippingLabelContent = $response->CompletedShipmentDetail->CompletedPackageDetails->Label->Parts->Image; - $trackingNumber = $response->CompletedShipmentDetail->CompletedPackageDetails->TrackingIds->TrackingNumber; + $trackingNumber = $this->getTrackingNumber( + $response->CompletedShipmentDetail->CompletedPackageDetails->TrackingIds + ); $result->setShippingLabelContent($shippingLabelContent); $result->setTrackingNumber($trackingNumber); $debugData = ['request' => $client->__getLastRequest(), 'result' => $client->__getLastResponse()]; @@ -1438,6 +1449,19 @@ class Carrier extends AbstractCarrierOnline implements \Magento\Shipping\Model\C return $result; } + /** + * @param array|object $trackingIds + * @return string + */ + private function getTrackingNumber($trackingIds) { + return is_array($trackingIds) ? array_map( + function($val) { + return $val->TrackingNumber; + }, + $trackingIds + ) : $trackingIds->TrackingNumber; + } + /** * For multi package shipments. Delete requested shipments if the current shipment * request is failed diff --git a/app/code/Magento/GiftMessage/Model/ResourceModel/Message.php b/app/code/Magento/GiftMessage/Model/ResourceModel/Message.php index 94b1218051dcf89011b4b6b91cb894c15d9caddf..5d9b36fd8ee896d4a3c95f4a9849d09f336c836e 100644 --- a/app/code/Magento/GiftMessage/Model/ResourceModel/Message.php +++ b/app/code/Magento/GiftMessage/Model/ResourceModel/Message.php @@ -10,7 +10,7 @@ namespace Magento\GiftMessage\Model\ResourceModel; * * @author Magento Core Team <core@magentocommerce.com> */ -class Message extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Message extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Define main table diff --git a/app/code/Magento/GiftMessage/Model/ResourceModel/Message/Collection.php b/app/code/Magento/GiftMessage/Model/ResourceModel/Message/Collection.php index 5ca342875b6f89b77f92f3ae537aec983c73adca..c948edf1cd02b3b69495d90a40070d9f222de866 100644 --- a/app/code/Magento/GiftMessage/Model/ResourceModel/Message/Collection.php +++ b/app/code/Magento/GiftMessage/Model/ResourceModel/Message/Collection.php @@ -10,7 +10,7 @@ namespace Magento\GiftMessage\Model\ResourceModel\Message; * * @author Magento Core Team <core@magentocommerce.com> */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Initialize resource model diff --git a/app/code/Magento/GiftMessage/etc/adminhtml/events.xml b/app/code/Magento/GiftMessage/etc/adminhtml/events.xml index 5cd35ccf18fcd5b3b88da47d503c8204d0f26aec..042fe5b81ddc6ce7975fe7c7f2ae8f89b614e6c5 100644 --- a/app/code/Magento/GiftMessage/etc/adminhtml/events.xml +++ b/app/code/Magento/GiftMessage/etc/adminhtml/events.xml @@ -7,12 +7,12 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="sales_model_service_quote_submit_before"> - <observer name="giftmessage" instance="Magento\GiftMessage\Observer\SalesEventQuoteSubmitBeforeObserver" method="execute" shared="false" /> + <observer name="giftmessage" instance="Magento\GiftMessage\Observer\SalesEventQuoteSubmitBeforeObserver" shared="false" /> </event> <event name="sales_convert_order_to_quote"> - <observer name="giftmessage" instance="Magento\GiftMessage\Observer\SalesEventOrderToQuoteObserver" method="execute" shared="false" /> + <observer name="giftmessage" instance="Magento\GiftMessage\Observer\SalesEventOrderToQuoteObserver" shared="false" /> </event> <event name="sales_convert_order_item_to_quote_item"> - <observer name="giftmessage" instance="Magento\GiftMessage\Observer\SalesEventOrderItemToQuoteItemObserver" method="execute" shared="false" /> + <observer name="giftmessage" instance="Magento\GiftMessage\Observer\SalesEventOrderItemToQuoteItemObserver" shared="false" /> </event> </config> diff --git a/app/code/Magento/GiftMessage/etc/frontend/events.xml b/app/code/Magento/GiftMessage/etc/frontend/events.xml index 96a7f216d9735b701c06acb579325f26c7fd4bd6..6916b447c5fd981f8b8bda063ac526beed9e1cdf 100644 --- a/app/code/Magento/GiftMessage/etc/frontend/events.xml +++ b/app/code/Magento/GiftMessage/etc/frontend/events.xml @@ -7,12 +7,12 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="sales_model_service_quote_submit_before"> - <observer name="giftmessage" instance="Magento\GiftMessage\Observer\SalesEventQuoteSubmitBeforeObserver" method="execute" shared="false" /> + <observer name="giftmessage" instance="Magento\GiftMessage\Observer\SalesEventQuoteSubmitBeforeObserver" shared="false" /> </event> <event name="sales_convert_order_to_quote"> - <observer name="giftmessage" instance="Magento\GiftMessage\Observer\SalesEventOrderToQuoteObserver" method="execute" shared="false" /> + <observer name="giftmessage" instance="Magento\GiftMessage\Observer\SalesEventOrderToQuoteObserver" shared="false" /> </event> <event name="checkout_type_multishipping_create_orders_single"> - <observer name="giftmessage" instance="Magento\GiftMessage\Observer\MultishippingEventCreateOrdersObserver" method="execute" shared="false" /> + <observer name="giftmessage" instance="Magento\GiftMessage\Observer\MultishippingEventCreateOrdersObserver" shared="false" /> </event> </config> diff --git a/app/code/Magento/GiftMessage/etc/webapi_rest/events.xml b/app/code/Magento/GiftMessage/etc/webapi_rest/events.xml index 454d97783b05904d46aebd36a98eac1fd736c47b..99d79259160c1912aeddcfdb0a0fcabf3886d84f 100644 --- a/app/code/Magento/GiftMessage/etc/webapi_rest/events.xml +++ b/app/code/Magento/GiftMessage/etc/webapi_rest/events.xml @@ -7,6 +7,6 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="sales_model_service_quote_submit_before"> - <observer name="giftmessage" instance="Magento\GiftMessage\Observer\SalesEventQuoteSubmitBeforeObserver" method="execute" shared="false" /> + <observer name="giftmessage" instance="Magento\GiftMessage\Observer\SalesEventQuoteSubmitBeforeObserver" shared="false" /> </event> </config> diff --git a/app/code/Magento/GiftMessage/view/frontend/web/js/model/gift-message.js b/app/code/Magento/GiftMessage/view/frontend/web/js/model/gift-message.js index ad91613b1364535ec43548e251bb46fefb67ec5f..502e3ab77d2a9d5bc5e8298dbf1084b99cee57b6 100644 --- a/app/code/Magento/GiftMessage/view/frontend/web/js/model/gift-message.js +++ b/app/code/Magento/GiftMessage/view/frontend/web/js/model/gift-message.js @@ -3,9 +3,12 @@ * See COPYING.txt for license details. */ /*global define*/ -define(['Magento_Ui/js/lib/component/provider', 'underscore', 'mage/url'], - function (provider, _, url) { - "use strict"; +define(['uiElement', 'underscore', 'mage/url'], + function (uiElement, _, url) { + 'use strict'; + + var provider = uiElement(); + return function (itemId) { var model = { id: 'message-' + itemId, diff --git a/app/code/Magento/GoogleAdwords/Model/Config/Backend/AbstractConversion.php b/app/code/Magento/GoogleAdwords/Model/Config/Backend/AbstractConversion.php index f072d2114d675b7efbac923be7c510203d9a96ee..b3cc66a1ed13c0bd06ae5ffdc4bc35b06aa892ea 100644 --- a/app/code/Magento/GoogleAdwords/Model/Config/Backend/AbstractConversion.php +++ b/app/code/Magento/GoogleAdwords/Model/Config/Backend/AbstractConversion.php @@ -28,7 +28,7 @@ abstract class AbstractConversion extends \Magento\Framework\App\Config\Value * @param \Magento\Framework\App\Config\ScopeConfigInterface $config * @param \Magento\Framework\Validator\DataObjectFactory $validatorCompositeFactory * @param \Magento\GoogleAdwords\Model\Validator\Factory $validatorFactory - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -38,7 +38,7 @@ abstract class AbstractConversion extends \Magento\Framework\App\Config\Value \Magento\Framework\App\Config\ScopeConfigInterface $config, \Magento\Framework\Validator\DataObjectFactory $validatorCompositeFactory, \Magento\GoogleAdwords\Model\Validator\Factory $validatorFactory, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/GoogleAdwords/etc/frontend/events.xml b/app/code/Magento/GoogleAdwords/etc/frontend/events.xml index 100800e6cfbd59581b5c214756d059ef10d1e3da..648c5e6c5e8158c9d16c8309de35178ee3699e99 100644 --- a/app/code/Magento/GoogleAdwords/etc/frontend/events.xml +++ b/app/code/Magento/GoogleAdwords/etc/frontend/events.xml @@ -7,9 +7,9 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="checkout_onepage_controller_success_action"> - <observer name="googleadwords_order_success" instance="Magento\GoogleAdwords\Observer\SetConversionValueObserver" method="execute" /> + <observer name="googleadwords_order_success" instance="Magento\GoogleAdwords\Observer\SetConversionValueObserver" /> </event> <event name="multishipping_checkout_controller_success_action"> - <observer name="googleadwords_order_success" instance="Magento\GoogleAdwords\Observer\SetConversionValueObserver" method="execute" /> + <observer name="googleadwords_order_success" instance="Magento\GoogleAdwords\Observer\SetConversionValueObserver" /> </event> </config> diff --git a/app/code/Magento/GoogleAnalytics/etc/frontend/events.xml b/app/code/Magento/GoogleAnalytics/etc/frontend/events.xml index 0b6c14e9e39394c7d399ec9a612586de7a5e91a7..7d461c99f8c3f0d8fd94730a2b84224a12302935 100644 --- a/app/code/Magento/GoogleAnalytics/etc/frontend/events.xml +++ b/app/code/Magento/GoogleAnalytics/etc/frontend/events.xml @@ -7,9 +7,9 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="checkout_onepage_controller_success_action"> - <observer name="googleanalytics_order_success" instance="Magento\GoogleAnalytics\Observer\SetGoogleAnalyticsOnOrderSuccessPageViewObserver" method="execute" /> + <observer name="googleanalytics_order_success" instance="Magento\GoogleAnalytics\Observer\SetGoogleAnalyticsOnOrderSuccessPageViewObserver" /> </event> <event name="multishipping_checkout_controller_success_action"> - <observer name="googleanalytics_order_success" instance="Magento\GoogleAnalytics\Observer\SetGoogleAnalyticsOnOrderSuccessPageViewObserver" method="execute" /> + <observer name="googleanalytics_order_success" instance="Magento\GoogleAnalytics\Observer\SetGoogleAnalyticsOnOrderSuccessPageViewObserver" /> </event> </config> diff --git a/app/code/Magento/GoogleOptimizer/Model/ResourceModel/Code.php b/app/code/Magento/GoogleOptimizer/Model/ResourceModel/Code.php index ba7afe858e44b5e34c5c73aa1aac70566ce86b57..50d89b04d7fc5322ebb9900032f0ece6a580a327 100644 --- a/app/code/Magento/GoogleOptimizer/Model/ResourceModel/Code.php +++ b/app/code/Magento/GoogleOptimizer/Model/ResourceModel/Code.php @@ -7,7 +7,7 @@ */ namespace Magento\GoogleOptimizer\Model\ResourceModel; -class Code extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Code extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Resource initialization diff --git a/app/code/Magento/GoogleOptimizer/etc/events.xml b/app/code/Magento/GoogleOptimizer/etc/events.xml index c8347f4e547405e8a9c13759b7d8685681f7f5b7..bb71f286736844ab12653748da8c17ae94b9997d 100644 --- a/app/code/Magento/GoogleOptimizer/etc/events.xml +++ b/app/code/Magento/GoogleOptimizer/etc/events.xml @@ -7,24 +7,24 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="catalog_product_save_after"> - <observer name="googleoptimizer_observer" instance="Magento\GoogleOptimizer\Observer\Product\SaveGoogleExperimentScriptObserver" method="execute" /> + <observer name="googleoptimizer_observer" instance="Magento\GoogleOptimizer\Observer\Product\SaveGoogleExperimentScriptObserver" /> </event> <event name="catalog_product_delete_after"> - <observer name="googleoptimizer_observer" instance="Magento\GoogleOptimizer\Observer\Product\DeleteProductGoogleExperimentScriptObserver" method="execute" /> + <observer name="googleoptimizer_observer" instance="Magento\GoogleOptimizer\Observer\Product\DeleteProductGoogleExperimentScriptObserver" /> </event> <event name="catalog_category_save_after"> - <observer name="googleoptimizer_observer" instance="Magento\GoogleOptimizer\Observer\Category\SaveGoogleExperimentScriptObserver" method="execute" /> + <observer name="googleoptimizer_observer" instance="Magento\GoogleOptimizer\Observer\Category\SaveGoogleExperimentScriptObserver" /> </event> <event name="catalog_category_delete_after"> - <observer name="googleoptimizer_observer" instance="Magento\GoogleOptimizer\Observer\Category\DeleteCategoryGoogleExperimentScriptObserver" method="execute" /> + <observer name="googleoptimizer_observer" instance="Magento\GoogleOptimizer\Observer\Category\DeleteCategoryGoogleExperimentScriptObserver" /> </event> <event name="cms_page_save_after"> - <observer name="googleoptimizer_observer" instance="Magento\GoogleOptimizer\Observer\CmsPage\SaveGoogleExperimentScriptObserver" method="execute" /> + <observer name="googleoptimizer_observer" instance="Magento\GoogleOptimizer\Observer\CmsPage\SaveGoogleExperimentScriptObserver" /> </event> <event name="cms_page_delete_after"> - <observer name="googleoptimizer_observer" instance="Magento\GoogleOptimizer\Observer\CmsPage\DeleteCmsGoogleExperimentScriptObserver" method="execute" /> + <observer name="googleoptimizer_observer" instance="Magento\GoogleOptimizer\Observer\CmsPage\DeleteCmsGoogleExperimentScriptObserver" /> </event> <event name="adminhtml_catalog_category_tabs"> - <observer name="googleoptimizer_observer" instance="Magento\GoogleOptimizer\Observer\Block\Category\AddGoogleExperimentTabObserver" method="execute" /> + <observer name="googleoptimizer_observer" instance="Magento\GoogleOptimizer\Observer\Block\Category\AddGoogleExperimentTabObserver" /> </event> </config> diff --git a/app/code/Magento/ImportExport/Model/ResourceModel/History.php b/app/code/Magento/ImportExport/Model/ResourceModel/History.php index 47b33fc42caa7ec84629db7a95c5654811be8008..5732f4dda2ca1b8739bdcb5900da92e775a44eaa 100644 --- a/app/code/Magento/ImportExport/Model/ResourceModel/History.php +++ b/app/code/Magento/ImportExport/Model/ResourceModel/History.php @@ -8,7 +8,7 @@ namespace Magento\ImportExport\Model\ResourceModel; /** * Class History */ -class History extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class History extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Define main table diff --git a/app/code/Magento/ImportExport/Model/ResourceModel/History/Collection.php b/app/code/Magento/ImportExport/Model/ResourceModel/History/Collection.php index 99e3f48a1867c1cd9b49b87717cea00a401de546..f427da809a4d71d05cecfbd5557d7d4bbc5cf63d 100644 --- a/app/code/Magento/ImportExport/Model/ResourceModel/History/Collection.php +++ b/app/code/Magento/ImportExport/Model/ResourceModel/History/Collection.php @@ -10,7 +10,7 @@ use \Magento\ImportExport\Model\History; /** * Import history collection */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Link table name diff --git a/app/code/Magento/ImportExport/Model/ResourceModel/Import/Data.php b/app/code/Magento/ImportExport/Model/ResourceModel/Import/Data.php index ce429e3033eec33a76cc8cbe80c54944e4874217..db95265ec4711f5e3b326f2faf4b1c892067f62d 100644 --- a/app/code/Magento/ImportExport/Model/ResourceModel/Import/Data.php +++ b/app/code/Magento/ImportExport/Model/ResourceModel/Import/Data.php @@ -10,7 +10,7 @@ namespace Magento\ImportExport\Model\ResourceModel\Import; * * @author Magento Core Team <core@magentocommerce.com> */ -class Data extends \Magento\Framework\Model\ModelResource\Db\AbstractDb implements \IteratorAggregate +class Data extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb implements \IteratorAggregate { /** * @var \Iterator @@ -27,12 +27,12 @@ class Data extends \Magento\Framework\Model\ModelResource\Db\AbstractDb implemen /** * Class constructor * - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Framework\Json\Helper\Data $jsonHelper * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Framework\Json\Helper\Data $jsonHelper, $connectionName = null ) { diff --git a/app/code/Magento/ImportExport/view/adminhtml/templates/export/form/before.phtml b/app/code/Magento/ImportExport/view/adminhtml/templates/export/form/before.phtml index c9084964d9ffb2f6fb34fa9b768bc58fe1f73a98..e5c60e69e8272bea15620679817d5467a236169b 100644 --- a/app/code/Magento/ImportExport/view/adminhtml/templates/export/form/before.phtml +++ b/app/code/Magento/ImportExport/view/adminhtml/templates/export/form/before.phtml @@ -5,7 +5,10 @@ */ ?> <script> -require(['prototype'], function(){ +require([ + 'Magento_Ui/js/modal/alert', + 'prototype' +], function(alert){ //<![CDATA[ // Temporary Class will be replaced after refactoring of import/export functionality @@ -81,7 +84,9 @@ require(['prototype'], function(){ form.submit(); form.action = oldAction; } else { - alert('Invalid data'); + alert({ + content: 'Invalid data' + }); } }; diff --git a/app/code/Magento/ImportExport/view/adminhtml/templates/import/form/before.phtml b/app/code/Magento/ImportExport/view/adminhtml/templates/import/form/before.phtml index 78b5a7139d7bb1f782b77b940c7f88776ea0c7bb..b74663620882ad4159b0c7bfd53d4ce79d9b80c1 100644 --- a/app/code/Magento/ImportExport/view/adminhtml/templates/import/form/before.phtml +++ b/app/code/Magento/ImportExport/view/adminhtml/templates/import/form/before.phtml @@ -10,7 +10,11 @@ /** @var $block \Magento\ImportExport\Block\Adminhtml\Import\Edit\Before */ ?> <script> -require(['jquery', 'prototype'], function(jQuery){ +require([ + 'jquery', + 'Magento_Ui/js/modal/alert', + 'prototype' +], function(jQuery, alert){ //<![CDATA[ // Temporary Class will be replaced after refactoring of import/export functionality @@ -200,7 +204,11 @@ require(['jquery', 'prototype'], function(jQuery){ */ postToFrameProcessResponse: function(response) { if ('object' != typeof(response)) { - return alert('Invalid response'); + alert({ + content: 'Invalid response' + }); + + return false; } $H(response).each(function(pair) { switch (pair.key) { @@ -231,7 +239,9 @@ require(['jquery', 'prototype'], function(jQuery){ }); break; default: - alert(pair.key + ': ' + pair.value); + alert({ + content: pair.key + ': ' + pair.value + }); break; } }); diff --git a/app/code/Magento/Indexer/Model/ResourceModel/AbstractResource.php b/app/code/Magento/Indexer/Model/ResourceModel/AbstractResource.php index b9867aa37ccdf8dbaffcbf21955c9f3adf4f24e3..78920dad56ee8694a8a10920c0f9dc81e0fd7086 100644 --- a/app/code/Magento/Indexer/Model/ResourceModel/AbstractResource.php +++ b/app/code/Magento/Indexer/Model/ResourceModel/AbstractResource.php @@ -14,7 +14,7 @@ namespace Magento\Indexer\Model\ResourceModel; use Magento\Framework\DB\Adapter\AdapterInterface; use Magento\Framework\DB\Select; -abstract class AbstractResource extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +abstract class AbstractResource extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Constructor @@ -26,12 +26,12 @@ abstract class AbstractResource extends \Magento\Framework\Model\ModelResource\D /** * Class constructor * - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Framework\Indexer\Table\StrategyInterface $tableStrategy * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Framework\Indexer\Table\StrategyInterface $tableStrategy, $connectionName = null ) { diff --git a/app/code/Magento/Indexer/Model/ResourceModel/Indexer/State.php b/app/code/Magento/Indexer/Model/ResourceModel/Indexer/State.php index ad4e69505fb5f1dc02ad4d4f3ed39c349ca90182..e783c4aabb6d83fc89343021e3b88392523f8850 100644 --- a/app/code/Magento/Indexer/Model/ResourceModel/Indexer/State.php +++ b/app/code/Magento/Indexer/Model/ResourceModel/Indexer/State.php @@ -5,7 +5,7 @@ */ namespace Magento\Indexer\Model\ResourceModel\Indexer; -class State extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class State extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Resource initialization diff --git a/app/code/Magento/Indexer/Model/ResourceModel/Indexer/State/Collection.php b/app/code/Magento/Indexer/Model/ResourceModel/Indexer/State/Collection.php index cad7f010d50199c8a1c777f6fb3ef061a1595fba..2b87373dbe7aa388bb52794152c71545ebf237cd 100644 --- a/app/code/Magento/Indexer/Model/ResourceModel/Indexer/State/Collection.php +++ b/app/code/Magento/Indexer/Model/ResourceModel/Indexer/State/Collection.php @@ -5,7 +5,7 @@ */ namespace Magento\Indexer\Model\ResourceModel\Indexer\State; -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Collection initialization diff --git a/app/code/Magento/Indexer/Model/ResourceModel/Mview/View/State.php b/app/code/Magento/Indexer/Model/ResourceModel/Mview/View/State.php index df3ce9b39ef4ce8c96ca330f78d78f9f56ed2c01..fd7612f9ac32c5afff9f99c570e3706c97345839 100644 --- a/app/code/Magento/Indexer/Model/ResourceModel/Mview/View/State.php +++ b/app/code/Magento/Indexer/Model/ResourceModel/Mview/View/State.php @@ -5,7 +5,7 @@ */ namespace Magento\Indexer\Model\ResourceModel\Mview\View; -class State extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class State extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Resource initialization diff --git a/app/code/Magento/Indexer/Model/ResourceModel/Mview/View/State/Collection.php b/app/code/Magento/Indexer/Model/ResourceModel/Mview/View/State/Collection.php index 3f870f9594204e6b2efb8c8c352f1e823531b6f1..9f6ce5023568ad114dfd4e5d15724bb237d6005f 100644 --- a/app/code/Magento/Indexer/Model/ResourceModel/Mview/View/State/Collection.php +++ b/app/code/Magento/Indexer/Model/ResourceModel/Mview/View/State/Collection.php @@ -5,7 +5,7 @@ */ namespace Magento\Indexer\Model\ResourceModel\Mview\View\State; -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection implements +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection implements \Magento\Framework\Mview\View\State\CollectionInterface { /** diff --git a/app/code/Magento/Integration/Model/Integration.php b/app/code/Magento/Integration/Model/Integration.php index 6ac6ba894b3e9ca5f347e13e384e756301d67056..42cd8f5fcd044db3a4bdd7c90d32f3bad5fd2c1b 100644 --- a/app/code/Magento/Integration/Model/Integration.php +++ b/app/code/Magento/Integration/Model/Integration.php @@ -77,7 +77,7 @@ class Integration extends \Magento\Framework\Model\AbstractModel * @param \Magento\Framework\Model\Context $context * @param \Magento\Framework\Registry $registry * @param \Magento\Framework\Stdlib\DateTime $dateTime - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -85,7 +85,7 @@ class Integration extends \Magento\Framework\Model\AbstractModel \Magento\Framework\Model\Context $context, \Magento\Framework\Registry $registry, \Magento\Framework\Stdlib\DateTime $dateTime, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Integration/Model/Oauth/Consumer.php b/app/code/Magento/Integration/Model/Oauth/Consumer.php index 5e46ff6db32d6d15404b699db9eab383eeff56fd..1cfe091aed450082796e06dd08d2099773166749 100644 --- a/app/code/Magento/Integration/Model/Oauth/Consumer.php +++ b/app/code/Magento/Integration/Model/Oauth/Consumer.php @@ -49,7 +49,7 @@ class Consumer extends \Magento\Framework\Model\AbstractModel implements Consume * @param \Magento\Integration\Model\Oauth\Consumer\Validator\KeyLength $keyLength * @param \Magento\Framework\Url\Validator $urlValidator * @param \Magento\Integration\Helper\Oauth\Data $dataHelper - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -59,7 +59,7 @@ class Consumer extends \Magento\Framework\Model\AbstractModel implements Consume \Magento\Integration\Model\Oauth\Consumer\Validator\KeyLength $keyLength, \Magento\Framework\Url\Validator $urlValidator, \Magento\Integration\Helper\Oauth\Data $dataHelper, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Integration/Model/Oauth/Nonce.php b/app/code/Magento/Integration/Model/Oauth/Nonce.php index 075ca749574dd2e7ad498db074f70afd48cfe1e3..4499aa8d42be65166868aaba853f0d907c95f648 100644 --- a/app/code/Magento/Integration/Model/Oauth/Nonce.php +++ b/app/code/Magento/Integration/Model/Oauth/Nonce.php @@ -30,7 +30,7 @@ class Nonce extends \Magento\Framework\Model\AbstractModel * @param \Magento\Framework\Model\Context $context * @param \Magento\Framework\Registry $registry * @param \Magento\Integration\Helper\Oauth\Data $oauthData - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -38,7 +38,7 @@ class Nonce extends \Magento\Framework\Model\AbstractModel \Magento\Framework\Model\Context $context, \Magento\Framework\Registry $registry, \Magento\Integration\Helper\Oauth\Data $oauthData, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Integration/Model/Oauth/Token.php b/app/code/Magento/Integration/Model/Oauth/Token.php index f0c2c587db735491bf5e1bf5c1605f8461ba5743..52f50dcbab7764b7812de7bdca5ddad8bce5ef7f 100644 --- a/app/code/Magento/Integration/Model/Oauth/Token.php +++ b/app/code/Magento/Integration/Model/Oauth/Token.php @@ -96,7 +96,7 @@ class Token extends \Magento\Framework\Model\AbstractModel * @param \Magento\Integration\Model\Oauth\ConsumerFactory $consumerFactory * @param \Magento\Integration\Helper\Oauth\Data $oauthData * @param OauthHelper $oauthHelper - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -110,7 +110,7 @@ class Token extends \Magento\Framework\Model\AbstractModel \Magento\Integration\Model\Oauth\ConsumerFactory $consumerFactory, \Magento\Integration\Helper\Oauth\Data $oauthData, OauthHelper $oauthHelper, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Integration/Model/ResourceModel/Integration.php b/app/code/Magento/Integration/Model/ResourceModel/Integration.php index 1fd67dad5bd0e0b8767167f39d2a9e0d92c2fc9a..d3a643b72ccfd02af919d677a689775dd3ad1e37 100644 --- a/app/code/Magento/Integration/Model/ResourceModel/Integration.php +++ b/app/code/Magento/Integration/Model/ResourceModel/Integration.php @@ -9,7 +9,7 @@ namespace Magento\Integration\Model\ResourceModel; /** * Integration resource model */ -class Integration extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Integration extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Initialize resource model diff --git a/app/code/Magento/Integration/Model/ResourceModel/Integration/Collection.php b/app/code/Magento/Integration/Model/ResourceModel/Integration/Collection.php index a0941446aa20234106e7dab691378eb401b77333..02feeda9ab31ca335526896402b79c0b59820498 100644 --- a/app/code/Magento/Integration/Model/ResourceModel/Integration/Collection.php +++ b/app/code/Magento/Integration/Model/ResourceModel/Integration/Collection.php @@ -8,7 +8,7 @@ namespace Magento\Integration\Model\ResourceModel\Integration; /** * Integrations collection. */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Resource collection initialization. diff --git a/app/code/Magento/Integration/Model/ResourceModel/Oauth/Consumer.php b/app/code/Magento/Integration/Model/ResourceModel/Oauth/Consumer.php index ae92c482536b4486ae5615c724f3a27473ee2da3..6e06d06b43fc40d358ffe5776f1a4e89c88faa61 100644 --- a/app/code/Magento/Integration/Model/ResourceModel/Oauth/Consumer.php +++ b/app/code/Magento/Integration/Model/ResourceModel/Oauth/Consumer.php @@ -5,7 +5,7 @@ */ namespace Magento\Integration\Model\ResourceModel\Oauth; -class Consumer extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Consumer extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * @var \Magento\Framework\Stdlib\DateTime @@ -13,12 +13,12 @@ class Consumer extends \Magento\Framework\Model\ModelResource\Db\AbstractDb protected $_dateTime; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Framework\Stdlib\DateTime $dateTime * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Framework\Stdlib\DateTime $dateTime, $connectionName = null ) { diff --git a/app/code/Magento/Integration/Model/ResourceModel/Oauth/Consumer/Collection.php b/app/code/Magento/Integration/Model/ResourceModel/Oauth/Consumer/Collection.php index 3444edf70f0e2441704ccb656eca53a957bb4b1a..e213f03aa4fcdfc61c114a9bc8cbb685c6721a23 100644 --- a/app/code/Magento/Integration/Model/ResourceModel/Oauth/Consumer/Collection.php +++ b/app/code/Magento/Integration/Model/ResourceModel/Oauth/Consumer/Collection.php @@ -8,7 +8,7 @@ namespace Magento\Integration\Model\ResourceModel\Oauth\Consumer; /** * OAuth Application resource collection model */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Initialize collection model diff --git a/app/code/Magento/Integration/Model/ResourceModel/Oauth/Nonce.php b/app/code/Magento/Integration/Model/ResourceModel/Oauth/Nonce.php index 7b6fa520eaed7684c383fe4bac091d5de176bd65..54babc2e0607b9eaedae0fdaec50f4bb9d827683 100644 --- a/app/code/Magento/Integration/Model/ResourceModel/Oauth/Nonce.php +++ b/app/code/Magento/Integration/Model/ResourceModel/Oauth/Nonce.php @@ -10,7 +10,7 @@ namespace Magento\Integration\Model\ResourceModel\Oauth; * * @author Magento Core Team <core@magentocommerce.com> */ -class Nonce extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Nonce extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Initialize resource model diff --git a/app/code/Magento/Integration/Model/ResourceModel/Oauth/Nonce/Collection.php b/app/code/Magento/Integration/Model/ResourceModel/Oauth/Nonce/Collection.php index 901160369171456d437dc9b257a58c178469e212..db1dad4fad8951aca31e5474f0e21c8bfd7782ce 100644 --- a/app/code/Magento/Integration/Model/ResourceModel/Oauth/Nonce/Collection.php +++ b/app/code/Magento/Integration/Model/ResourceModel/Oauth/Nonce/Collection.php @@ -8,7 +8,7 @@ namespace Magento\Integration\Model\ResourceModel\Oauth\Nonce; /** * OAuth nonce resource collection model */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Initialize collection model diff --git a/app/code/Magento/Integration/Model/ResourceModel/Oauth/Token.php b/app/code/Magento/Integration/Model/ResourceModel/Oauth/Token.php index 3e2758db005fa51867e7f1f2dcf2ed6b05ec5d07..b851efd3f7a6c985e245260178a53ea0c7031ccf 100644 --- a/app/code/Magento/Integration/Model/ResourceModel/Oauth/Token.php +++ b/app/code/Magento/Integration/Model/ResourceModel/Oauth/Token.php @@ -10,7 +10,7 @@ use Magento\Authorization\Model\UserContextInterface; /** * OAuth token resource model */ -class Token extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Token extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * @var \Magento\Framework\Stdlib\DateTime @@ -18,12 +18,12 @@ class Token extends \Magento\Framework\Model\ModelResource\Db\AbstractDb protected $_dateTime; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Framework\Stdlib\DateTime $dateTime * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Framework\Stdlib\DateTime $dateTime, $connectionName = null ) { diff --git a/app/code/Magento/Integration/Model/ResourceModel/Oauth/Token/Collection.php b/app/code/Magento/Integration/Model/ResourceModel/Oauth/Token/Collection.php index c1f4365d66edb3847c4d130fc2150249ad496308..6e777fdff72806edcad4b3aadd95e942df4e2a7b 100644 --- a/app/code/Magento/Integration/Model/ResourceModel/Oauth/Token/Collection.php +++ b/app/code/Magento/Integration/Model/ResourceModel/Oauth/Token/Collection.php @@ -8,7 +8,7 @@ namespace Magento\Integration\Model\ResourceModel\Oauth\Token; /** * OAuth token resource collection model */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Initialize collection model diff --git a/app/code/Magento/Integration/Test/Unit/Model/IntegrationTest.php b/app/code/Magento/Integration/Test/Unit/Model/IntegrationTest.php index 759b77d13404a359cd8c2ae4d78751aca8292e2f..2bd75138d9f4f3e89ccf8d96bb737e9b8834575c 100644 --- a/app/code/Magento/Integration/Test/Unit/Model/IntegrationTest.php +++ b/app/code/Magento/Integration/Test/Unit/Model/IntegrationTest.php @@ -31,7 +31,7 @@ class IntegrationTest extends \PHPUnit_Framework_TestCase protected $dateTimeMock; /** - * @var \Magento\Framework\Model\ModelResource\AbstractResource|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Model\ResourceModel\AbstractResource|\PHPUnit_Framework_MockObject_MockObject */ protected $resourceMock; @@ -76,7 +76,7 @@ class IntegrationTest extends \PHPUnit_Framework_TestCase false ); $this->resourceMock = $this->getMockForAbstractClass( - 'Magento\Framework\Model\ModelResource\AbstractResource', + 'Magento\Framework\Model\ResourceModel\AbstractResource', [], '', false, diff --git a/app/code/Magento/Integration/Test/Unit/Model/Oauth/ConsumerTest.php b/app/code/Magento/Integration/Test/Unit/Model/Oauth/ConsumerTest.php index 32f1ee039f8ce240d74075c225bb342fc515655d..cf5db2ee443d2076d511f12c1f8719258f06a23a 100644 --- a/app/code/Magento/Integration/Test/Unit/Model/Oauth/ConsumerTest.php +++ b/app/code/Magento/Integration/Test/Unit/Model/Oauth/ConsumerTest.php @@ -49,7 +49,7 @@ class ConsumerTest extends \PHPUnit_Framework_TestCase protected $oauthDataMock; /** - * @var \Magento\Framework\Model\ModelResource\AbstractResource|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Model\ResourceModel\AbstractResource|\PHPUnit_Framework_MockObject_MockObject */ protected $resourceMock; diff --git a/app/code/Magento/Integration/Test/Unit/Model/Oauth/NonceTest.php b/app/code/Magento/Integration/Test/Unit/Model/Oauth/NonceTest.php index 5ceeae0f53aa0e3ed0a33a5f7bd9a76521734914..fd41c76c7c688fe6d52a56126ec8f4a62b23b10a 100644 --- a/app/code/Magento/Integration/Test/Unit/Model/Oauth/NonceTest.php +++ b/app/code/Magento/Integration/Test/Unit/Model/Oauth/NonceTest.php @@ -32,7 +32,7 @@ class NonceTest extends \PHPUnit_Framework_TestCase protected $oauthDataMock; /** - * @var \Magento\Framework\Model\ModelResource\AbstractResource|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Model\ResourceModel\AbstractResource|\PHPUnit_Framework_MockObject_MockObject */ protected $resourceMock; @@ -77,7 +77,7 @@ class NonceTest extends \PHPUnit_Framework_TestCase false ); $this->resourceMock = $this->getMockForAbstractClass( - 'Magento\Framework\Model\ModelResource\AbstractResource', + 'Magento\Framework\Model\ResourceModel\AbstractResource', [], '', false, diff --git a/app/code/Magento/Integration/Test/Unit/Model/Oauth/TokenTest.php b/app/code/Magento/Integration/Test/Unit/Model/Oauth/TokenTest.php index cc0be1c629d88457c3431f613a283eb778aec06d..427e8591787f32f0f630968456148905b8232770 100644 --- a/app/code/Magento/Integration/Test/Unit/Model/Oauth/TokenTest.php +++ b/app/code/Magento/Integration/Test/Unit/Model/Oauth/TokenTest.php @@ -68,7 +68,7 @@ class TokenTest extends \PHPUnit_Framework_TestCase protected $oauthHelperMock; /** - * @var \Magento\Framework\Model\ModelResource\AbstractResource|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Model\ResourceModel\AbstractResource|\PHPUnit_Framework_MockObject_MockObject */ protected $resourceMock; @@ -119,7 +119,7 @@ class TokenTest extends \PHPUnit_Framework_TestCase ->disableOriginalConstructor() ->getMock(); - $this->resourceMock = $this->getMockBuilder('Magento\Framework\Model\ModelResource\AbstractResource') + $this->resourceMock = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\AbstractResource') ->setMethods( [ 'getIdFieldName', diff --git a/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Integration/CollectionTest.php b/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Integration/CollectionTest.php index 707f00002dd01aa3ab66301ebde10a037a05cbf1..9e188fd3ec71e7ee87619b977f62c8a02cfe3190 100644 --- a/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Integration/CollectionTest.php +++ b/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Integration/CollectionTest.php @@ -33,7 +33,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase ->method('select') ->will($this->returnValue($this->select)); - $resource = $this->getMockBuilder('Magento\Framework\Model\ModelResource\Db\AbstractDb') + $resource = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\Db\AbstractDb') ->disableOriginalConstructor() ->setMethods(['__wakeup', 'getConnection']) ->getMockForAbstractClass(); diff --git a/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/IntegrationTest.php b/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/IntegrationTest.php index 994996623b6b1f810f1ea4e4719dabf85bdf7612..b42bd4c18ea98ec1e6c68f40f429b2b97484e32e 100644 --- a/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/IntegrationTest.php +++ b/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/IntegrationTest.php @@ -26,7 +26,7 @@ class IntegrationTest extends \PHPUnit_Framework_TestCase protected $resourceMock; /** - * @var \Magento\Framework\Model\ModelResource\Db\Context|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Model\ResourceModel\Db\Context|\PHPUnit_Framework_MockObject_MockObject */ protected $contextMock; @@ -47,7 +47,7 @@ class IntegrationTest extends \PHPUnit_Framework_TestCase $this->resourceMock = $this->getMock('Magento\Framework\App\ResourceConnection', [], [], '', false); $this->resourceMock->expects($this->any())->method('getConnection')->willReturn($this->connectionMock); - $this->contextMock = $this->getMock('Magento\Framework\Model\ModelResource\Db\Context', [], [], '', false); + $this->contextMock = $this->getMock('Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false); $this->contextMock->expects($this->once())->method('getResources')->willReturn($this->resourceMock); $this->integrationResourceModel = new \Magento\Integration\Model\ResourceModel\Integration($this->contextMock); diff --git a/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Oauth/ConsumerTest.php b/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Oauth/ConsumerTest.php index 30c5872de26992005dab76b10128469f6b7aae51..38b2993b7e26fb16c9ded41d8d1d65bc261b8135 100644 --- a/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Oauth/ConsumerTest.php +++ b/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Oauth/ConsumerTest.php @@ -45,7 +45,7 @@ class ConsumerTest extends \PHPUnit_Framework_TestCase $this->resourceMock = $this->getMock('Magento\Framework\App\ResourceConnection', [], [], '', false); $this->resourceMock->expects($this->any())->method('getConnection')->willReturn($this->connectionMock); - $contextMock = $this->getMock('Magento\Framework\Model\ModelResource\Db\Context', [], [], '', false); + $contextMock = $this->getMock('Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false); $contextMock->expects($this->once())->method('getResources')->willReturn($this->resourceMock); $this->consumerResource = new \Magento\Integration\Model\ResourceModel\Oauth\Consumer( $contextMock, diff --git a/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Oauth/NonceTest.php b/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Oauth/NonceTest.php index feff0879f79e5a28d32f84c624186b6a06b4239c..4faae40b06f9155c072cefaed893366c91045bde 100644 --- a/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Oauth/NonceTest.php +++ b/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Oauth/NonceTest.php @@ -32,7 +32,7 @@ class NonceTest extends \PHPUnit_Framework_TestCase $this->resourceMock = $this->getMock('Magento\Framework\App\ResourceConnection', [], [], '', false); $this->resourceMock->expects($this->any())->method('getConnection')->willReturn($this->connectionMock); - $contextMock = $this->getMock('\Magento\Framework\Model\ModelResource\Db\Context', [], [], '', false); + $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false); $contextMock->expects($this->once())->method('getResources')->willReturn($this->resourceMock); $this->nonceResource = new \Magento\Integration\Model\ResourceModel\Oauth\Nonce($contextMock); diff --git a/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Oauth/Token/CollectionTest.php b/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Oauth/Token/CollectionTest.php index ff9046d4f6f9c37198d08a98f14a90d7ca00134f..21f66d94ebbaf8fe5eb85525309ba5cacaaefa43 100644 --- a/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Oauth/Token/CollectionTest.php +++ b/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Oauth/Token/CollectionTest.php @@ -33,7 +33,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase ->method('select') ->will($this->returnValue($this->select)); - $resource = $this->getMockBuilder('Magento\Framework\Model\ModelResource\Db\AbstractDb') + $resource = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\Db\AbstractDb') ->disableOriginalConstructor() ->setMethods(['__wakeup', 'getConnection']) ->getMockForAbstractClass(); diff --git a/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Oauth/TokenTest.php b/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Oauth/TokenTest.php index 95fe15805c64d379003e10cca70fc98ff31a01c4..da0e0b9bc37085a64f46726cf527889b5138212a 100644 --- a/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Oauth/TokenTest.php +++ b/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Oauth/TokenTest.php @@ -32,7 +32,7 @@ class TokenTest extends \PHPUnit_Framework_TestCase $this->resourceMock = $this->getMock('Magento\Framework\App\ResourceConnection', [], [], '', false); $this->resourceMock->expects($this->any())->method('getConnection')->willReturn($this->connectionMock); - $contextMock = $this->getMock('\Magento\Framework\Model\ModelResource\Db\Context', [], [], '', false); + $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false); $contextMock->expects($this->once())->method('getResources')->willReturn($this->resourceMock); $this->tokenResource = new \Magento\Integration\Model\ResourceModel\Oauth\Token( diff --git a/app/code/Magento/Integration/view/adminhtml/templates/integration/popup_container.phtml b/app/code/Magento/Integration/view/adminhtml/templates/integration/popup_container.phtml index 43e7996f6c192a0c176d8992cb36ef1a920bf41b..1150ac083a6c19df536c3cfaf6b5459a40340f86 100644 --- a/app/code/Magento/Integration/view/adminhtml/templates/integration/popup_container.phtml +++ b/app/code/Magento/Integration/view/adminhtml/templates/integration/popup_container.phtml @@ -11,66 +11,40 @@ // @codingStandardsIgnoreFile ?> <script> -require([ - "jquery", - "jquery/ui", - "Magento_Integration/js/integration" -], function($){ + require([ + "jquery", + 'Magento_Ui/js/modal/confirm', + "jquery/ui", + "Magento_Integration/js/integration" + ], function ($, Confirm) { - window.integration = new Integration( - '<?php /* @escapeNotVerified */ echo $block->getUrl('*/*/permissionsDialog', ['id' => ':id', 'reauthorize' => ':isReauthorize']); ?>', - '<?php /* @escapeNotVerified */ echo $block->getUrl('*/*/tokensDialog', ['id' => ':id', 'reauthorize' => ':isReauthorize']); ?>', - '<?php /* @escapeNotVerified */ echo $block->getUrl('*/*/tokensExchange', ['id' => ':id', 'reauthorize' => ':isReauthorize']); ?>', - '<?php /* @escapeNotVerified */ echo $block->getUrl('*/*'); ?>', - '<?php /* @escapeNotVerified */ echo $block->getUrl('*/*/loginSuccessCallback'); ?>' - ); + window.integration = new Integration( + '<?php /* @escapeNotVerified */ echo $block->getUrl('*/*/permissionsDialog', ['id' => ':id', 'reauthorize' => ':isReauthorize']); ?>', + '<?php /* @escapeNotVerified */ echo $block->getUrl('*/*/tokensDialog', ['id' => ':id', 'reauthorize' => ':isReauthorize']); ?>', + '<?php /* @escapeNotVerified */ echo $block->getUrl('*/*/tokensExchange', ['id' => ':id', 'reauthorize' => ':isReauthorize']); ?>', + '<?php /* @escapeNotVerified */ echo $block->getUrl('*/*'); ?>', + '<?php /* @escapeNotVerified */ echo $block->getUrl('*/*/loginSuccessCallback'); ?>' + ); - /** - * Confirm dialog for delete integration action - */ - $(function () { - $('div#integrationGrid').on('click', 'button#delete', function (e) { - $('#integration-delete-container').dialog({ - modal: true, - autoOpen: true, - resizable: false, - minHeight: 0, - width: '75%', - dialogClass: 'no-close ui-popup-message', - position: { - my: 'left top', - at: 'center top', - of: 'body' - }, - open: function () { - $(this).closest('.ui-dialog').addClass('ui-dialog-active'); + /** + * Confirm dialog for delete integration action + */ + $(function () { + $('div#integrationGrid').on('click', 'button#delete', function (e) { - var topMargin = $(this).closest('.ui-dialog').children('.ui-dialog-titlebar').outerHeight(); - $(this).closest('.ui-dialog').css('margin-top', topMargin); - }, - close: function () { - $(this).closest('.ui-dialog').removeClass('ui-dialog-active'); - }, - buttons: [{ - text: $.mage.__('Delete'), - 'class': 'action-primary', - click: function () { - $(this).dialog("close"); - window.location.href = $(e.target).data('url'); + new Confirm({ + title: 'Are you sure?', + content: "Are you sure you want to delete this integration? You can't undo this action.", + actions: { + confirm: function () { + window.location.href = $(e.target).data('url'); + } } - }, { - text: $.mage.__('Cancel'), - 'class': 'action-close', - click: function () { - $(this).dialog('close'); - } - }] + }); + e.stopPropagation(); }); - e.stopPropagation(); }); }); - -}); </script> <div id="integration-popup-container" style="display: none;"></div> diff --git a/app/code/Magento/Integration/view/adminhtml/web/js/integration.js b/app/code/Magento/Integration/view/adminhtml/web/js/integration.js index 3e299ddf77e45aacd9d480d355dea456157689d7..93504661db61493e45eea27b28b27c024fab5417 100644 --- a/app/code/Magento/Integration/view/adminhtml/web/js/integration.js +++ b/app/code/Magento/Integration/view/adminhtml/web/js/integration.js @@ -7,9 +7,11 @@ /*global integration*/ define([ "jquery", + "Magento_Ui/js/modal/alert", "jquery/ui", - "mage/translate" -], function($){ + "mage/translate", + "Magento_Ui/js/modal/modal" +], function($, alert){ "use strict"; $.widget('mage.integration', { @@ -80,7 +82,9 @@ define([ } }, error: function (jqXHR, status, error) { - alert($.mage.__('Sorry, something went wrong. Please try again later.')); + alert({ + content: $.mage.__('Sorry, something went wrong. Please try again later.') + }); window.console && console.log(status + ': ' + error + "\nResponse text:\n" + jqXHR.responseText); }, complete: function () { @@ -168,12 +172,12 @@ define([ $('body').trigger('processStart'); //Check for window closed window.location.reload(); - IdentityLogin.jqInfoDialog.dialog('close'); + IdentityLogin.jqInfoDialog.modal('closeModal'); } } catch (e) { //squash. In case Window closed without success callback, clear polling if (IdentityLogin.win.closed) { - IdentityLogin.jqInfoDialog.dialog('close'); + IdentityLogin.jqInfoDialog.modal('closeModal'); clearInterval(IdentityLogin.checker); } return; @@ -217,53 +221,24 @@ define([ } catch (e) { //This is expected if result is not json. Do nothing. } + if (identityLinkUrl && consumerId && popupHtml) { IdentityLogin.invokePopup(identityLinkUrl, consumerId, popup); } else { popupHtml = result; } + if (popup.length === 0){ + popup = $('<div/>'); + } popup.html(popupHtml); var buttons = [], dialogProperties = { title: title, - modal: true, - autoOpen: true, - minHeight: 450, - minWidth: 600, - width: '75%', + type: 'slide', dialogClass: dialog == 'permissions' ? 'integration-dialog' : 'integration-dialog no-close', - closeOnEscape: false, - position: { - my: 'left top', - at: 'center top', - of: 'body' - }, - open: function () { - $(this).closest('.ui-dialog').addClass('ui-dialog-active'); - - var topMargin = $(this).closest('.ui-dialog').children('.ui-dialog-titlebar').outerHeight() + 30; - $(this).closest('.ui-dialog').css('margin-top', topMargin); - }, - close: function () { - $(this).closest('.ui-dialog').removeClass('ui-dialog-active'); - } }; - if (dialog == 'permissions') { - // We don't need this button in 'tokens' dialog, since if you got there - integration is - // already activated and have necessary tokens - buttons.push({ - text: $.mage.__('Cancel'), - 'class': 'action-close', - click: function () { - $(this).dialog('close'); - } - }); - } else if (dialog == 'tokensExchange') { - dialogProperties['minHeight'] = 150; - dialogProperties['minWidth'] = 500; - } // Add confirmation button to the list of dialog buttons. okButton not set for tokenExchange dialog if (okButton) { @@ -273,10 +248,13 @@ define([ if (buttons.length > 0) { dialogProperties['buttons'] = buttons } - popup.dialog(dialogProperties); + popup.modal(dialogProperties); + popup.modal('openModal'); }, error: function (jqXHR, status, error) { - alert($.mage.__('Sorry, something went wrong. Please try again later.')); + alert({ + content: $.mage.__('Sorry, something went wrong. Please try again later.') + }); window.console && console.log(status + ': ' + error + "\nResponse text:\n" + jqXHR.responseText); }, complete: function () { @@ -322,17 +300,20 @@ define([ permissions: { text: (isReauthorize == '1') ? $.mage.__('Reauthorize') : $.mage.__('Allow'), 'class': 'action-primary', - // This data is going to be used in the next dialog - 'data-row-id': integrationId, - 'data-row-name': integrationName, - 'data-row-dialog': (isTokenExchange == '1') ? 'tokensExchange' : 'tokens', - 'data-row-is-reauthorize': isReauthorize, - 'data-row-is-token-exchange': isTokenExchange, + attr: { + 'data-row-id': integrationId, + 'data-row-name': integrationName, + 'data-row-dialog': (isTokenExchange == '1') ? 'tokensExchange' : 'tokens', + 'data-row-is-reauthorize': isReauthorize, + 'data-row-is-token-exchange': isTokenExchange + }, click: function () { // Find the 'Allow' button and clone - it has all necessary data, but is going to be // destroyed along with the current dialog - var ctx = $(this).parent().find('button.action-primary').clone(true); - $(this).dialog('destroy'); + var ctx = this.modal.find('button.action-primary').clone(true); + + this.closeModal(); + this.modal.remove(); // Make popup out of data we saved from 'Allow' button window.integration.popup.show(ctx); } diff --git a/app/code/Magento/LayeredNavigation/etc/adminhtml/events.xml b/app/code/Magento/LayeredNavigation/etc/adminhtml/events.xml index c81d702a2cfceeb883df39771fab92ad5c976b9a..2fb50d995aae07c2832651a177bb7d9f8d37e0e1 100644 --- a/app/code/Magento/LayeredNavigation/etc/adminhtml/events.xml +++ b/app/code/Magento/LayeredNavigation/etc/adminhtml/events.xml @@ -7,9 +7,9 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="product_attribute_form_build_front_tab"> - <observer name="layeredNavigation" instance="Magento\LayeredNavigation\Observer\Edit\Tab\Front\ProductAttributeFormBuildFrontTabObserver" method="execute" /> + <observer name="layeredNavigation" instance="Magento\LayeredNavigation\Observer\Edit\Tab\Front\ProductAttributeFormBuildFrontTabObserver" /> </event> <event name="product_attribute_grid_build"> - <observer name="layeredNavigation" instance="Magento\LayeredNavigation\Observer\Grid\ProductAttributeGridBuildObserver" method="execute" /> + <observer name="layeredNavigation" instance="Magento\LayeredNavigation\Observer\Grid\ProductAttributeGridBuildObserver" /> </event> </config> \ No newline at end of file diff --git a/app/code/Magento/LayeredNavigation/view/adminhtml/ui_component/product_attributes_listing.xml b/app/code/Magento/LayeredNavigation/view/adminhtml/ui_component/product_attributes_listing.xml index 6b7142d703cdfc489fc8229873359a8cdf4b65f7..39cd52f20586c760145b8ef62211037800154c8a 100644 --- a/app/code/Magento/LayeredNavigation/view/adminhtml/ui_component/product_attributes_listing.xml +++ b/app/code/Magento/LayeredNavigation/view/adminhtml/ui_component/product_attributes_listing.xml @@ -6,32 +6,15 @@ */ --> <listing xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Ui/etc/ui_configuration.xsd"> - <container name="listing_top"> - <filters name="listing_filters"> - <filterSelect name="is_filterable"> - <argument name="optionsProvider" xsi:type="configurableObject"> - <argument name="class" xsi:type="string">Magento\LayeredNavigation\Model\Attribute\Source\FilterableOptions</argument> - </argument> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">is_filterable</item> - <item name="label" xsi:type="string" translate="true">Use in Layered Navigation</item> - <item name="caption" xsi:type="string" translate="true">Select...</item> - </item> - </argument> - </filterSelect> - </filters> - </container> + <container name="listing_top"></container> <columns name="product_attributes_columns"> <column name="is_filterable"> <argument name="data" xsi:type="array"> <item name="options" xsi:type="object">Magento\LayeredNavigation\Model\Attribute\Source\FilterableOptions</item> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">select</item> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> <item name="dataType" xsi:type="string">select</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Use in Layered Navigation</item> </item> </argument> diff --git a/app/code/Magento/MediaStorage/Model/Config/Backend/Storage/Media/Database.php b/app/code/Magento/MediaStorage/Model/Config/Backend/Storage/Media/Database.php index 95f4d6c21658e0f08444ad674b9ef8798a0266f0..7bd243fd0ac2fb2f365ce97144d873e67a5485c0 100644 --- a/app/code/Magento/MediaStorage/Model/Config/Backend/Storage/Media/Database.php +++ b/app/code/Magento/MediaStorage/Model/Config/Backend/Storage/Media/Database.php @@ -19,7 +19,7 @@ class Database extends \Magento\Framework\App\Config\Value * @param \Magento\Framework\Registry $registry * @param \Magento\Framework\App\Config\ScopeConfigInterface $config * @param \Magento\MediaStorage\Helper\File\Storage $coreFileStorage - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -28,7 +28,7 @@ class Database extends \Magento\Framework\App\Config\Value \Magento\Framework\Registry $registry, \Magento\Framework\App\Config\ScopeConfigInterface $config, \Magento\MediaStorage\Helper\File\Storage $coreFileStorage, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/MediaStorage/Model/File/Storage.php b/app/code/Magento/MediaStorage/Model/File/Storage.php index aa3e783d87a0944eae6ad2bf692c937220d36cde..87b176f850b3084a2dbfeb1f170513df3bfd56bd 100644 --- a/app/code/Magento/MediaStorage/Model/File/Storage.php +++ b/app/code/Magento/MediaStorage/Model/File/Storage.php @@ -98,7 +98,7 @@ class Storage extends AbstractModel * @param \Magento\MediaStorage\Model\File\Storage\FileFactory $fileFactory * @param \Magento\MediaStorage\Model\File\Storage\DatabaseFactory $databaseFactory * @param Filesystem $filesystem - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -113,7 +113,7 @@ class Storage extends AbstractModel \Magento\MediaStorage\Model\File\Storage\FileFactory $fileFactory, \Magento\MediaStorage\Model\File\Storage\DatabaseFactory $databaseFactory, Filesystem $filesystem, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/MediaStorage/Model/File/Storage/Database/AbstractDatabase.php b/app/code/Magento/MediaStorage/Model/File/Storage/Database/AbstractDatabase.php index 5e764db6ac952286150edeafff08d994be0af25f..16d3439c9ace7161959beb3a91aca0a32f818b97 100644 --- a/app/code/Magento/MediaStorage/Model/File/Storage/Database/AbstractDatabase.php +++ b/app/code/Magento/MediaStorage/Model/File/Storage/Database/AbstractDatabase.php @@ -47,7 +47,7 @@ abstract class AbstractDatabase extends \Magento\Framework\Model\AbstractModel * @param \Magento\MediaStorage\Helper\File\Storage\Database $coreFileStorageDb * @param \Magento\Framework\Stdlib\DateTime\DateTime $dateModel * @param \Magento\Framework\App\Config\ScopeConfigInterface $configuration - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param string $connectionName * @param array $data @@ -58,7 +58,7 @@ abstract class AbstractDatabase extends \Magento\Framework\Model\AbstractModel \Magento\MediaStorage\Helper\File\Storage\Database $coreFileStorageDb, \Magento\Framework\Stdlib\DateTime\DateTime $dateModel, \Magento\Framework\App\Config\ScopeConfigInterface $configuration, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, $connectionName = null, array $data = [] @@ -94,7 +94,7 @@ abstract class AbstractDatabase extends \Magento\Framework\Model\AbstractModel /** * Get resource instance * - * @return \Magento\Framework\Model\ModelResource\AbstractResource + * @return \Magento\Framework\Model\ResourceModel\AbstractResource */ protected function _getResource() { diff --git a/app/code/Magento/MediaStorage/Model/ResourceModel/File/Storage/AbstractStorage.php b/app/code/Magento/MediaStorage/Model/ResourceModel/File/Storage/AbstractStorage.php index 93633dcf3ae2614de57ac3e6bb683b94b1829b3e..934279fedb502a56fefa3a67b8c77da99d7ea4f7 100644 --- a/app/code/Magento/MediaStorage/Model/ResourceModel/File/Storage/AbstractStorage.php +++ b/app/code/Magento/MediaStorage/Model/ResourceModel/File/Storage/AbstractStorage.php @@ -8,7 +8,7 @@ namespace Magento\MediaStorage\Model\ResourceModel\File\Storage; /** * Class AbstractStorage */ -abstract class AbstractStorage extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +abstract class AbstractStorage extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * File storage connection name diff --git a/app/code/Magento/MediaStorage/Model/ResourceModel/File/Storage/Database.php b/app/code/Magento/MediaStorage/Model/ResourceModel/File/Storage/Database.php index 4c2521eab93a1224e5262015ef4bf3088929395c..429c4c3e9f1dc9910ea15450c79bb1fb987f1338 100644 --- a/app/code/Magento/MediaStorage/Model/ResourceModel/File/Storage/Database.php +++ b/app/code/Magento/MediaStorage/Model/ResourceModel/File/Storage/Database.php @@ -16,12 +16,12 @@ class Database extends \Magento\MediaStorage\Model\ResourceModel\File\Storage\Ab protected $_resourceHelper; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Framework\DB\Helper $resourceHelper * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Framework\DB\Helper $resourceHelper, $connectionName = null ) { diff --git a/app/code/Magento/MediaStorage/Test/Unit/Helper/File/Storage/DatabaseTest.php b/app/code/Magento/MediaStorage/Test/Unit/Helper/File/Storage/DatabaseTest.php index 1def7eab39dda058d907a76a72d52584d799605b..2299f66fcbdb375c43d5363dda363f6d3d29fa76 100644 --- a/app/code/Magento/MediaStorage/Test/Unit/Helper/File/Storage/DatabaseTest.php +++ b/app/code/Magento/MediaStorage/Test/Unit/Helper/File/Storage/DatabaseTest.php @@ -107,7 +107,7 @@ class DatabaseTest extends \PHPUnit_Framework_TestCase $this->dbStorageFactoryMock->expects($this->once()) ->method('create') ->will($this->returnValue($dbModelMock)); - $resourceModelMock = $this->getMockBuilder('Magento\Framework\Model\ModelResource\Db\AbstractDb') + $resourceModelMock = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\Db\AbstractDb') ->disableOriginalConstructor() ->setMethods(['__wakeup']) ->getMockForAbstractClass(); @@ -348,7 +348,7 @@ class DatabaseTest extends \PHPUnit_Framework_TestCase $this->dbStorageFactoryMock->expects($this->exactly($callNum)) ->method('create') ->will($this->returnValue($dbModelMock)); - $resourceModelMock = $this->getMockBuilder('Magento\Framework\Model\ModelResource\Db\AbstractDb') + $resourceModelMock = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\Db\AbstractDb') ->disableOriginalConstructor() ->setMethods(['deleteFolder', '__wakeup']) ->getMockForAbstractClass(); diff --git a/app/code/Magento/MediaStorage/view/adminhtml/templates/system/config/system/storage/media/synchronize.phtml b/app/code/Magento/MediaStorage/view/adminhtml/templates/system/config/system/storage/media/synchronize.phtml index 0c9080bc8db1bcbc0e6ff30b7f624d850a8bbf3a..316c5fa5b3d28b73476f0d7e2e8cdbe1a75b41e1 100644 --- a/app/code/Magento/MediaStorage/view/adminhtml/templates/system/config/system/storage/media/synchronize.phtml +++ b/app/code/Magento/MediaStorage/view/adminhtml/templates/system/config/system/storage/media/synchronize.phtml @@ -102,7 +102,7 @@ require([ var response; try { - response = eval('(' + transport.responseText + ')'); + response = JSON.parse(transport.responseText); if (response.state == '<?php /* @escapeNotVerified */ echo \Magento\MediaStorage\Model\File\Storage\Flag::STATE_RUNNING ?>' && response.message ) { diff --git a/app/code/Magento/Msrp/etc/frontend/events.xml b/app/code/Magento/Msrp/etc/frontend/events.xml index 9ced90f1668de8efaa9a33527263eea94f9f3ae4..b233840729f4d0c51efa9f8e01b0ea405cd62cb5 100644 --- a/app/code/Magento/Msrp/etc/frontend/events.xml +++ b/app/code/Magento/Msrp/etc/frontend/events.xml @@ -7,6 +7,6 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="sales_quote_collect_totals_after"> - <observer name="catalog_msrp" instance="Magento\Msrp\Observer\Frontend\Quote\SetCanApplyMsrpObserver" method="execute" /> + <observer name="catalog_msrp" instance="Magento\Msrp\Observer\Frontend\Quote\SetCanApplyMsrpObserver" /> </event> </config> diff --git a/app/code/Magento/Msrp/etc/webapi_rest/events.xml b/app/code/Magento/Msrp/etc/webapi_rest/events.xml index 9ced90f1668de8efaa9a33527263eea94f9f3ae4..b233840729f4d0c51efa9f8e01b0ea405cd62cb5 100644 --- a/app/code/Magento/Msrp/etc/webapi_rest/events.xml +++ b/app/code/Magento/Msrp/etc/webapi_rest/events.xml @@ -7,6 +7,6 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="sales_quote_collect_totals_after"> - <observer name="catalog_msrp" instance="Magento\Msrp\Observer\Frontend\Quote\SetCanApplyMsrpObserver" method="execute" /> + <observer name="catalog_msrp" instance="Magento\Msrp\Observer\Frontend\Quote\SetCanApplyMsrpObserver" /> </event> </config> diff --git a/app/code/Magento/Msrp/etc/webapi_soap/events.xml b/app/code/Magento/Msrp/etc/webapi_soap/events.xml index 9ced90f1668de8efaa9a33527263eea94f9f3ae4..b233840729f4d0c51efa9f8e01b0ea405cd62cb5 100644 --- a/app/code/Magento/Msrp/etc/webapi_soap/events.xml +++ b/app/code/Magento/Msrp/etc/webapi_soap/events.xml @@ -7,6 +7,6 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="sales_quote_collect_totals_after"> - <observer name="catalog_msrp" instance="Magento\Msrp\Observer\Frontend\Quote\SetCanApplyMsrpObserver" method="execute" /> + <observer name="catalog_msrp" instance="Magento\Msrp\Observer\Frontend\Quote\SetCanApplyMsrpObserver" /> </event> </config> diff --git a/app/code/Magento/Msrp/view/base/templates/product/price/msrp.phtml b/app/code/Magento/Msrp/view/base/templates/product/price/msrp.phtml index f05fafab06ea78cb2ca5fb3c31d99f9ebcbbf5af..8ab7cb56520fa0b5dee5061967e92b1ddb53c248 100644 --- a/app/code/Magento/Msrp/view/base/templates/product/price/msrp.phtml +++ b/app/code/Magento/Msrp/view/base/templates/product/price/msrp.phtml @@ -66,7 +66,10 @@ if ($product->isSaleable()) { if ($block->getRequest()->getFullActionName() === 'catalog_product_view') { $data['addToCart']['addToCartButton'] = '#product_addtocart_form [type=submit]'; } else { - $data['addToCart']['cartForm'] = '#product_addtocart_form_from_popup'; + $data['addToCart']['cartForm'] = sprintf( + 'form:has(input[type="hidden"][name="product"][value="%s"])', + (int) $productId + ); } ?> <span id="<?php /* @escapeNotVerified */ echo $block->getPriceId() ? $block->getPriceId() : $priceElementId ?>" style="display:none"></span> diff --git a/app/code/Magento/Msrp/view/base/web/js/msrp.js b/app/code/Magento/Msrp/view/base/web/js/msrp.js index 8bad507ec0714436cf00d2e37f46f3d11758f192..18ea804d23818b1b8a1a4813a7c6675e0d957629 100644 --- a/app/code/Magento/Msrp/view/base/web/js/msrp.js +++ b/app/code/Magento/Msrp/view/base/web/js/msrp.js @@ -6,11 +6,11 @@ define([ 'jquery', 'underscore', 'jquery/ui', - 'mage/dropdown' + 'mage/dropdown', + 'mage/template' ], function ($, _) { 'use strict'; - var openDropDown = null; $.widget('mage.addToCart', { options: { showAddToCart: true, @@ -21,6 +21,9 @@ define([ // Selectors cartForm: '.form.map.checkout', + msrpLabelId: '#map-popup-msrp', + priceLabelId: '#map-popup-price', + popUpAttr: '[data-role=msrp-popup-template]', cartButtonId: '', // better to be cartButton popupId: '', // better to be popup realPrice: '', @@ -31,143 +34,109 @@ define([ // Text options productName: '', addToCartUrl: '' + }, openDropDown: null, + triggerClass: 'dropdown-active', + + popUpOptions: { + appendTo: 'body', + dialogContentClass: 'active', + closeOnMouseLeave: false, + autoPosition: true, + closeOnClickOutside: false, + 'dialogClass': 'popup map-popup-wrapper', + position: { + my: 'left top', + collision: 'fit none', + at: 'left bottom', + within: 'body' + }, + shadowHinter: 'popup popup-pointer' + }, + popupOpened: false, /** * Creates widget instance * @private */ _create: function () { - $(this.options.cartButtonId).on('click', this._addToCartSubmit.bind(this)); - - $(this.options.popupId).on('click', function (event) { - var dialog; - event.preventDefault(); - - if (this.options.submitUrl) { - location.href = this.options.submitUrl; - } else { - $(this.options.popupCartButtonId) - .off('click') - .on('click', this._addToCartSubmit.bind(this)); - $('#map-popup-heading-price').text(this.options.productName); - $('#map-popup-price').html($(this.options.realPrice).html().trim()); - $('#map-popup-msrp > span.price').html(this.options.msrpPrice); - - this.element.trigger('reloadPrice'); - - dialog = $('#map-popup-click-for-price'); - this._popupDialog(dialog, this.options.popupId); - - if (this.options.addToCartUrl) { - $(this.options.cartForm).attr('action', this.options.addToCartUrl); - } - - if (!this.options.showAddToCart) { - $('#product_addtocart_form_from_popup').hide(); - } - - return false; - } - }.bind(this)); + var tierOptions; + + this.popupDOM = $(this.options.popUpAttr)[0]; + this.infoPopupDOM = $('[data-role=msrp-info-template]')[0]; + + if (this.options.popupId) { + $('body').append($(this.popupDOM).html()); + this.$popup = $($(this.popupDOM).html()); + + $(this.options.popupId).on('click', function (e) { + this.popUpOptions.position.of = $(e.target); + this.$popup.find(this.options.msrpLabelId).html(this.options.msrpPrice); + this.$popup.find(this.options.priceLabelId).html(this.options.realPrice); + this.$popup.dropdownDialog(this.popUpOptions).dropdownDialog('open'); + + this.$popup.find('button').on('click', function () { + if (this.options.addToCartButton) { + $(this.options.addToCartButton).click(); + } + }.bind(this)); + this._toggle(this.$popup); + }.bind(this)); + } - $(this.options.helpLinkId).on('click', function () { - $('#map-popup-heading-what-this').text(this.options.productName); - this._popupDialog($('#map-popup-what-this'), this.options.helpLinkId); + if (this.options.helpLinkId) { + this.$infoPopup = $(this.infoPopupDOM.innerText).appendTo('body'); + $(this.options.helpLinkId).on('click', function (e) { + this.popUpOptions.position.of = $(e.target); + this.$infoPopup.dropdownDialog(this.popUpOptions).dropdownDialog('open'); + this._toggle(this.$infoPopup); + }.bind(this)); + } - return false; - }.bind(this)); + if (this.options.attr) { + this.popupDOM = $(this.options.popUpAttr)[0]; + this.$popup = $(this.popupDOM.innerText).appendTo('body'); + this.popUpOptions.position.of = $(this.options.helpLinkId); + $(this.options.attr).on('click', function (e) { + this.popUpOptions.position.of = $(e.target); + tierOptions = JSON.parse($(e.target).attr('data-tier-price')); + this.$popup.find(this.options.msrpLabelId).html(tierOptions.msrp); + this.$popup.find(this.options.priceLabelId).html(tierOptions.price); + this.$popup.find('button').on('click', function (e) { + e.preventDefault(); + this.$popup.find('form').attr('action', tierOptions.addToCartUrl).submit(); + }.bind(this)); + this.$popup.dropdownDialog(this.popUpOptions).dropdownDialog('open'); + this._toggle(this.$popup); + }.bind(this)); + } }, /** - * Handler for dialog popup - * @param {jQuery} elementTarget - * @param {jQuery} elementTrigger + * + * @param $elem * @private */ - _popupDialog: function (elementTarget, elementTrigger) { - var target = $(elementTarget), - trigger = $(elementTrigger), - counter = 0, - triggerClass = 'dropdown-active', - options; - - options = { - appendTo: 'body', - dialogContentClass: 'active', - closeOnMouseLeave: false, - autoPosition: true, - 'dialogClass': 'popup map-popup-wrapper', - position: { - my: 'left top', - collision: 'fit none', - at: 'left bottom', - within: 'body', - of: trigger - }, - shadowHinter: 'popup popup-pointer' - }; - options = _.extend(options, this.options.dialog); - - if (openDropDown && openDropDown.is(':data(mage-dropdownDialog)')) { - openDropDown.dropdownDialog('close'); - } - - if (this.options.singleOpenDropDown) { - this.openDropDown = openDropDown; - } - openDropDown = target - .dropdownDialog(options) - .off('dropdowndialogclose') - .on('dropdowndialogclose', function () { - if (!counter) { - openDropDown = null; - $(window).off('resize'); - } - trigger.removeClass(triggerClass); - }) - .on('dropdowndialogopen', function () { - trigger.addClass(triggerClass); - }) - .dropdownDialog('open'); - - $(window) - .resize(_.debounce(function () { - if (openDropDown) { - counter--; - openDropDown.dropdownDialog('open'); - } - }, this.options.dialogDelay)) - .resize(_.debounce(function () { - if (openDropDown) { - counter++; - openDropDown.dropdownDialog('close'); - } - }, this.options.dialogDelay, true)); + _toggle: function ($elem) { + $(document).on('mouseup', function (e) { + if (!$elem.is(e.target) && $elem.has(e.target).length === 0) { + this.closePopup($elem); + } + }.bind(this)); + $(window).on('resize', function () { + this.closePopup($elem); + }.bind(this)) }, /** - * Handler for addToCart action - * @private + * + * @param $elem */ - _addToCartSubmit: function () { - this.element.trigger('addToCart', this.element); - if (this.element.data('stop-processing')) { - return false; - } - - if (this.options.addToCartButton) { - $(this.options.addToCartButton).click(); - - return; - } - - if (this.options.addToCartUrl) { - $('.mage-dropdown-dialog > .ui-dialog-content').dropdownDialog('close'); - } - $(this.options.cartForm).submit(); + closePopup: function ($elem) { + $elem.dropdownDialog('close'); + $(document).off('mouseup'); } }); diff --git a/app/code/Magento/Msrp/view/frontend/templates/popup.phtml b/app/code/Magento/Msrp/view/frontend/templates/popup.phtml index 07230989e180869fe60a765a41d784c7f533f198..521f17e4971b68827f75e2b89e2877d1601ab517 100644 --- a/app/code/Magento/Msrp/view/frontend/templates/popup.phtml +++ b/app/code/Magento/Msrp/view/frontend/templates/popup.phtml @@ -11,6 +11,7 @@ /** @var \Magento\Msrp\Block\Popup $block */ ?> <?php if ($block->isEnabled()): ?> + <script data-role="msrp-popup-template" type="text/x-magento-template"> <div id="map-popup-click-for-price" class="map-popup"> <div class="popup-header"> <strong class="title" id="map-popup-heading-price"></strong> @@ -47,7 +48,8 @@ </div> </div> </div> - + </script> + <script data-role="msrp-info-template" type="text/x-magento-template"> <div id="map-popup-what-this" class="map-popup"> <div class="popup-header"> <strong class="title" id="map-popup-heading-what-this"></strong> @@ -58,4 +60,5 @@ </div> </div> </div> + </script> <?php endif; ?> diff --git a/app/code/Magento/NewRelicReporting/Model/ResourceModel/Counts.php b/app/code/Magento/NewRelicReporting/Model/ResourceModel/Counts.php index 8de4e7ff9221a218a64a110f820cebfe5b79c7e4..bbd351eee8af3a3508d7e376b77a234fab322fb7 100644 --- a/app/code/Magento/NewRelicReporting/Model/ResourceModel/Counts.php +++ b/app/code/Magento/NewRelicReporting/Model/ResourceModel/Counts.php @@ -6,7 +6,7 @@ namespace Magento\NewRelicReporting\Model\ResourceModel; -class Counts extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Counts extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Initialize users resource model diff --git a/app/code/Magento/NewRelicReporting/Model/ResourceModel/Counts/Collection.php b/app/code/Magento/NewRelicReporting/Model/ResourceModel/Counts/Collection.php index d6cd15cda1126c52c4ee051561c9e8f26aea3f91..da4e4bdbabee76091a646c90091228bbba1a186a 100644 --- a/app/code/Magento/NewRelicReporting/Model/ResourceModel/Counts/Collection.php +++ b/app/code/Magento/NewRelicReporting/Model/ResourceModel/Counts/Collection.php @@ -6,7 +6,7 @@ namespace Magento\NewRelicReporting\Model\ResourceModel\Counts; -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Initialize counts resource collection diff --git a/app/code/Magento/NewRelicReporting/Model/ResourceModel/Module.php b/app/code/Magento/NewRelicReporting/Model/ResourceModel/Module.php index c9d73c97fb78f71ea773c54272be7717e1625dea..43bd47407d1ff9200e7b815c0bd468c077b824fc 100644 --- a/app/code/Magento/NewRelicReporting/Model/ResourceModel/Module.php +++ b/app/code/Magento/NewRelicReporting/Model/ResourceModel/Module.php @@ -6,7 +6,7 @@ namespace Magento\NewRelicReporting\Model\ResourceModel; -class Module extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Module extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Initialize module status resource model diff --git a/app/code/Magento/NewRelicReporting/Model/ResourceModel/Module/Collection.php b/app/code/Magento/NewRelicReporting/Model/ResourceModel/Module/Collection.php index 1b41b28aa7b81e41ef4bbf29f7a05152f5136a90..28c4119736bd7b1a88649b9b6da4a00ac3145c3c 100644 --- a/app/code/Magento/NewRelicReporting/Model/ResourceModel/Module/Collection.php +++ b/app/code/Magento/NewRelicReporting/Model/ResourceModel/Module/Collection.php @@ -6,7 +6,7 @@ namespace Magento\NewRelicReporting\Model\ResourceModel\Module; -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Initialize module status resource model diff --git a/app/code/Magento/NewRelicReporting/Model/ResourceModel/Orders.php b/app/code/Magento/NewRelicReporting/Model/ResourceModel/Orders.php index 8620239aef5f5434cf928287c8acf65d8f192529..d3ba20c22ba32fe894f8f3ed33039e9325ac74e8 100644 --- a/app/code/Magento/NewRelicReporting/Model/ResourceModel/Orders.php +++ b/app/code/Magento/NewRelicReporting/Model/ResourceModel/Orders.php @@ -6,7 +6,7 @@ namespace Magento\NewRelicReporting\Model\ResourceModel; -class Orders extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Orders extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Initialize orders resource model diff --git a/app/code/Magento/NewRelicReporting/Model/ResourceModel/Orders/Collection.php b/app/code/Magento/NewRelicReporting/Model/ResourceModel/Orders/Collection.php index f5a51553da2230144ee3aa49465dc040a63d5db6..0f49fe88bce7eadd83c8945538ab6ec21df53cdf 100644 --- a/app/code/Magento/NewRelicReporting/Model/ResourceModel/Orders/Collection.php +++ b/app/code/Magento/NewRelicReporting/Model/ResourceModel/Orders/Collection.php @@ -6,7 +6,7 @@ namespace Magento\NewRelicReporting\Model\ResourceModel\Orders; -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Initialize orders resource collection diff --git a/app/code/Magento/NewRelicReporting/Model/ResourceModel/System.php b/app/code/Magento/NewRelicReporting/Model/ResourceModel/System.php index 6baa41ddb8d6bab58a9e4f7fd845ef38fda8507b..b5e4edc67b9d56fcc7804c3e5b980b7f555c3268 100644 --- a/app/code/Magento/NewRelicReporting/Model/ResourceModel/System.php +++ b/app/code/Magento/NewRelicReporting/Model/ResourceModel/System.php @@ -6,7 +6,7 @@ namespace Magento\NewRelicReporting\Model\ResourceModel; -class System extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class System extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Initialize system updates resource model diff --git a/app/code/Magento/NewRelicReporting/Model/ResourceModel/System/Collection.php b/app/code/Magento/NewRelicReporting/Model/ResourceModel/System/Collection.php index c054b74d6a4f8e39dd3daad6c19263191db1a095..021b2f3d4a69ea424e2af29508ea5ea6fe87699f 100644 --- a/app/code/Magento/NewRelicReporting/Model/ResourceModel/System/Collection.php +++ b/app/code/Magento/NewRelicReporting/Model/ResourceModel/System/Collection.php @@ -6,7 +6,7 @@ namespace Magento\NewRelicReporting\Model\ResourceModel\System; -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Initialize system updates resource collection diff --git a/app/code/Magento/NewRelicReporting/Model/ResourceModel/Users.php b/app/code/Magento/NewRelicReporting/Model/ResourceModel/Users.php index 6240ce401519948d105233fa066840869c900984..40b062535bf729d92b697df6096b9f8a0e5f1f78 100644 --- a/app/code/Magento/NewRelicReporting/Model/ResourceModel/Users.php +++ b/app/code/Magento/NewRelicReporting/Model/ResourceModel/Users.php @@ -6,7 +6,7 @@ namespace Magento\NewRelicReporting\Model\ResourceModel; -class Users extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Users extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Initialize users resource model diff --git a/app/code/Magento/NewRelicReporting/Model/ResourceModel/Users/Collection.php b/app/code/Magento/NewRelicReporting/Model/ResourceModel/Users/Collection.php index aa54af519c9d2d5652c047b13e643a9312063c8b..6f6d18c6da839ce9ca356b92c76b6f57359f466d 100644 --- a/app/code/Magento/NewRelicReporting/Model/ResourceModel/Users/Collection.php +++ b/app/code/Magento/NewRelicReporting/Model/ResourceModel/Users/Collection.php @@ -6,7 +6,7 @@ namespace Magento\NewRelicReporting\Model\ResourceModel\Users; -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Initialize users resource collection diff --git a/app/code/Magento/NewRelicReporting/etc/adminhtml/events.xml b/app/code/Magento/NewRelicReporting/etc/adminhtml/events.xml index 81625db511373753077f0ebc21b7dd2cf9a10313..19d0296196fde02d033717f9aec9adc33172e532 100644 --- a/app/code/Magento/NewRelicReporting/etc/adminhtml/events.xml +++ b/app/code/Magento/NewRelicReporting/etc/adminhtml/events.xml @@ -7,22 +7,22 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="adminhtml_cache_flush_system"> - <observer name="newrelicreporting_observer_report_system_cache_flush" instance="Magento\NewRelicReporting\Model\Observer\ReportSystemCacheFlush" method="execute" /> - <observer name="newrelicreporting_newrelic_report_system_cache_flush" instance="Magento\NewRelicReporting\Model\Observer\ReportSystemCacheFlushToNewRelic" method="execute" /> + <observer name="newrelicreporting_observer_report_system_cache_flush" instance="Magento\NewRelicReporting\Model\Observer\ReportSystemCacheFlush" /> + <observer name="newrelicreporting_newrelic_report_system_cache_flush" instance="Magento\NewRelicReporting\Model\Observer\ReportSystemCacheFlushToNewRelic" /> </event> <event name="controller_action_predispatch_adminhtml"> - <observer name="newrelicreporting_observer_report_concurrent_admins" instance="Magento\NewRelicReporting\Model\Observer\ReportConcurrentAdmins" method="execute" /> - <observer name="newrelicreporting_newrelic_report_oncurrent_admins" instance="Magento\NewRelicReporting\Model\Observer\ReportConcurrentAdminsToNewRelic" method="execute" /> + <observer name="newrelicreporting_observer_report_concurrent_admins" instance="Magento\NewRelicReporting\Model\Observer\ReportConcurrentAdmins" /> + <observer name="newrelicreporting_newrelic_report_oncurrent_admins" instance="Magento\NewRelicReporting\Model\Observer\ReportConcurrentAdminsToNewRelic" /> </event> <event name="catalog_product_save_before"> - <observer name="newrelicreporting_observer_report_product_save" instance="Magento\NewRelicReporting\Model\Observer\ReportProductSaved" method="execute" /> - <observer name="newrelicreporting_newrelic_report_product_save" instance="Magento\NewRelicReporting\Model\Observer\ReportProductSavedToNewRelic" method="execute" /> + <observer name="newrelicreporting_observer_report_product_save" instance="Magento\NewRelicReporting\Model\Observer\ReportProductSaved" /> + <observer name="newrelicreporting_newrelic_report_product_save" instance="Magento\NewRelicReporting\Model\Observer\ReportProductSavedToNewRelic" /> </event> <event name="catalog_product_delete_after_done"> - <observer name="newrelicreporting_observer_report_product_delete" instance="Magento\NewRelicReporting\Model\Observer\ReportProductDeleted" method="execute" /> - <observer name="newrelicreporting_newrelic_report_product_delete" instance="Magento\NewRelicReporting\Model\Observer\ReportProductDeletedToNewRelic" method="execute" /> + <observer name="newrelicreporting_observer_report_product_delete" instance="Magento\NewRelicReporting\Model\Observer\ReportProductDeleted" /> + <observer name="newrelicreporting_newrelic_report_product_delete" instance="Magento\NewRelicReporting\Model\Observer\ReportProductDeletedToNewRelic" /> </event> <event name="admin_system_config_changed_section_newrelicreporting"> - <observer name="newrelicreporting_observer_check_config" instance="Magento\NewRelicReporting\Model\Observer\CheckConfig" method="execute"/> + <observer name="newrelicreporting_observer_check_config" instance="Magento\NewRelicReporting\Model\Observer\CheckConfig"/> </event> </config> diff --git a/app/code/Magento/NewRelicReporting/etc/events.xml b/app/code/Magento/NewRelicReporting/etc/events.xml index 11201397d87699eeef82e055dc3c2d3dc268dcaf..79a3a3296d02aaecbd9534d63f080e8b67e2468c 100644 --- a/app/code/Magento/NewRelicReporting/etc/events.xml +++ b/app/code/Magento/NewRelicReporting/etc/events.xml @@ -7,7 +7,7 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="sales_order_place_after"> - <observer name="newrelicreporting_observer_report_sales_order_place" instance="Magento\NewRelicReporting\Model\Observer\ReportOrderPlaced" method="execute" /> - <observer name="newrelicreporting_newrelic_report_sales_order_place" instance="Magento\NewRelicReporting\Model\Observer\ReportOrderPlacedToNewRelic" method="execute" /> + <observer name="newrelicreporting_observer_report_sales_order_place" instance="Magento\NewRelicReporting\Model\Observer\ReportOrderPlaced" /> + <observer name="newrelicreporting_newrelic_report_sales_order_place" instance="Magento\NewRelicReporting\Model\Observer\ReportOrderPlacedToNewRelic" /> </event> </config> diff --git a/app/code/Magento/NewRelicReporting/etc/frontend/events.xml b/app/code/Magento/NewRelicReporting/etc/frontend/events.xml index 471fa6c63ce619adef297feaf4f7da3aaf39f3ea..678ab7d18b57b476dbefdf541c79aa610ee02f3d 100644 --- a/app/code/Magento/NewRelicReporting/etc/frontend/events.xml +++ b/app/code/Magento/NewRelicReporting/etc/frontend/events.xml @@ -7,7 +7,7 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="controller_action_predispatch"> - <observer name="newrelicreporting_observer_report_concurrent_users" instance="Magento\NewRelicReporting\Model\Observer\ReportConcurrentUsers" method="execute" /> - <observer name="newrelicreporting_newrelic_report_concurrent_users" instance="Magento\NewRelicReporting\Model\Observer\ReportConcurrentUsersToNewRelic" method="execute" /> + <observer name="newrelicreporting_observer_report_concurrent_users" instance="Magento\NewRelicReporting\Model\Observer\ReportConcurrentUsers" /> + <observer name="newrelicreporting_newrelic_report_concurrent_users" instance="Magento\NewRelicReporting\Model\Observer\ReportConcurrentUsersToNewRelic" /> </event> </config> diff --git a/app/code/Magento/Newsletter/Model/Problem.php b/app/code/Magento/Newsletter/Model/Problem.php index f881d8e9912e84bdfd84126d0a31394f471184b4..f62b509660559d694d24061b81dfeaf2960ed461 100644 --- a/app/code/Magento/Newsletter/Model/Problem.php +++ b/app/code/Magento/Newsletter/Model/Problem.php @@ -43,7 +43,7 @@ class Problem extends \Magento\Framework\Model\AbstractModel * @param \Magento\Framework\Model\Context $context * @param \Magento\Framework\Registry $registry * @param \Magento\Newsletter\Model\SubscriberFactory $subscriberFactory - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -51,7 +51,7 @@ class Problem extends \Magento\Framework\Model\AbstractModel \Magento\Framework\Model\Context $context, \Magento\Framework\Registry $registry, \Magento\Newsletter\Model\SubscriberFactory $subscriberFactory, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Newsletter/Model/Queue.php b/app/code/Magento/Newsletter/Model/Queue.php index 6b34b766a5e0404e4a887c90d45e6459ec775fbf..17c28f4d56fcf244db320b46ee0746bae9b33c9a 100644 --- a/app/code/Magento/Newsletter/Model/Queue.php +++ b/app/code/Magento/Newsletter/Model/Queue.php @@ -117,7 +117,7 @@ class Queue extends \Magento\Framework\Model\AbstractModel implements TemplateTy * @param \Magento\Newsletter\Model\ProblemFactory $problemFactory * @param \Magento\Newsletter\Model\ResourceModel\Subscriber\CollectionFactory $subscriberCollectionFactory * @param \Magento\Newsletter\Model\Queue\TransportBuilder $transportBuilder - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -131,7 +131,7 @@ class Queue extends \Magento\Framework\Model\AbstractModel implements TemplateTy \Magento\Newsletter\Model\ProblemFactory $problemFactory, \Magento\Newsletter\Model\ResourceModel\Subscriber\CollectionFactory $subscriberCollectionFactory, \Magento\Newsletter\Model\Queue\TransportBuilder $transportBuilder, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Newsletter/Model/ResourceModel/Grid/Collection.php b/app/code/Magento/Newsletter/Model/ResourceModel/Grid/Collection.php index 7c9ee8c0e289dad1275a2e0e9dadf90ddcfa3a66..29ca4f54293ba65dc8a5ba83ff84aa2e28a185c1 100644 --- a/app/code/Magento/Newsletter/Model/ResourceModel/Grid/Collection.php +++ b/app/code/Magento/Newsletter/Model/ResourceModel/Grid/Collection.php @@ -18,7 +18,7 @@ class Collection extends \Magento\Newsletter\Model\ResourceModel\Problem\Collect /** * Adds queue info to grid * - * @return \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection|\Magento\Newsletter\Model\ResourceModel\Grid\Collection + * @return \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection|\Magento\Newsletter\Model\ResourceModel\Grid\Collection */ protected function _initSelect() { diff --git a/app/code/Magento/Newsletter/Model/ResourceModel/Problem.php b/app/code/Magento/Newsletter/Model/ResourceModel/Problem.php index fb9fd78ee0b7428a1d58a0c8d9770bfea2e97c78..77d8b9baec130b5ebb8bd9b2084a45514e3317e8 100644 --- a/app/code/Magento/Newsletter/Model/ResourceModel/Problem.php +++ b/app/code/Magento/Newsletter/Model/ResourceModel/Problem.php @@ -10,7 +10,7 @@ namespace Magento\Newsletter\Model\ResourceModel; * * @author Magento Core Team <core@magentocommerce.com> */ -class Problem extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Problem extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Define main table diff --git a/app/code/Magento/Newsletter/Model/ResourceModel/Problem/Collection.php b/app/code/Magento/Newsletter/Model/ResourceModel/Problem/Collection.php index 4d0dfe4cb603f7eb933b934af3ce35a34f112ecc..110ef3c821bec54656d1b4a7147455fb0463cd8d 100644 --- a/app/code/Magento/Newsletter/Model/ResourceModel/Problem/Collection.php +++ b/app/code/Magento/Newsletter/Model/ResourceModel/Problem/Collection.php @@ -13,7 +13,7 @@ use Magento\Framework\Exception\NoSuchEntityException; * * @SuppressWarnings(PHPMD.LongVariable) */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * True when subscribers info joined @@ -63,7 +63,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab * @param CustomerRepository $customerRepository * @param \Magento\Customer\Helper\View $customerView * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection - * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource + * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource */ public function __construct( \Magento\Framework\Data\Collection\EntityFactory $entityFactory, @@ -73,7 +73,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab CustomerRepository $customerRepository, \Magento\Customer\Helper\View $customerView, \Magento\Framework\DB\Adapter\AdapterInterface $connection = null, - \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null + \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null ) { parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource); $this->customerRepository = $customerRepository; diff --git a/app/code/Magento/Newsletter/Model/ResourceModel/Queue.php b/app/code/Magento/Newsletter/Model/ResourceModel/Queue.php index 6bc24a47f6e9996b96704bc4c414d3ac340eab58..cf8086a659828306da40a5753c2c68b1128870a6 100644 --- a/app/code/Magento/Newsletter/Model/ResourceModel/Queue.php +++ b/app/code/Magento/Newsletter/Model/ResourceModel/Queue.php @@ -13,7 +13,7 @@ use Magento\Newsletter\Model\Queue as ModelQueue; * * @author Magento Core Team <core@magentocommerce.com> */ -class Queue extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Queue extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Subscriber collection @@ -25,12 +25,12 @@ class Queue extends \Magento\Framework\Model\ModelResource\Db\AbstractDb /** * Construct * - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Newsletter\Model\ResourceModel\Subscriber\Collection $subscriberCollection * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Newsletter\Model\ResourceModel\Subscriber\Collection $subscriberCollection, $connectionName = null ) { diff --git a/app/code/Magento/Newsletter/Model/ResourceModel/Queue/Collection.php b/app/code/Magento/Newsletter/Model/ResourceModel/Queue/Collection.php index 66eea82e01b1784303e8eb330e25cbb69b786db5..138b7bd121eeda18c9b577ff15440f365558101c 100644 --- a/app/code/Magento/Newsletter/Model/ResourceModel/Queue/Collection.php +++ b/app/code/Magento/Newsletter/Model/ResourceModel/Queue/Collection.php @@ -10,7 +10,7 @@ namespace Magento\Newsletter\Model\ResourceModel\Queue; * * @author Magento Core Team <core@magentocommerce.com> */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * True when subscribers info joined @@ -40,7 +40,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab * @param \Magento\Framework\Event\ManagerInterface $eventManager * @param \Magento\Framework\Stdlib\DateTime\DateTime $date * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection - * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource + * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource */ public function __construct( \Magento\Framework\Data\Collection\EntityFactory $entityFactory, @@ -49,7 +49,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab \Magento\Framework\Event\ManagerInterface $eventManager, \Magento\Framework\Stdlib\DateTime\DateTime $date, \Magento\Framework\DB\Adapter\AdapterInterface $connection = null, - \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null + \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null ) { parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource); $this->_date = $date; diff --git a/app/code/Magento/Newsletter/Model/ResourceModel/Subscriber.php b/app/code/Magento/Newsletter/Model/ResourceModel/Subscriber.php index f0bac9f61c69fd1f0b8ae332ee641cab894618ec..ffd998a2c333fa8e0f30040a193f407b4279d946 100644 --- a/app/code/Magento/Newsletter/Model/ResourceModel/Subscriber.php +++ b/app/code/Magento/Newsletter/Model/ResourceModel/Subscriber.php @@ -10,7 +10,7 @@ namespace Magento\Newsletter\Model\ResourceModel; * * @author Magento Core Team <core@magentocommerce.com> */ -class Subscriber extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Subscriber extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * DB connection @@ -48,13 +48,13 @@ class Subscriber extends \Magento\Framework\Model\ModelResource\Db\AbstractDb /** * Construct * - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Framework\Stdlib\DateTime\DateTime $date * @param \Magento\Framework\Math\Random $mathRandom * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Framework\Stdlib\DateTime\DateTime $date, \Magento\Framework\Math\Random $mathRandom, $connectionName = null diff --git a/app/code/Magento/Newsletter/Model/ResourceModel/Subscriber/Collection.php b/app/code/Magento/Newsletter/Model/ResourceModel/Subscriber/Collection.php index b93f600cbdc45b4d84f59bbe9b27a9abd3ed64af..92de4c8b2e6ccab6c99a3297087e6c5b3d3227a4 100644 --- a/app/code/Magento/Newsletter/Model/ResourceModel/Subscriber/Collection.php +++ b/app/code/Magento/Newsletter/Model/ResourceModel/Subscriber/Collection.php @@ -12,7 +12,7 @@ use Magento\Newsletter\Model\Queue as ModelQueue; * * @author Magento Core Team <core@magentocommerce.com> */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Queue link table name @@ -63,7 +63,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab * @param \Magento\Framework\Event\ManagerInterface $eventManager * @param \Magento\Eav\Helper\Data $customerHelperData * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection - * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource + * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource */ public function __construct( \Magento\Framework\Data\Collection\EntityFactory $entityFactory, @@ -72,7 +72,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab \Magento\Framework\Event\ManagerInterface $eventManager, \Magento\Eav\Helper\Data $customerHelperData, \Magento\Framework\DB\Adapter\AdapterInterface $connection = null, - \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null + \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null ) { $this->_customerHelperData = $customerHelperData; parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource); diff --git a/app/code/Magento/Newsletter/Model/ResourceModel/Template.php b/app/code/Magento/Newsletter/Model/ResourceModel/Template.php index f2a19d1c81ebe67a1d21b8eb1b42c355e48d0208..3d9c097678af892fa5256ab1587fef040ff38432 100644 --- a/app/code/Magento/Newsletter/Model/ResourceModel/Template.php +++ b/app/code/Magento/Newsletter/Model/ResourceModel/Template.php @@ -13,7 +13,7 @@ namespace Magento\Newsletter\Model\ResourceModel; * * @author Magento Core Team <core@magentocommerce.com> */ -class Template extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Template extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Date @@ -23,12 +23,12 @@ class Template extends \Magento\Framework\Model\ModelResource\Db\AbstractDb protected $_date; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Framework\Stdlib\DateTime\DateTime $date * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Framework\Stdlib\DateTime\DateTime $date, $connectionName = null ) { diff --git a/app/code/Magento/Newsletter/Model/ResourceModel/Template/Collection.php b/app/code/Magento/Newsletter/Model/ResourceModel/Template/Collection.php index 17e5272f31586066c84e6e09b4843f8f3a3382b0..925352d50497c18bbc4884cac935a1d970831baf 100644 --- a/app/code/Magento/Newsletter/Model/ResourceModel/Template/Collection.php +++ b/app/code/Magento/Newsletter/Model/ResourceModel/Template/Collection.php @@ -10,7 +10,7 @@ namespace Magento\Newsletter\Model\ResourceModel\Template; * * @author Magento Core Team <core@magentocommerce.com> */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Define resource model and model diff --git a/app/code/Magento/Newsletter/Model/Subscriber.php b/app/code/Magento/Newsletter/Model/Subscriber.php index 2a4be1caffe25f8cf920997dbfef4ce0d21b713f..5ea6aefc0defe38d49d81037ec0d5884ccce70b1 100644 --- a/app/code/Magento/Newsletter/Model/Subscriber.php +++ b/app/code/Magento/Newsletter/Model/Subscriber.php @@ -133,7 +133,7 @@ class Subscriber extends \Magento\Framework\Model\AbstractModel * @param CustomerRepositoryInterface $customerRepository * @param AccountManagementInterface $customerAccountManagement * @param \Magento\Framework\Translate\Inline\StateInterface $inlineTranslation - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -149,7 +149,7 @@ class Subscriber extends \Magento\Framework\Model\AbstractModel CustomerRepositoryInterface $customerRepository, AccountManagementInterface $customerAccountManagement, \Magento\Framework\Translate\Inline\StateInterface $inlineTranslation, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Newsletter/view/adminhtml/templates/preview/store.phtml b/app/code/Magento/Newsletter/view/adminhtml/templates/preview/store.phtml index 1e6876471f61cee5d929431c5154013dddcd2708..9daad0736909f8db00984c597fe3ddeb362e220b 100644 --- a/app/code/Magento/Newsletter/view/adminhtml/templates/preview/store.phtml +++ b/app/code/Magento/Newsletter/view/adminhtml/templates/preview/store.phtml @@ -12,7 +12,10 @@ <div class="field field-store-switcher"> <label class="label" for="store_switcher"><?php /* @escapeNotVerified */ echo __('Choose Store View:') ?></label> <div class="control"> - <select name="store_switcher" id="store_switcher"> + <select + id="store_switcher" + class="admin__control-select" + name="store_switcher"> <?php foreach ($websites as $website): ?> <?php $showWebsite = false; ?> <?php foreach ($website->getGroups() as $group): ?> diff --git a/app/code/Magento/Newsletter/view/adminhtml/templates/template/edit.phtml b/app/code/Magento/Newsletter/view/adminhtml/templates/template/edit.phtml index 84c07890a4efe022fa170b0750383362d350e9bf..26ac1a28b3c06a1ad78afc5b7ce5d6eb149c1739 100644 --- a/app/code/Magento/Newsletter/view/adminhtml/templates/template/edit.phtml +++ b/app/code/Magento/Newsletter/view/adminhtml/templates/template/edit.phtml @@ -31,9 +31,11 @@ use Magento\Framework\App\TemplateTypesInterface; require([ 'jquery', 'tinymce', + 'Magento_Ui/js/modal/prompt', + 'Magento_Ui/js/modal/confirm', 'mage/mage', 'prototype' -], function(jQuery, tinyMCE){ +], function(jQuery, tinyMCE, prompt, confirm){ //<![CDATA[ jQuery('#newsletter_template_edit_form').mage('form').mage('validation'); @@ -81,20 +83,26 @@ require([ }, stripTags: function () { - if(!window.confirm("<?php /* @escapeNotVerified */ echo __('Are you sure that you want to strip all tags?') ?>")) { - return false; - } - if(this.isEditor()) { - this.getEditor().turnOff(); - this.getEditor().getToggleButton().hide(); - } - this.unconvertedText = $(this.id).value; - $('convert_button').hide(); - $('convert_button_back').show(); - $(this.id).value = $(this.id).value.stripScripts().stripTags(); - $('field_template_styles').hide(); - this.typeChange = true; - return false; + var self = this; + + confirm({ + content: "<?php /* @escapeNotVerified */ echo __('Are you sure that you want to strip all tags?') ?>", + actions: { + confirm: function(){ + if(self.isEditor()) { + self.getEditor().turnOff(); + self.getEditor().getToggleButton().hide(); + } + self.unconvertedText = $(self.id).value; + $('convert_button').hide(); + $('convert_button_back').show(); + $(self.id).value = $(self.id).value.stripScripts().stripTags(); + $('field_template_styles').hide(); + self.typeChange = true; + } + } + }); + }, unStripTags: function () { @@ -123,24 +131,38 @@ require([ }, saveAs: function() { + var self = this; + if (this.typeChange) { $('change_flag_element').value = '1'; } if($F('code').blank() || $F('code')==templateControl.templateName) { - value = prompt('<?php /* @escapeNotVerified */ echo __('Please enter a new template name.') ?>', templateControl.templateName + '<?php /* @escapeNotVerified */ echo __(' Copy') ?>'); - if(!value) { - if(value !== null) { - $('code').value = ''; - // Temporary solution will be replaced after refactoring of newsletter functionality - jQuery('#newsletter_template_edit_form').triggerHandler('save'); - } - return false; - } else { - $('code').value = value; - } + + prompt({ + content: '<?php /* @escapeNotVerified */ echo __('Please enter a new template name.') ?>', + value: templateControl.templateName + '<?php /* @escapeNotVerified */ echo __(' Copy') ?>', + actions: { + confirm: function(value) { + $('code').value = value; + self._saveAs(); + + return false; + }, + cancel: function(){ + $('code').value = ''; + // Temporary solution will be replaced after refactoring of newsletter functionality + jQuery('#newsletter_template_edit_form').triggerHandler('save'); + self._saveAs(); + + return false; + } + } + }); } + }, + _saveAs: function() { $('save_as_flag').value = '1'; if(this.isEditor()) { @@ -176,9 +198,14 @@ require([ }, deleteTemplate: function() { - if(window.confirm("<?php /* @escapeNotVerified */ echo __('Are you sure you want to delete this template?') ?>")) { - window.location.href = '<?php /* @escapeNotVerified */ echo $block->getDeleteUrl() ?>'; - } + confirm({ + content: "<?php /* @escapeNotVerified */ echo __('Are you sure you want to delete this template?') ?>", + actions: { + confirm: function() { + window.location.href = '<?php /* @escapeNotVerified */ echo $block->getDeleteUrl() ?>'; + } + } + }); }, isEditor: function() { diff --git a/app/code/Magento/OfflinePayments/etc/events.xml b/app/code/Magento/OfflinePayments/etc/events.xml index cda1bc21cb4eda5fb4b7021c45ebc8117866c16e..f4ea4a21f6a12e362fb69f4f21166a3e053c07f1 100644 --- a/app/code/Magento/OfflinePayments/etc/events.xml +++ b/app/code/Magento/OfflinePayments/etc/events.xml @@ -7,6 +7,6 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="sales_order_payment_save_before"> - <observer name="payment_before_save" instance="Magento\OfflinePayments\Observer\BeforeOrderPaymentSaveObserver" method="execute" /> + <observer name="payment_before_save" instance="Magento\OfflinePayments\Observer\BeforeOrderPaymentSaveObserver" /> </event> </config> diff --git a/app/code/Magento/OfflinePayments/view/frontend/web/js/view/payment/method-renderer/purchaseorder-method.js b/app/code/Magento/OfflinePayments/view/frontend/web/js/view/payment/method-renderer/purchaseorder-method.js index 0f75469f87f166da1089f83aeeea8f0d78be4185..ae8edabeea2b8620babee5edf24cffb2e1373b99 100644 --- a/app/code/Magento/OfflinePayments/view/frontend/web/js/view/payment/method-renderer/purchaseorder-method.js +++ b/app/code/Magento/OfflinePayments/view/frontend/web/js/view/payment/method-renderer/purchaseorder-method.js @@ -26,11 +26,6 @@ define( return { "method": this.item.method, 'po_number': this.purchaseOrderNumber(), - "cc_owner": null, - "cc_number": null, - "cc_type": null, - "cc_exp_year": null, - "cc_exp_month": null, "additional_data": null }; diff --git a/app/code/Magento/OfflineShipping/Model/Config/Backend/Tablerate.php b/app/code/Magento/OfflineShipping/Model/Config/Backend/Tablerate.php index e48b75956b3c44af1b1f82e5c888691b71c264ab..e6920ede9b8c4e04285538c9aed52acadc86be6f 100644 --- a/app/code/Magento/OfflineShipping/Model/Config/Backend/Tablerate.php +++ b/app/code/Magento/OfflineShipping/Model/Config/Backend/Tablerate.php @@ -24,7 +24,7 @@ class Tablerate extends \Magento\Framework\App\Config\Value * @param \Magento\Framework\Registry $registry * @param \Magento\Framework\App\Config\ScopeConfigInterface $config * @param \Magento\OfflineShipping\Model\ResourceModel\Carrier\TablerateFactory $tablerateFactory - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -33,7 +33,7 @@ class Tablerate extends \Magento\Framework\App\Config\Value \Magento\Framework\Registry $registry, \Magento\Framework\App\Config\ScopeConfigInterface $config, \Magento\OfflineShipping\Model\ResourceModel\Carrier\TablerateFactory $tablerateFactory, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/OfflineShipping/Model/ResourceModel/Carrier/Tablerate.php b/app/code/Magento/OfflineShipping/Model/ResourceModel/Carrier/Tablerate.php index 8d8c47141d93c90c29dd74105e9ba039f228b5eb..df0228a338358448f9af9d8106af49ed87a5a6ad 100644 --- a/app/code/Magento/OfflineShipping/Model/ResourceModel/Carrier/Tablerate.php +++ b/app/code/Magento/OfflineShipping/Model/ResourceModel/Carrier/Tablerate.php @@ -18,7 +18,7 @@ use Magento\Framework\Filesystem\DirectoryList; * @SuppressWarnings(PHPMD.TooManyFields) * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ -class Tablerate extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Tablerate extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Import table rates website ID @@ -122,7 +122,7 @@ class Tablerate extends \Magento\Framework\Model\ModelResource\Db\AbstractDb protected $_filesystem; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Psr\Log\LoggerInterface $logger * @param \Magento\Framework\App\Config\ScopeConfigInterface $coreConfig * @param \Magento\Store\Model\StoreManagerInterface $storeManager @@ -133,7 +133,7 @@ class Tablerate extends \Magento\Framework\Model\ModelResource\Db\AbstractDb * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Psr\Log\LoggerInterface $logger, \Magento\Framework\App\Config\ScopeConfigInterface $coreConfig, \Magento\Store\Model\StoreManagerInterface $storeManager, diff --git a/app/code/Magento/OfflineShipping/Model/ResourceModel/Carrier/Tablerate/Collection.php b/app/code/Magento/OfflineShipping/Model/ResourceModel/Carrier/Tablerate/Collection.php index 441fec80fe07b2990e13ef13cd763fda0530210e..1a63a12fac974fc4643be2c2e7167b17756eea26 100644 --- a/app/code/Magento/OfflineShipping/Model/ResourceModel/Carrier/Tablerate/Collection.php +++ b/app/code/Magento/OfflineShipping/Model/ResourceModel/Carrier/Tablerate/Collection.php @@ -10,7 +10,7 @@ namespace Magento\OfflineShipping\Model\ResourceModel\Carrier\Tablerate; * * @author Magento Core Team <core@magentocommerce.com> */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Directory/country table name diff --git a/app/code/Magento/OfflineShipping/etc/adminhtml/events.xml b/app/code/Magento/OfflineShipping/etc/adminhtml/events.xml index 2c0f82125862dfaa125fb6caa2ad55588f53d30b..fa0a834c0ee7d31df0ef515c7a1251d0a36199c5 100644 --- a/app/code/Magento/OfflineShipping/etc/adminhtml/events.xml +++ b/app/code/Magento/OfflineShipping/etc/adminhtml/events.xml @@ -7,6 +7,6 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="adminhtml_block_salesrule_actions_prepareform"> - <observer name="offlineshipping_salesrule" instance="Magento\OfflineShipping\Observer\SalesRule\ActionsTabPrepareFormObserver" method="execute" /> + <observer name="offlineshipping_salesrule" instance="Magento\OfflineShipping\Observer\SalesRule\ActionsTabPrepareFormObserver" /> </event> </config> diff --git a/app/code/Magento/PageCache/etc/events.xml b/app/code/Magento/PageCache/etc/events.xml index dbe6c9bdc4bd5adfe53abcb82495f2c6140ee4a9..349d36d123d18103c77a0b595c75219e71472c35 100644 --- a/app/code/Magento/PageCache/etc/events.xml +++ b/app/code/Magento/PageCache/etc/events.xml @@ -7,53 +7,53 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="core_layout_render_element"> - <observer name="pagecache" instance="Magento\PageCache\Observer\ProcessLayoutRenderElement" method="execute" /> + <observer name="pagecache" instance="Magento\PageCache\Observer\ProcessLayoutRenderElement" /> </event> <event name="clean_cache_by_tags"> - <observer name="invalidate_builtin" instance="Magento\PageCache\Observer\FlushCacheByTags" method="execute" /> + <observer name="invalidate_builtin" instance="Magento\PageCache\Observer\FlushCacheByTags" /> </event> <event name="clean_cache_after_reindex"> - <observer name="reindex_cache_flush" instance="Magento\PageCache\Observer\InvalidateCacheIfChanged" method="execute" /> + <observer name="reindex_cache_flush" instance="Magento\PageCache\Observer\InvalidateCacheIfChanged" /> </event> <event name="adminhtml_cache_flush_system"> - <observer name="flush_system_pagecache" instance="Magento\PageCache\Observer\FlushAllCache" method="execute" /> + <observer name="flush_system_pagecache" instance="Magento\PageCache\Observer\FlushAllCache" /> </event> <event name="adminhtml_cache_flush_all"> - <observer name="magento_all_pagecache" instance="Magento\PageCache\Observer\FlushAllCache" method="execute" /> + <observer name="magento_all_pagecache" instance="Magento\PageCache\Observer\FlushAllCache" /> </event> <event name="clean_media_cache_after"> - <observer name="flush_all_pagecache" instance="Magento\PageCache\Observer\InvalidateCache" method="execute" /> + <observer name="flush_all_pagecache" instance="Magento\PageCache\Observer\InvalidateCache" /> </event> <event name="clean_catalog_images_cache_after"> - <observer name="flush_all_pagecache" instance="Magento\PageCache\Observer\InvalidateCache" method="execute" /> + <observer name="flush_all_pagecache" instance="Magento\PageCache\Observer\InvalidateCache" /> </event> <event name="assigned_theme_changed"> - <observer name="flush_all_pagecache" instance="Magento\PageCache\Observer\FlushCacheByTags" method="execute" /> + <observer name="flush_all_pagecache" instance="Magento\PageCache\Observer\FlushCacheByTags" /> </event> <event name="assign_theme_to_stores_after"> - <observer name="flush_all_pagecache" instance="Magento\PageCache\Observer\InvalidateCache" method="execute" /> + <observer name="flush_all_pagecache" instance="Magento\PageCache\Observer\InvalidateCache" /> </event> <event name="controller_action_postdispatch_adminhtml_system_currency_saveRates"> - <observer name="flush_all_pagecache" instance="Magento\PageCache\Observer\InvalidateCache" method="execute" /> + <observer name="flush_all_pagecache" instance="Magento\PageCache\Observer\InvalidateCache" /> </event> <event name="controller_action_postdispatch_adminhtml_system_config_save"> - <observer name="flush_all_pagecache" instance="Magento\PageCache\Observer\InvalidateCache" method="execute" /> + <observer name="flush_all_pagecache" instance="Magento\PageCache\Observer\InvalidateCache" /> </event> <event name="controller_action_postdispatch_catalog_product_save"> - <observer name="flush_all_pagecache" instance="Magento\PageCache\Observer\FlushCacheByTags" method="execute" /> + <observer name="flush_all_pagecache" instance="Magento\PageCache\Observer\FlushCacheByTags" /> </event> <event name="controller_action_postdispatch_adminhtml_system_currencysymbol_save"> - <observer name="flush_all_pagecache" instance="Magento\PageCache\Observer\InvalidateCache" method="execute" /> + <observer name="flush_all_pagecache" instance="Magento\PageCache\Observer\InvalidateCache" /> </event> <event name="model_save_commit_after"> - <observer name="flush_cache_after_model_save" instance="Magento\PageCache\Observer\FlushCacheByTags" method="execute" /> + <observer name="flush_cache_after_model_save" instance="Magento\PageCache\Observer\FlushCacheByTags" /> </event> <event name="controller_action_predispatch"> <observer name="register_form_key" instance="Magento\PageCache\Observer\RegisterFormKeyFromCookie" - method="execute" /> + /> </event> <event name="customer_logout"> - <observer name="FlushFormKeyOnLogout" instance="Magento\PageCache\Observer\FlushFormKeyOnLogout" method="execute"/> + <observer name="FlushFormKeyOnLogout" instance="Magento\PageCache\Observer\FlushFormKeyOnLogout"/> </event> </config> diff --git a/app/code/Magento/Payment/Model/Info.php b/app/code/Magento/Payment/Model/Info.php index f6028fc93693672bf7ab9b17831ac2e457df3866..4ba972b321f11db3b68d756c35bc93f62b4ddc0c 100644 --- a/app/code/Magento/Payment/Model/Info.php +++ b/app/code/Magento/Payment/Model/Info.php @@ -38,7 +38,7 @@ class Info extends AbstractExtensibleModel implements InfoInterface * @param \Magento\Framework\Api\AttributeValueFactory $customAttributeFactory, * @param \Magento\Payment\Helper\Data $paymentData * @param \Magento\Framework\Encryption\EncryptorInterface $encryptor - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -49,7 +49,7 @@ class Info extends AbstractExtensibleModel implements InfoInterface \Magento\Framework\Api\AttributeValueFactory $customAttributeFactory, \Magento\Payment\Helper\Data $paymentData, \Magento\Framework\Encryption\EncryptorInterface $encryptor, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Payment/Model/Method/AbstractMethod.php b/app/code/Magento/Payment/Model/Method/AbstractMethod.php index cc47008313c9801c6ac6764d83bca718b06d5360..8e6300b62584bc97e07053e2cc04f2e0bc485967 100644 --- a/app/code/Magento/Payment/Model/Method/AbstractMethod.php +++ b/app/code/Magento/Payment/Model/Method/AbstractMethod.php @@ -221,7 +221,7 @@ abstract class AbstractMethod extends \Magento\Framework\Model\AbstractExtensibl * @param \Magento\Payment\Helper\Data $paymentData * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig * @param Logger $logger - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -234,7 +234,7 @@ abstract class AbstractMethod extends \Magento\Framework\Model\AbstractExtensibl \Magento\Payment\Helper\Data $paymentData, \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig, \Magento\Payment\Model\Method\Logger $logger, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Payment/Model/Method/Cc.php b/app/code/Magento/Payment/Model/Method/Cc.php index 23fa92da5382d120a5cf7d2cacc422deac8166b0..1bf0ab267e2b9d00f252ab40499d4df47556c483 100644 --- a/app/code/Magento/Payment/Model/Method/Cc.php +++ b/app/code/Magento/Payment/Model/Method/Cc.php @@ -46,7 +46,7 @@ class Cc extends \Magento\Payment\Model\Method\AbstractMethod * @param Logger $logger * @param \Magento\Framework\Module\ModuleListInterface $moduleList * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -61,7 +61,7 @@ class Cc extends \Magento\Payment\Model\Method\AbstractMethod \Magento\Payment\Model\Method\Logger $logger, \Magento\Framework\Module\ModuleListInterface $moduleList, \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Payment/Model/Method/Free.php b/app/code/Magento/Payment/Model/Method/Free.php index fd15c0a926d7d3547af1f7e0cb75b197a34a8fe6..dd534c8a58f1a949b4c1ea16611f526ee3b8abe8 100644 --- a/app/code/Magento/Payment/Model/Method/Free.php +++ b/app/code/Magento/Payment/Model/Method/Free.php @@ -52,7 +52,7 @@ class Free extends \Magento\Payment\Model\Method\AbstractMethod * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig * @param Logger $logger * @param PriceCurrencyInterface $priceCurrency - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -66,7 +66,7 @@ class Free extends \Magento\Payment\Model\Method\AbstractMethod \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig, \Magento\Payment\Model\Method\Logger $logger, PriceCurrencyInterface $priceCurrency, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Payment/etc/events.xml b/app/code/Magento/Payment/etc/events.xml index 0dfee90e37a4f3169d100e29c2fe0bd67f98d7c0..74f31660c81f787d9e240b4bc79084ef24bf85ef 100644 --- a/app/code/Magento/Payment/etc/events.xml +++ b/app/code/Magento/Payment/etc/events.xml @@ -7,9 +7,9 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="sales_order_save_before"> - <observer name="payment_sales_order_save_before" instance="Magento\Payment\Observer\SalesOrderBeforeSaveObserver" method="execute" /> + <observer name="payment_sales_order_save_before" instance="Magento\Payment\Observer\SalesOrderBeforeSaveObserver" /> </event> <event name="sales_order_status_unassign"> - <observer name="sales_order_status_update" instance="Magento\Payment\Observer\UpdateOrderStatusForPaymentMethodsObserver" method="execute" /> + <observer name="sales_order_status_update" instance="Magento\Payment\Observer\UpdateOrderStatusForPaymentMethodsObserver" /> </event> </config> diff --git a/app/code/Magento/Payment/i18n/de_DE.csv b/app/code/Magento/Payment/i18n/de_DE.csv index 2c9f2f6402717eda6ad37579f72311b83c3ebbde..e0d1047b776e67418ac402ebdd7fd256c2ce6cca 100644 --- a/app/code/Magento/Payment/i18n/de_DE.csv +++ b/app/code/Magento/Payment/i18n/de_DE.csv @@ -37,5 +37,5 @@ Year,Jahr "We found an incorrect credit card expiration date.","We found an incorrect credit card expiration date." "Switch/Solo/Maestro Only","Nur Switch/Solo/Maestro" "Issue Number",Ausgabenumer -"%1 is not available. You still can process offline actions.","%1 is not available. You still can process offline actions." +" is not available. You still can process offline actions."," is not available. You still can process offline actions." "Payment Methods","Payment Methods" diff --git a/app/code/Magento/Payment/i18n/en_US.csv b/app/code/Magento/Payment/i18n/en_US.csv index 0519acbd15f3ead687ea592a0de1dec47189632f..6ecc7884d0c65e4e3d31563090b7adc21fe2c92c 100644 --- a/app/code/Magento/Payment/i18n/en_US.csv +++ b/app/code/Magento/Payment/i18n/en_US.csv @@ -37,5 +37,5 @@ Year,Year "We found an incorrect credit card expiration date.","We found an incorrect credit card expiration date." "Switch/Solo/Maestro Only","Switch/Solo/Maestro Only" "Issue Number","Issue Number" -"%1 is not available. You still can process offline actions.","%1 is not available. You still can process offline actions." +" is not available. You still can process offline actions."," is not available. You still can process offline actions." "Payment Methods","Payment Methods" diff --git a/app/code/Magento/Payment/i18n/es_ES.csv b/app/code/Magento/Payment/i18n/es_ES.csv index a80e5bd794fb50e1664a6d7d812946db67c028eb..a71a050dded6aa5ccfadb30d13f8413cf55c83b8 100644 --- a/app/code/Magento/Payment/i18n/es_ES.csv +++ b/app/code/Magento/Payment/i18n/es_ES.csv @@ -37,5 +37,5 @@ Year,Año "We found an incorrect credit card expiration date.","We found an incorrect credit card expiration date." "Switch/Solo/Maestro Only","Únicamente Switch/Solo/Maestro" "Issue Number","Número de emisión" -"%1 is not available. You still can process offline actions.","%1 is not available. You still can process offline actions." +" is not available. You still can process offline actions."," is not available. You still can process offline actions." "Payment Methods","Payment Methods" diff --git a/app/code/Magento/Payment/i18n/fr_FR.csv b/app/code/Magento/Payment/i18n/fr_FR.csv index 76bf63d45f72cf7751012ee7d25a4c03b72a2f3e..9b357d40e6ae0b158b1032afbcad8b8abb548304 100644 --- a/app/code/Magento/Payment/i18n/fr_FR.csv +++ b/app/code/Magento/Payment/i18n/fr_FR.csv @@ -37,5 +37,5 @@ Year,Année "We found an incorrect credit card expiration date.","We found an incorrect credit card expiration date." "Switch/Solo/Maestro Only","Switch/Solo/Maestro seulement" "Issue Number","Numéro du problème." -"%1 is not available. You still can process offline actions.","%1 is not available. You still can process offline actions." +" is not available. You still can process offline actions."," is not available. You still can process offline actions." "Payment Methods","Payment Methods" diff --git a/app/code/Magento/Payment/i18n/nl_NL.csv b/app/code/Magento/Payment/i18n/nl_NL.csv index d4a6fef21f1f6338caea6a210c76212d88f7b192..1875b49cfccec440443ce0089e18d9a3fbdd84b2 100644 --- a/app/code/Magento/Payment/i18n/nl_NL.csv +++ b/app/code/Magento/Payment/i18n/nl_NL.csv @@ -37,5 +37,5 @@ Year,Jaar "We found an incorrect credit card expiration date.","We found an incorrect credit card expiration date." "Switch/Solo/Maestro Only","Alleen Switch/Solo/Maestro" "Issue Number","Uitgave Nummer" -"%1 is not available. You still can process offline actions.","%1 is not available. You still can process offline actions." +" is not available. You still can process offline actions."," is not available. You still can process offline actions." "Payment Methods","Payment Methods" diff --git a/app/code/Magento/Payment/i18n/pt_BR.csv b/app/code/Magento/Payment/i18n/pt_BR.csv index 49e6490333771f611b013a5786df1b81d071d06b..bdf92c19deebdfac2d59d011e55076b7e6e4daeb 100644 --- a/app/code/Magento/Payment/i18n/pt_BR.csv +++ b/app/code/Magento/Payment/i18n/pt_BR.csv @@ -37,5 +37,5 @@ Year,Ano "We found an incorrect credit card expiration date.","We found an incorrect credit card expiration date." "Switch/Solo/Maestro Only","Somente Swith/Solo/Maestro" "Issue Number","Número de Emissão" -"%1 is not available. You still can process offline actions.","%1 is not available. You still can process offline actions." +" is not available. You still can process offline actions."," is not available. You still can process offline actions." "Payment Methods","Payment Methods" diff --git a/app/code/Magento/Payment/i18n/zh_Hans_CN.csv b/app/code/Magento/Payment/i18n/zh_Hans_CN.csv index c430c9d97f2328e485603018c53d3ac82a05e8fa..39e485577e9aad838a857b20a4c0b619adc3dde5 100644 --- a/app/code/Magento/Payment/i18n/zh_Hans_CN.csv +++ b/app/code/Magento/Payment/i18n/zh_Hans_CN.csv @@ -37,5 +37,5 @@ Year,å¹´ "We found an incorrect credit card expiration date.","We found an incorrect credit card expiration date." "Switch/Solo/Maestro Only","ä»…é™ Switch/Solo/Maestro" "Issue Number",é—®é¢˜ç¼–å· -"%1 is not available. You still can process offline actions.","%1 is not available. You still can process offline actions." +" is not available. You still can process offline actions."," is not available. You still can process offline actions." "Payment Methods","Payment Methods" diff --git a/app/code/Magento/Payment/view/adminhtml/templates/form/cc.phtml b/app/code/Magento/Payment/view/adminhtml/templates/form/cc.phtml index 4e5abb08bcab754585016fa8a4fb4a3fd280cbe8..ab38d3752a679f68d8a0371d087c126268707a99 100644 --- a/app/code/Magento/Payment/view/adminhtml/templates/form/cc.phtml +++ b/app/code/Magento/Payment/view/adminhtml/templates/form/cc.phtml @@ -5,48 +5,63 @@ */ // @codingStandardsIgnoreFile - +/** + * @var \Magento\Payment\Block\Adminhtml\Transparent\Form $block + */ +$code = $block->getMethodCode(); +$ccType = $block->getInfoData('cc_type'); +$ccExpMonth = $block->getInfoData('cc_exp_month'); +$ccExpYear = $block->getInfoData('cc_exp_year'); ?> -<?php $_code = $block->getMethodCode() ?> -<fieldset class="admin__fieldset payment-method" id="payment_form_<?php /* @escapeNotVerified */ echo $_code ?>" style="display:none"> +<fieldset class="admin__fieldset payment-method" id="payment_form_<?php /* @noEscape */ echo $code; ?>" + style="display:none"> <div class="field-type admin__field _required"> - <label class="admin__field-label" for="<?php /* @escapeNotVerified */ echo $_code ?>_cc_type"><span><?php /* @escapeNotVerified */ echo __('Credit Card Type') ?></span></label> + <label class="admin__field-label" for="<?php /* @noEscape */ echo $code; ?>_cc_type"> + <span><?php echo $block->escapeHtml(__('Credit Card Type')); ?></span> + </label> <div class="admin__field-control"> - <select id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_type" name="payment[cc_type]" class="required-entry validate-cc-type-select admin__control-select"> - <?php $_ccType = $block->getInfoData('cc_type') ?> + <select id="<?php /* @noEscape */ echo $code; ?>_cc_type" name="payment[cc_type]" + class="required-entry validate-cc-type-select admin__control-select"> <option value=""></option> - <?php foreach ($block->getCcAvailableTypes() as $_typeCode => $_typeName): ?> - <option value="<?php /* @escapeNotVerified */ echo $_typeCode ?>" <?php if ($_typeCode == $_ccType): ?>selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $_typeName ?></option> + <?php foreach ($block->getCcAvailableTypes() as $typeCode => $typeName): ?> + <option value="<?php echo $block->escapeHtml($typeCode); ?>" <?php if ($typeCode == $ccType): ?>selected="selected"<?php endif ?>> + <?php echo $block->escapeHtml($typeName); ?> + </option> <?php endforeach ?> </select> </div> </div> <div class="field-number admin__field _required"> - <label class="admin__field-label" for="<?php /* @escapeNotVerified */ echo $_code ?>_cc_number"><span><?php /* @escapeNotVerified */ echo __('Credit Card Number') ?></span></label> + <label class="admin__field-label" for="<?php /* @noEscape */ echo $code; ?>_cc_number"> + <span><?php echo $block->escapeHtml(__('Credit Card Number')); ?></span> + </label> <div class="admin__field-control"> - <input type="text" id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_number" name="payment[cc_number]" - title="<?php /* @escapeNotVerified */ echo __('Credit Card Number') ?>" class="admin__control-text validate-cc-number" - value="<?php /* @escapeNotVerified */ echo $block->getInfoData('cc_number') ?>"/> + <input type="text" id="<?php /* @noEscape */ echo $code; ?>_cc_number" name="payment[cc_number]" + title="<?php echo $block->escapeHtml(__('Credit Card Number')); ?>" class="admin__control-text validate-cc-number" + value="<?php /* @noEscape */ echo $block->getInfoData('cc_number'); ?>"/> </div> </div> <div class="field-date admin__field _required"> - <label class="admin__field-label" - for="<?php /* @escapeNotVerified */ echo $_code ?>_expiration"><span><?php /* @escapeNotVerified */ echo __('Expiration Date') ?></span></label> + <label class="admin__field-label" for="<?php /* @noEscape */ echo $code; ?>_expiration"> + <span><?php echo $block->escapeHtml(__('Expiration Date')); ?></span> + </label> <div class="admin__field-control"> - <select id="<?php /* @escapeNotVerified */ echo $_code ?>_expiration" name="payment[cc_exp_month]" + <select id="<?php /* @noEscape */ echo $code ?>_expiration" name="payment[cc_exp_month]" class="admin__control-select admin__control-select-month validate-cc-exp required-entry"> - <?php $_ccExpMonth = $block->getInfoData('cc_exp_month') ?> <?php foreach ($block->getCcMonths() as $k => $v): ?> - <option value="<?php /* @escapeNotVerified */ echo $k ?>" - <?php if ($k == $_ccExpMonth): ?>selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $v ?></option> - <?php endforeach ?> + <option value="<?php echo $block->escapeHtml($k); ?>" + <?php if ($k == $ccExpMonth): ?>selected="selected"<?php endif ?>> + <?php echo $block->escapeHtml($v); ?> + </option> + <?php endforeach; ?> </select> - <?php $_ccExpYear = $block->getInfoData('cc_exp_year') ?> - <select id="<?php /* @escapeNotVerified */ echo $_code ?>_expiration_yr" name="payment[cc_exp_year]" + <select id="<?php /* @noEscape */ echo $code ?>_expiration_yr" name="payment[cc_exp_year]" class="admin__control-select admin__control-select-year required-entry"> <?php foreach ($block->getCcYears() as $k => $v): ?> - <option value="<?php /* @escapeNotVerified */ echo $k ? $k : '' ?>" - <?php if ($k == $_ccExpYear): ?>selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $v ?></option> + <option value="<?php /* @noEscape */ echo $k ? $block->escapeHtml($k) : '' ?>" + <?php if ($k == $ccExpYear): ?>selected="selected"<?php endif ?>> + <?php echo $block->escapeHtml($v); ?> + </option> <?php endforeach ?> </select> </div> @@ -54,44 +69,58 @@ <?php if ($block->hasVerification()): ?> <div class="field-number required admin__field _required"> - <label class="admin__field-label" - for="<?php /* @escapeNotVerified */ echo $_code ?>_cc_cid"><span><?php /* @escapeNotVerified */ echo __('Card Verification Number') ?></span></label> + <label class="admin__field-label" for="<?php /* @noEscape */ echo $code; ?>_cc_cid"> + <span><?php echo $block->escapeHtml(__('Card Verification Number')); ?></span> + </label> <div class="admin__field-control"> - <input type="text" title="<?php /* @escapeNotVerified */ echo __('Card Verification Number') ?>" + <input type="text" title="<?php echo $block->escapeHtml(__('Card Verification Number')); ?>" class="required-entry validate-cc-cvn admin__control-cvn admin__control-text" - id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_cid" - name="payment[cc_cid]" value="<?php /* @escapeNotVerified */ echo $block->getInfoData('cc_cid') ?>"/> + id="<?php /* @noEscape */ echo $code; ?>_cc_cid" + name="payment[cc_cid]" value="<?php /* @noEscape */ echo $block->getInfoData('cc_cid') ?>"/> </div> </div> <?php endif; ?> <?php if ($block->hasSsCardType()): ?> - <div id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_type_ss_div"> + <div id="<?php /* @noEscape */ echo $code; ?>_cc_type_ss_div"> <div class="field-type required admin__field _required"> - <label class="admin__field-label" - for="<?php /* @escapeNotVerified */ echo $_code ?>_cc_issue"><span><?php /* @escapeNotVerified */ echo __('Switch/Solo/Maestro Only') ?></span></label> + <label class="admin__field-label" for="<?php /* @noEscape */ echo $code; ?>_cc_issue"> + <span><?php echo $block->escapeHtml(__('Switch/Solo/Maestro Only')); ?></span> + </label> </div> <div class="admin__field field-issue"> <label class="admin__field-label" - for="<?php /* @escapeNotVerified */ echo $_code ?>_cc_issue"><span><?php /* @escapeNotVerified */ echo __('Issue Number') ?></span></label> + for="<?php /* @noEscape */ echo $code; ?>_cc_issue"> + <span><?php echo $block->escapeHtml(__('Issue Number')); ?></span> + </label> <div class="admin__field-control"> - <input type="text" title="<?php /* @escapeNotVerified */ echo __('Issue Number') ?>" + <input type="text" title="<?php echo $block->escapeHtml(__('Issue Number')); ?>" class="validate-cc-ukss cvv admin__control-cvv admin__control-text" - id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_issue" name="payment[cc_ss_issue]" value=""/> + id="<?php /* @noEscape */ echo $code; ?>_cc_issue" name="payment[cc_ss_issue]" value=""/> </div> </div> <div class="field field-date"> - <label class="admin__field-label" for="<?php /* @escapeNotVerified */ echo $_code ?>_start_month"><span><?php /* @escapeNotVerified */ echo __('Start Date') ?></span></label> + <label class="admin__field-label" for="<?php /* @noEscape */ echo $code; ?>_start_month"> + <span><?php echo $block->escapeHtml(__('Start Date')); ?></span> + </label> <div class="admin__field-control"> - <select id="<?php /* @escapeNotVerified */ echo $_code ?>_start_month" name="payment[cc_ss_start_month]" class="validate-cc-ukss admin__control-select admin__control-select-month"> + <select id="<?php /* @noEscape */ echo $code; ?>_start_month" name="payment[cc_ss_start_month]" + class="validate-cc-ukss admin__control-select admin__control-select-month"> <?php foreach ($block->getCcMonths() as $k => $v): ?> - <option value="<?php /* @escapeNotVerified */ echo $k ? $k : '' ?>"<?php if ($k == $block->getInfoData('cc_ss_start_month')): ?> selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $v ?></option> + <option value="<?php /* @noEscape */ echo $k ? $block->escapeHtml($k) : '' ?>" + <?php if ($k == $block->getInfoData('cc_ss_start_month')): ?> selected="selected"<?php endif ?>> + <?php echo $block->escapeHtml($v); ?> + </option> <?php endforeach ?> </select> - <select id="<?php /* @escapeNotVerified */ echo $_code ?>_start_year" name="payment[cc_ss_start_year]" class="validate-cc-ukss admin__control-select admin__control-select-year"> + <select id="<?php /* @noEscape */ echo $code; ?>_start_year" name="payment[cc_ss_start_year]" + class="validate-cc-ukss admin__control-select admin__control-select-year"> <?php foreach ($block->getSsStartYears() as $k => $v): ?> - <option value="<?php /* @escapeNotVerified */ echo $k ? $k : '' ?>"<?php if ($k == $block->getInfoData('cc_ss_start_year')): ?> selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $v ?></option> + <option value="<?php /* @noEscape */ echo $block->escapeHtml($k) ? $k : '' ?>" + <?php if ($k == $block->getInfoData('cc_ss_start_year')): ?> selected="selected"<?php endif ?>> + <?php echo $block->escapeHtml($v); ?> + </option> <?php endforeach ?> </select> </div> @@ -103,16 +132,16 @@ require(['jquery', 'prototype'], function(jQuery){ //<![CDATA[ - SSChecked<?php /* @escapeNotVerified */ echo $_code ?> = function() { - var elm = $('<?php /* @escapeNotVerified */ echo $_code ?>_cc_type'); + SSChecked<?php /* @noEscape */ echo $code; ?> = function() { + var elm = $('<?php /* @noEscape */ echo $code; ?>_cc_type'); if (['SS','SM','SO'].indexOf(elm.value) != -1) { - jQuery('#' + '<?php /* @escapeNotVerified */ echo $_code ?>_cc_type_ss_div').show().removeClass('ignore-validate'); + jQuery('#' + '<?php /* @noEscape */ echo $code; ?>_cc_type_ss_div').show().removeClass('ignore-validate'); } else { - jQuery('#' + '<?php /* @escapeNotVerified */ echo $_code ?>_cc_type_ss_div').hide().addClass('ignore-validate'); + jQuery('#' + '<?php /* @noEscape */ echo $code; ?>_cc_type_ss_div').hide().addClass('ignore-validate'); } }; - Event.observe($('<?php /* @escapeNotVerified */ echo $_code ?>_cc_type'), 'change', SSChecked<?php /* @escapeNotVerified */ echo $_code ?>); - SSChecked<?php /* @escapeNotVerified */ echo $_code ?>(); + Event.observe($('<?php /* @noEscape */ echo $code; ?>_cc_type'), 'change', SSChecked<?php /* @noEscape */ echo $code; ?>); + SSChecked<?php /* @noEscape */ echo $code; ?>(); //]]> }); diff --git a/app/code/Magento/Payment/view/adminhtml/templates/info/default.phtml b/app/code/Magento/Payment/view/adminhtml/templates/info/default.phtml index 2dc4078410ab42a7cb94a9e561ce575f52211523..2ce70dcad46a2f0b06e69eecf856cc6fe6bb9c05 100644 --- a/app/code/Magento/Payment/view/adminhtml/templates/info/default.phtml +++ b/app/code/Magento/Payment/view/adminhtml/templates/info/default.phtml @@ -5,24 +5,25 @@ */ // @codingStandardsIgnoreFile - -?> -<?php /** + * @var \Magento\Payment\Block\Info $block * @see \Magento\Payment\Block\Info */ +$specificInfo = $block->getSpecificInformation(); ?> -<?php echo $block->escapeHtml($block->getMethod()->getTitle()) ?> +<?php echo $block->escapeHtml($block->getMethod()->getTitle()); ?> -<?php if ($_specificInfo = $block->getSpecificInformation()):?> -<table class="data-table admin__table-secondary"> -<?php foreach ($_specificInfo as $_label => $_value):?> - <tr> - <th><?php echo $block->escapeHtml($_label)?>:</th> - <td><?php /* @escapeNotVerified */ echo nl2br(implode("\n", $block->getValueAsArray($_value, true)))?></td> - </tr> -<?php endforeach; ?> -</table> +<?php if ($specificInfo): ?> + <table class="data-table admin__table-secondary"> + <?php foreach ($specificInfo as $label => $value):?> + <tr> + <th><?php echo $block->escapeHtml($label)?>:</th> + <td> + <?php /* @noEscape */ echo nl2br($block->escapeHtml(implode("\n", $block->getValueAsArray($value, true))));?> + </td> + </tr> + <?php endforeach; ?> + </table> <?php endif;?> <?php echo $block->getChildHtml()?> diff --git a/app/code/Magento/Payment/view/adminhtml/templates/info/instructions.phtml b/app/code/Magento/Payment/view/adminhtml/templates/info/instructions.phtml index 07e59ca0519df515b3c650a6ca73f03b9278764e..5cc47d3a63bd88c96608e07414e8afa3b5ee7456 100644 --- a/app/code/Magento/Payment/view/adminhtml/templates/info/instructions.phtml +++ b/app/code/Magento/Payment/view/adminhtml/templates/info/instructions.phtml @@ -5,20 +5,18 @@ */ // @codingStandardsIgnoreFile - -?> -<?php /** + * @var \Magento\Payment\Block\Info $block * @see \Magento\Payment\Block\Info */ ?> -<p><?php echo $block->escapeHtml($block->getMethod()->getTitle()) ?></p> +<p><?php echo $block->escapeHtml($block->getMethod()->getTitle()); ?></p> <?php if ($block->getInstructions()): ?> -<table> - <tbody> - <tr> - <td><?php /* @escapeNotVerified */ echo nl2br($block->getInstructions()) ?></td> - </tr> - </tbody> -</table> + <table> + <tbody> + <tr> + <td><?php /* @noEscape */ echo nl2br($block->escapeHtml($block->getInstructions())); ?></td> + </tr> + </tbody> + </table> <?php endif; ?> diff --git a/app/code/Magento/Payment/view/adminhtml/templates/info/pdf/default.phtml b/app/code/Magento/Payment/view/adminhtml/templates/info/pdf/default.phtml index c4b4f10fba2a7c39b05e519a3bd5abbdb74bdfd0..bb84448162c2d73572d93f668b72d9c380ae97eb 100644 --- a/app/code/Magento/Payment/view/adminhtml/templates/info/pdf/default.phtml +++ b/app/code/Magento/Payment/view/adminhtml/templates/info/pdf/default.phtml @@ -5,19 +5,19 @@ */ // @codingStandardsIgnoreFile - -?> -<?php /** * @see \Magento\Payment\Block\Info + * @var \Magento\Payment\Block\Info $block */ ?> -<?php echo $block->escapeHtml($block->getMethod()->getTitle()) ?>{{pdf_row_separator}} +<?php echo $block->escapeHtml($block->getMethod()->getTitle()); ?>{{pdf_row_separator}} -<?php if ($_specificInfo = $block->getSpecificInformation()):?> -<?php foreach ($_specificInfo as $_label => $_value):?> -<?php /* @escapeNotVerified */ echo $_label ?>: <?php /* @escapeNotVerified */ echo implode(' ', $block->getValueAsArray($_value))?>{{pdf_row_separator}} -<?php endforeach; ?> +<?php if ($specificInfo = $block->getSpecificInformation()):?> + <?php foreach ($specificInfo as $label => $value):?> + <?php echo $block->escapeHtml($label) ?>: + <?php echo $block->escapeHtml(implode(' ', $block->getValueAsArray($value)));?> + {{pdf_row_separator}} + <?php endforeach; ?> <?php endif;?> -<?php /* @escapeNotVerified */ echo implode('{{pdf_row_separator}}', $block->getChildPdfAsArray()) ?> +<?php echo $block->escapeHtml(implode('{{pdf_row_separator}}', $block->getChildPdfAsArray())); ?> diff --git a/app/code/Magento/Payment/view/adminhtml/templates/info/substitution.phtml b/app/code/Magento/Payment/view/adminhtml/templates/info/substitution.phtml index b2025ee67cf2d13626ddaa92f057ccd0479a9eb1..87cf0b315843d8d52cc6fcd27348ed7794a9ed82 100644 --- a/app/code/Magento/Payment/view/adminhtml/templates/info/substitution.phtml +++ b/app/code/Magento/Payment/view/adminhtml/templates/info/substitution.phtml @@ -5,6 +5,11 @@ */ // @codingStandardsIgnoreFile - +/** + * @var \Magento\Payment\Block\Info $block + */ ?> -<div><?php echo __('%1 is not available. You still can process offline actions.', $block->escapeHtml($block->getMethod()->getTitle())) ?></div> +<div> + <?php $block->escapeHtml($block->getMethod()->getTitle());?> + <?php echo $block->escapeHtml(__(' is not available. You still can process offline actions.')); ?> +</div> diff --git a/app/code/Magento/Payment/view/adminhtml/templates/transparent/form.phtml b/app/code/Magento/Payment/view/adminhtml/templates/transparent/form.phtml index 90394f8fdaba7a5607ee08bb91fe9c5fa3fcbd67..1bb248e6fd5662bced43e2f7ee9d4c5a942a1f69 100644 --- a/app/code/Magento/Payment/view/adminhtml/templates/transparent/form.phtml +++ b/app/code/Magento/Payment/view/adminhtml/templates/transparent/form.phtml @@ -3,114 +3,126 @@ * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ -?> -<?php + // @codingStandardsIgnoreFile /** @var \Magento\Payment\Block\Transparent\Form $block */ $code = $block->getMethodCode(); +$ccType = $block->getInfoData('cc_type'); +$ccExpYear = $block->getInfoData('cc_exp_year'); +$ccExpMonth = $block->getInfoData('cc_exp_month'); ?> <!-- IFRAME for request to Payment Gateway --> -<iframe id="<?php /* @escapeNotVerified */ echo $code ?>-transparent-iframe" - data-container="<?php /* @escapeNotVerified */ echo $code ?>-transparent-iframe" +<iframe id="<?php /* @noEscape */ echo $code; ?>-transparent-iframe" + data-container="<?php /* @noEscape */ echo $code; ?>-transparent-iframe" allowtransparency="true" frameborder="0" name="iframeTransparent" style="display: none; width: 100%; background-color: transparent;" - src="<?php /* @escapeNotVerified */ echo $block->getViewFileUrl('blank.html') ?>"></iframe> + src="<?php echo $block->escapeUrl($block->getViewFileUrl('blank.html')); ?>"></iframe> <fieldset - id="payment_form_<?php /* @escapeNotVerified */ echo $code ?>" + id="payment_form_<?php /* @noEscape */ echo $code; ?>" class="admin__fieldset" data-mage-init='{ "transparent":{ - "controller":"<?php /* @escapeNotVerified */ echo $block->getRequest()->getControllerName() ?>", - "gateway":"<?php /* @escapeNotVerified */ echo $block->getMethodCode() ?>", - "dateDelim":"<?php /* @escapeNotVerified */ echo $block->getDateDelim() ?>", - "cardFieldsMap":<?php /* @escapeNotVerified */ echo $block->getCardFieldsMap() ?>, - "orderSaveUrl":"<?php /* @escapeNotVerified */ echo $block->getOrderUrl() ?>", - "cgiUrl":"<?php /* @escapeNotVerified */ echo $block->getCgiUrl() ?>", - "expireYearLength":"<?php /* @escapeNotVerified */ echo $block->getMethodConfigData('cc_year_length') ?>", - "nativeAction":"<?php /* @escapeNotVerified */ echo $block->getUrl('*/*/save', ['_secure' => $block->getRequest()->isSecure()]) ?>" + "controller":"<?php echo $block->escapeHtml($block->getRequest()->getControllerName()); ?>", + "gateway":"<?php /* @noEscape */ echo $code; ?>", + "dateDelim":"<?php echo $block->escapeHtml($block->getDateDelim()); ?>", + "cardFieldsMap":<?php /* @noEscape */ echo $block->getCardFieldsMap(); ?>, + "orderSaveUrl":"<?php echo $block->escapeUrl($block->getOrderUrl()); ?>", + "cgiUrl":"<?php echo $block->escapeUrl($block->getCgiUrl()); ?>", + "expireYearLength":"<?php echo $block->escapeHtml($block->getMethodConfigData('cc_year_length')); ?>", + "nativeAction":"<?php echo $block->escapeUrl($block->getUrl('*/*/save', ['_secure' => $block->getRequest()->isSecure()])); ?>" }, "validation":[]}' style="display: none;"> <div class="admin__field _required"> - <label for="<?php /* @escapeNotVerified */ echo $code ?>_cc_type" class="admin__field-label"> - <span><?php /* @escapeNotVerified */ echo __('Credit Card Type') ?></span> + <label for="<?php /* @noEscape */ echo $code; ?>_cc_type" class="admin__field-label"> + <span><?php echo $block->escapeHtml(__('Credit Card Type')); ?></span> </label> <div class="admin__field-control"> - <select id="<?php /* @escapeNotVerified */ echo $code ?>_cc_type" - data-container="<?php /* @escapeNotVerified */ echo $code ?>-cc-type" + <select id="<?php /* @noEscape */ echo $code; ?>_cc_type" + data-container="<?php /* @noEscape */ echo $code; ?>-cc-type" name="payment[cc_type]" - data-validate='{required:true, "validate-cc-type-select":"#<?php /* @escapeNotVerified */ echo $code ?>_cc_number"}' + data-validate='{required:true, "validate-cc-type-select":"#<?php /* @noEscape */ echo $code; ?>_cc_number"}' class="admin__control-select"> - <option value=""><?php /* @escapeNotVerified */ echo __('Please Select') ?></option> - <?php $_ccType = $block->getInfoData('cc_type') ?> - <?php foreach ($block->getCcAvailableTypes() as $_typeCode => $_typeName): ?> + <option value=""><?php echo $block->escapeHtml(__('Please Select')); ?></option> + <?php foreach ($block->getCcAvailableTypes() as $typeCode => $typeName): ?> <option - value="<?php /* @escapeNotVerified */ echo $_typeCode ?>"<?php if ($_typeCode == $_ccType): ?> selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $_typeName ?></option> + value="<?php echo $block->escapeHtml($typeCode); ?>"<?php if ($typeCode == $ccType): ?> selected="selected"<?php endif ?>> + <?php echo $block->escapeHtml($typeName); ?> + </option> <?php endforeach ?> </select> </div> </div> <div class="admin__field _required field-number"> - <label for="<?php /* @escapeNotVerified */ echo $code ?>_cc_number" class="admin__field-label"> - <span><?php /* @escapeNotVerified */ echo __('Credit Card Number') ?></span> + <label for="<?php /* @noEscape */ echo $code; ?>_cc_number" class="admin__field-label"> + <span><?php echo $block->escapeHtml(__('Credit Card Number')); ?></span> </label> <div class="admin__field-control"> - <input type="text" id="<?php /* @escapeNotVerified */ echo $code ?>_cc_number" data-container="<?php /* @escapeNotVerified */ echo $code ?>-cc-number" - name="payment[cc_number]" title="<?php /* @escapeNotVerified */ echo __('Credit Card Number') ?>" + <input type="text" id="<?php /* @noEscape */ echo $code; ?>_cc_number" + data-container="<?php /* @noEscape */ echo $code; ?>-cc-number" + name="payment[cc_number]" title="<?php echo $block->escapeHtml(__('Credit Card Number')); ?>" class="admin__control-text" value="" - data-validate='{"required-number":true, "validate-cc-number":"#<?php /* @escapeNotVerified */ echo $code ?>_cc_type", "validate-cc-type":"#<?php /* @escapeNotVerified */ echo $code ?>_cc_type"}' + data-validate='{ + "required-number":true, + "validate-cc-number":"#<?php /* @noEscape */ echo $code; ?>_cc_type", + "validate-cc-type":"#<?php /* @noEscape */ echo $code; ?>_cc_type" + }' autocomplete="off"/> </div> </div> - <div class="admin__field _required field-date" id="<?php /* @escapeNotVerified */ echo $code ?>_cc_type_exp_div"> - <label for="<?php /* @escapeNotVerified */ echo $code ?>_expiration" class="admin__field-label"> - <span><?php /* @escapeNotVerified */ echo __('Expiration Date') ?></span> + <div class="admin__field _required field-date" id="<?php /* @noEscape */ echo $code; ?>_cc_type_exp_div"> + <label for="<?php /* @noEscape */ echo $code; ?>_expiration" class="admin__field-label"> + <span><?php echo $block->escapeHtml(__('Expiration Date')); ?></span> </label> <div class="admin__field-control"> - <select id="<?php /* @escapeNotVerified */ echo $code ?>_expiration" name="payment[cc_exp_month]" - data-container="<?php /* @escapeNotVerified */ echo $code ?>-cc-month" + <select id="<?php /* @noEscape */ echo $code; ?>_expiration" name="payment[cc_exp_month]" + data-container="<?php /* @noEscape */ echo $code; ?>-cc-month" class="admin__control-select admin__control-select-month" - data-validate='{required:true, "validate-cc-exp":"#<?php /* @escapeNotVerified */ echo $code ?>_expiration_yr"}'> - <?php $_ccExpMonth = $block->getInfoData('cc_exp_month') ?> + data-validate='{required:true, "validate-cc-exp":"#<?php /* @noEscape */ echo $code; ?>_expiration_yr"}'> <?php foreach ($block->getCcMonths() as $k => $v): ?> <option - value="<?php echo $k ? $k : '' ?>"<?php if ($k == $_ccExpMonth): ?> selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $v ?></option> + value="<?php /* @noEscape */ echo $k ? $block->escapeHtml($k) : ''; ?>" + <?php if ($k == $ccExpMonth): ?> selected="selected"<?php endif; ?>> + <?php echo $block->escapeHtml($v); ?> + </option> <?php endforeach ?> </select> - <?php $_ccExpYear = $block->getInfoData('cc_exp_year') ?> - <select id="<?php /* @escapeNotVerified */ echo $code ?>_expiration_yr" name="payment[cc_exp_year]" + <select id="<?php /* @noEscape */ echo $code; ?>_expiration_yr" name="payment[cc_exp_year]" class="admin__control-select admin__control-select-year" - data-container="<?php /* @escapeNotVerified */ echo $code ?>-cc-year" data-validate='{required:true}'> + data-container="<?php /* @noEscape */ echo $code; ?>-cc-year" data-validate='{required:true}'> <?php foreach ($block->getCcYears() as $k => $v): ?> <option - value="<?php echo $k ? $k : '' ?>"<?php if ($k == $_ccExpYear): ?> selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $v ?></option> + value="<?php /* @noEscape */ echo $k ? $k : '' ?>" + <?php if ($k == $ccExpYear): ?> selected="selected"<?php endif ?>> + <?php echo $block->escapeHtml($v); ?> + </option> <?php endforeach ?> </select> </div> </div> <?php if ($block->hasVerification()): ?> - <div class="admin__field _required field-cvv" id="<?php /* @escapeNotVerified */ echo $code ?>_cc_type_cvv_div"> - <label for="<?php /* @escapeNotVerified */ echo $code ?>_cc_cid" class="admin__field-label"> - <span><?php /* @escapeNotVerified */ echo __('Card Verification Number') ?></span> + <div class="admin__field _required field-cvv" id="<?php /* @noEscape */ echo $code; ?>_cc_type_cvv_div"> + <label for="<?php /* @noEscape */ echo $code; ?>_cc_cid" class="admin__field-label"> + <span><?php echo $block->escapeHtml(__('Card Verification Number')); ?></span> </label> <div class="admin__field-control"> - <input type="text" title="<?php /* @escapeNotVerified */ echo __('Card Verification Number') ?>" - data-container="<?php /* @escapeNotVerified */ echo $code ?>-cc-cvv" + <input type="text" title="<?php echo $block->escapeHtml(__('Card Verification Number')); ?>" + data-container="<?php /* @noEscape */ echo $code; ?>-cc-cvv" class="admin__control-text cvv" - id="<?php /* @escapeNotVerified */ echo $code ?>_cc_cid" name="payment[cc_cid]" + id="<?php /* @noEscape */ echo $code; ?>_cc_cid" name="payment[cc_cid]" value="" - data-validate='{"required-number":true, "validate-cc-cvn":"#<?php /* @escapeNotVerified */ echo $code ?>_cc_type"}' + data-validate='{"required-number":true, "validate-cc-cvn":"#<?php /* @noEscape */ echo $code; ?>_cc_type"}' autocomplete="off"/> </div> </div> @@ -123,6 +135,6 @@ $code = $block->getMethodCode(); * Disable card server validation in admin */ require(["Magento_Sales/order/create/form"], function () { - order.addExcludedPaymentMethod('<?php /* @escapeNotVerified */ echo $code ?>'); + order.addExcludedPaymentMethod('<?php /* @noEscape */ echo $code; ?>'); }); </script> diff --git a/app/code/Magento/Payment/view/adminhtml/templates/transparent/iframe.phtml b/app/code/Magento/Payment/view/adminhtml/templates/transparent/iframe.phtml index 51cae8aae306370d8a400cde354362452f30814b..f5dd16a8b549a78f2fe9d7fc4aec18644caa2d1b 100644 --- a/app/code/Magento/Payment/view/adminhtml/templates/transparent/iframe.phtml +++ b/app/code/Magento/Payment/view/adminhtml/templates/transparent/iframe.phtml @@ -5,7 +5,9 @@ */ // @codingStandardsIgnoreFile - +/** + * @var \Magento\Payment\Block\Transparent\Iframe $block + */ $params = $block->getParams(); ?> @@ -13,13 +15,13 @@ $params = $block->getParams(); <head> <script> <?php if (isset($params['redirect'])): ?> - window.location="<?php echo $block->escapeUrl($params['redirect']) ?>"; + window.location="<?php echo $block->escapeUrl($params['redirect']); ?>"; <?php elseif (isset($params['redirect_parent'])): ?> - window.top.location="<?php echo $block->escapeUrl($params['redirect_parent']) ?>"; + window.top.location="<?php echo $block->escapeUrl($params['redirect_parent']); ?>"; <?php elseif (isset($params['error_msg'])): ?> - window.top.alert(<?php /* @escapeNotVerified */ echo $this->helper('Magento\Framework\Json\Helper\Data')->jsonEncode($params['error_msg']) ?>); + window.top.alert(<?php /* @noEscape */ echo $this->helper('Magento\Framework\Json\Helper\Data')->jsonEncode($params['error_msg']); ?>); <?php elseif (isset($params['order_success'])): ?> - window.top.location = "<?php /* @escapeNotVerified */ echo $params['order_success'] ?>"; + window.top.location = "<?php echo $block->escapeUrl($params['order_success']); ?>"; <?php else: ?> var require = window.top.require; require(['jquery'], function($) { diff --git a/app/code/Magento/Payment/view/adminhtml/templates/transparent/info.phtml b/app/code/Magento/Payment/view/adminhtml/templates/transparent/info.phtml index 0219cd8891fdc9aaeb621f4327fd64bb60e0b145..8deddb094d1799a1f1459a6be34e7fdbf5a054f0 100644 --- a/app/code/Magento/Payment/view/adminhtml/templates/transparent/info.phtml +++ b/app/code/Magento/Payment/view/adminhtml/templates/transparent/info.phtml @@ -7,9 +7,10 @@ // @codingStandardsIgnoreFile /** + * @var \Magento\Payment\Block\Transparent\Info $block * @see \Magento\Payment\Block\Transparent\Info */ ?> -<fieldset id="payment_form_<?php /* @escapeNotVerified */ echo $block->getMethodCode() ?>" style="display:none" class="fieldset items redirect"> - <div><?php /* @escapeNotVerified */ echo __('We\'ll ask for your payment details before you place an order.') ?></div> +<fieldset id="payment_form_<?php /* @noEscape */ echo $block->getMethodCode(); ?>" style="display:none" class="fieldset items redirect"> + <div><?php echo $block->escapeHtml(__('We\'ll ask for your payment details before you place an order.')); ?></div> </fieldset> diff --git a/app/code/Magento/Payment/view/adminhtml/web/transparent.js b/app/code/Magento/Payment/view/adminhtml/web/transparent.js index 7edbb30c6318ffd45339c6b55b3b612067f76b62..11593e2a5b5f634a42a8b1779afdcfd5a71f2686 100644 --- a/app/code/Magento/Payment/view/adminhtml/web/transparent.js +++ b/app/code/Magento/Payment/view/adminhtml/web/transparent.js @@ -6,8 +6,9 @@ define([ "jquery", "mage/template", + 'Magento_Ui/js/modal/alert', "jquery/ui" -], function($, mageTemplate){ +], function($, mageTemplate, alert){ "use strict"; $.widget('mage.transparent', { @@ -157,10 +158,14 @@ define([ _processErrors: function (response) { var msg = response.error_messages; if (typeof (msg) === 'object') { - alert(msg.join("\n")); + alert({ + content: msg.join("\n") + }); } if (msg) { - alert(msg); + alert({ + content: msg + }); } } }); diff --git a/app/code/Magento/Payment/view/frontend/templates/form/cc.phtml b/app/code/Magento/Payment/view/frontend/templates/form/cc.phtml index ffc0c51ef5383ba9723bed12f579e857354eefd8..05d8d3c02c82cdfc54c16a9d77a6863422e7ecbd 100644 --- a/app/code/Magento/Payment/view/frontend/templates/form/cc.phtml +++ b/app/code/Magento/Payment/view/frontend/templates/form/cc.phtml @@ -5,51 +5,83 @@ */ // @codingStandardsIgnoreFile - +/** + * @var \Magento\Payment\Block\Transparent\Form $block + */ +$code = $block->getMethodCode(); +$ccType = $block->getInfoData('cc_type'); +$ccExpMonth = $block->getInfoData('cc_exp_month'); +$ccExpYear = $block->getInfoData('cc_exp_year'); ?> -<?php $_code = $block->getMethodCode() ?> -<fieldset class="fieldset payment items ccard <?php /* @escapeNotVerified */ echo $_code ?>" id="payment_form_<?php /* @escapeNotVerified */ echo $_code ?>" style="display: none;"> +<fieldset class="fieldset payment items ccard <?php /* @noEscape */ echo $code; ?>" + id="payment_form_<?php /* @noEscape */ echo $code; ?>" style="display: none;"> <div class="field type required"> - <label for="<?php /* @escapeNotVerified */ echo $_code ?>_cc_type" class="label"><span><?php /* @escapeNotVerified */ echo __('Credit Card Type') ?></span></label> + <label for="<?php /* @noEscape */ echo $code; ?>_cc_type" class="label"> + <span><?php echo $block->escapeHtml(__('Credit Card Type')); ?></span> + </label> <div class="control"> - <select id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_type" - data-mage-init='{"creditCardType":{"creditCardTypeContainer":"#<?php /* @escapeNotVerified */ echo $_code ?>_cc_type_ss_div"}}' - name="payment[cc_type]" data-validate='{required:true, "validate-cc-type-select":"#<?php /* @escapeNotVerified */ echo $_code ?>_cc_number"}' class="select"> - <option value=""><?php /* @escapeNotVerified */ echo __('--Please Select--')?></option> - <?php $_ccType = $block->getInfoData('cc_type') ?> - <?php foreach ($block->getCcAvailableTypes() as $_typeCode => $_typeName): ?> - <option value="<?php /* @escapeNotVerified */ echo $_typeCode ?>"<?php if ($_typeCode == $_ccType): ?> selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $_typeName ?></option> - <?php endforeach ?> + <select id="<?php /* @noEscape */ echo $code; ?>_cc_type" + data-mage-init='{ + "creditCardType":{"creditCardTypeContainer":"#<?php /* @noEscape */ echo $code; ?>_cc_type_ss_div"} + }' + name="payment[cc_type]" data-validate='{ + required:true, + "validate-cc-type-select":"#<?php /* @noEscape */ echo $code; ?>_cc_number" + }' + class="select"> + <option value=""><?php echo $block->escapeHtml(__('--Please Select--')); ?></option> + <?php foreach ($block->getCcAvailableTypes() as $typeCode => $typeName): ?> + <option value="<?php echo $block->escapeHtml($typeCode); ?>" + <?php if ($typeCode == $ccType): ?> selected="selected"<?php endif; ?>> + <?php echo $block->escapeHtml($typeName); ?> + </option> + <?php endforeach; ?> </select> </div> </div> <div class="field number required"> - <label for="<?php /* @escapeNotVerified */ echo $_code ?>_cc_number" class="label"><span><?php /* @escapeNotVerified */ echo __('Credit Card Number') ?></span></label> + <label for="<?php /* @noEscape */ echo $code; ?>_cc_number" class="label"> + <span><?php echo $block->escapeHtml(__('Credit Card Number')); ?></span> + </label> <div class="control"> - <input type="number" id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_number" name="payment[cc_number]" title="<?php /* @escapeNotVerified */ echo __('Credit Card Number') ?>" class="input-text" value="" data-validate='{"required-number":true, "validate-cc-number":"#<?php /* @escapeNotVerified */ echo $_code ?>_cc_type", "validate-cc-type":"#<?php /* @escapeNotVerified */ echo $_code ?>_cc_type"}'/> + <input type="number" id="<?php /* @noEscape */ echo $code; ?>_cc_number" name="payment[cc_number]" + title="<?php echo $block->escapeHtml(__('Credit Card Number')); ?>" class="input-text" value="" + data-validate='{ + "required-number":true, + "validate-cc-number":"#<?php /* @noEscape */ echo $code; ?>_cc_type", + "validate-cc-type":"#<?php /* @noEscape */ echo $code; ?>_cc_type" + }'/> </div> </div> - <div class="field date required" id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_type_exp_div"> - <label for="<?php /* @escapeNotVerified */ echo $_code ?>_expiration" class="label"><span><?php /* @escapeNotVerified */ echo __('Expiration Date') ?></span></label> + <div class="field date required" id="<?php /* @noEscape */ echo $code; ?>_cc_type_exp_div"> + <label for="<?php /* @noEscape */ echo $code; ?>_expiration" class="label"> + <span><?php echo $block->escapeHtml(__('Expiration Date')); ?></span> + </label> <div class="control"> <div class="fields group group-2"> <div class="field no-label month"> <div class="control"> - <select id="<?php /* @escapeNotVerified */ echo $_code ?>_expiration" name="payment[cc_exp_month]" class="select month" data-validate='{required:true, "validate-cc-exp":"#<?php /* @escapeNotVerified */ echo $_code ?>_expiration_yr"}'> - <?php $_ccExpMonth = $block->getInfoData('cc_exp_month') ?> + <select id="<?php /* @noEscape */ echo $code; ?>_expiration" name="payment[cc_exp_month]" class="select month" + data-validate='{required:true, "validate-cc-exp":"#<?php /* @noEscape */ echo $code; ?>_expiration_yr"}'> <?php foreach ($block->getCcMonths() as $k => $v): ?> - <option value="<?php echo $k ? $k : '' ?>"<?php if ($k == $_ccExpMonth): ?> selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $v ?></option> - <?php endforeach ?> + <option value="<?php /* @noEscape */ echo $k ? $block->escapeHtml($k) : ''; ?>" + <?php if ($k == $ccExpMonth): ?> selected="selected"<?php endif; ?>> + <?php echo $block->escapeHtml($v); ?> + </option> + <?php endforeach; ?> </select> </div> </div> <div class="field no-label year"> <div class="control"> - <?php $_ccExpYear = $block->getInfoData('cc_exp_year') ?> - <select id="<?php /* @escapeNotVerified */ echo $_code ?>_expiration_yr" name="payment[cc_exp_year]" class="select year" data-validate='{required:true}'> + <select id="<?php /* @noEscape */ echo $code; ?>_expiration_yr" name="payment[cc_exp_year]" + class="select year" data-validate='{required:true}'> <?php foreach ($block->getCcYears() as $k => $v): ?> - <option value="<?php echo $k ? $k : '' ?>"<?php if ($k == $_ccExpYear): ?> selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $v ?></option> - <?php endforeach ?> + <option value="<?php /* @noEscape */ echo $k ? $block->escapeHtml($k) : ''; ?> + "<?php if ($k == $ccExpYear): ?> selected="selected"<?php endif; ?>> + <?php echo $block->escapeHtml($v); ?> + </option> + <?php endforeach; ?> </select> </div> </div> @@ -57,48 +89,74 @@ </div> </div> <?php if ($block->hasVerification()): ?> - <div class="field cvv required" id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_type_cvv_div"> - <label for="<?php /* @escapeNotVerified */ echo $_code ?>_cc_cid" class="label"><span><?php /* @escapeNotVerified */ echo __('Card Verification Number') ?></span></label> + <div class="field cvv required" id="<?php /* @noEscape */ echo $code; ?>_cc_type_cvv_div"> + <label for="<?php /* @noEscape */ echo $code; ?>_cc_cid" class="label"> + <span><?php echo $block->escapeHtml(__('Card Verification Number')); ?></span> + </label> <div class="control"> - <input type="number" title="<?php /* @escapeNotVerified */ echo __('Card Verification Number') ?>" class="input-text cvv" id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_cid" name="payment[cc_cid]" value="" data-validate='{"required-number":true, "validate-cc-cvn":"#<?php /* @escapeNotVerified */ echo $_code ?>_cc_type"}' /> - <?php $_content = '<img src=\"' . $block->getViewFileUrl('Magento_Checkout::cvv.png') . '\" alt=\"' . __('Card Verification Number Visual Reference') . '\" title=\"' . __('Card Verification Number Visual Reference') . '\" />'; ?> + <input type="number" title="<?php echo $block->escapeHtml(__('Card Verification Number')); ?>" + class="input-text cvv" id="<?php /* @noEscape */ echo $code; ?>_cc_cid" name="payment[cc_cid]" value="" + data-validate='{"required-number":true, "validate-cc-cvn":"#<?php /* @noEscape */ echo $code; ?>_cc_type"}' /> + <?php $content = '<img src=\"' . $block->getViewFileUrl('Magento_Checkout::cvv.png') . '\" alt=\"' . + $block->escapeHtml(__('Card Verification Number Visual Reference')) . + '\" title=\"' . $block->escapeHtml(__('Card Verification Number Visual Reference')) . '\" />'; ?> <div class="note"> - <a href="#" class="action cvv" title="<?php /* @escapeNotVerified */ echo __('What is this?') ?>" data-mage-init='{"tooltip": {"content": "<?php /* @escapeNotVerified */ echo $_content ?>"}}'><span><?php /* @escapeNotVerified */ echo __('What is this?') ?></span></a> + <a href="#" class="action cvv" title="<?php echo $block->escapeHtml(__('What is this?')); ?>" + data-mage-init='{"tooltip": {"content": "<?php /* @noEscape */ echo $content; ?>"}}'> + <span><?php echo $block->escapeHtml(__('What is this?')); ?></span> + </a> </div> </div> </div> <?php endif; ?> <?php if ($block->hasSsCardType()): ?> - <div class="field switch solo required" id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_type_ss_div"> + <div class="field switch solo required" id="<?php /* @noEscape */ echo $code; ?>_cc_type_ss_div"> <div class="nested"> <div class="field switch solo required"> - <label for="<?php /* @escapeNotVerified */ echo $_code ?>_cc_issue" class="label"><span><?php /* @escapeNotVerified */ echo __('Switch/Solo/Maestro Only') ?></span></label> + <label for="<?php /* @noEscape */ echo $code; ?>_cc_issue" class="label"> + <span><?php echo $block->escapeHtml(__('Switch/Solo/Maestro Only')); ?></span> + </label> </div> <div class="field number required"> - <label for="<?php /* @escapeNotVerified */ echo $_code ?>_cc_issue" class="label"><span><?php /* @escapeNotVerified */ echo __('Issue Number') ?></span></label> + <label for="<?php /* @noEscape */ echo $code; ?>_cc_issue" class="label"> + <span><?php echo $block->escapeHtml(__('Issue Number')); ?></span> + </label> <div class="control"> - <input type="text" title="<?php /* @escapeNotVerified */ echo __('Issue Number') ?>" class="input-text cvv" id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_issue" name="payment[cc_ss_issue]" value="" data-validate='{"validate-cc-ukss":true}'/> + <input type="text" title="<?php echo $block->escapeHtml(__('Issue Number')); ?>" class="input-text cvv" + id="<?php /* @noEscape */ echo $code; ?>_cc_issue" name="payment[cc_ss_issue]" value="" + data-validate='{"validate-cc-ukss":true}'/> </div> </div> <div class="field date required"> - <label for="<?php /* @escapeNotVerified */ echo $_code ?>_start_month" class="label"><span><?php /* @escapeNotVerified */ echo __('Start Date') ?></span></label> + <label for="<?php /* @noEscape */ echo $code; ?>_start_month" class="label"> + <span><?php echo $block->escapeHtml(__('Start Date')); ?></span> + </label> <div class="control"> <div class="fields group group-2"> <div class="field no-label"> <div class="control"> - <select id="<?php /* @escapeNotVerified */ echo $_code ?>_start_month" name="payment[cc_ss_start_month]" class="select month" data-validate='{"validate-cc-ukss":true}'> + <select id="<?php /* @noEscape */ echo $code; ?>_start_month" name="payment[cc_ss_start_month]" + class="select month" data-validate='{"validate-cc-ukss":true}'> <?php foreach ($block->getCcMonths() as $k => $v): ?> - <option value="<?php echo $k ? $k : '' ?>"<?php if ($k == $block->getInfoData('cc_ss_start_month')): ?> selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $v ?></option> + <option value="<?php /* @noEscape */ echo $k ? $block->escapeHtml($k) : ''; ?>" + <?php if ($k == $block->getInfoData('cc_ss_start_month')): ?> selected="selected"<?php endif; ?>> + <?php echo $block->escapeHtml($v); ?> + </option> <?php endforeach ?> </select> </div> </div> <div class="field no-label"> <div class="control"> - <select id="<?php /* @escapeNotVerified */ echo $_code ?>_start_year" name="payment[cc_ss_start_year]" class="select year" data-validate='{"validate-cc-ukss":true}'> + <select id="<?php /* @noEscape */ echo $code; ?>_start_year" + name="payment[cc_ss_start_year]" class="select year" + data-validate='{"validate-cc-ukss":true}'> <?php foreach ($block->getSsStartYears() as $k => $v): ?> - <option value="<?php echo $k ? $k : '' ?>"<?php if ($k == $block->getInfoData('cc_ss_start_year')): ?> selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $v ?></option> + <option value="<?php /* @noEscape */ echo $k ? $block->escapeHtml($k) : ''; ?>" + <?php if ($k == $block->getInfoData('cc_ss_start_year')): ?> selected="selected"<?php endif; ?>> + <?php echo $block->escapeHtml($v); ?> + </option> <?php endforeach ?> </select> </div> diff --git a/app/code/Magento/Payment/view/frontend/templates/info/default.phtml b/app/code/Magento/Payment/view/frontend/templates/info/default.phtml index 49364c5bc10bc49714abd78c355953d737cb34de..861163e3f0dec3d12736448077407a398b46059f 100644 --- a/app/code/Magento/Payment/view/frontend/templates/info/default.phtml +++ b/app/code/Magento/Payment/view/frontend/templates/info/default.phtml @@ -6,22 +6,25 @@ // @codingStandardsIgnoreFile -?> -<?php /** + * @var \Magento\Payment\Block\Info $block * @see \Magento\Payment\Block\Info */ +$specificInfo = $block->getSpecificInformation(); +$title = $block->escapeHtml($block->getMethod()->getTitle()); ?> <dl class="payment-method"> - <dt class="title"><?php echo $block->escapeHtml($block->getMethod()->getTitle()) ?></dt> -<?php if ($_specificInfo = $block->getSpecificInformation()):?> + <dt class="title"><?php /* @noEscape */ echo $title; ?></dt> +<?php if ($specificInfo):?> <dd class="content"> <table class="data table"> - <caption class="table-caption"><?php echo $block->escapeHtml($block->getMethod()->getTitle()) ?></caption> - <?php foreach ($_specificInfo as $_label => $_value):?> + <caption class="table-caption"><?php /* @noEscape */ echo $title; ?></caption> + <?php foreach ($specificInfo as $label => $value):?> <tr> - <th scope="row"><?php echo $block->escapeHtml($_label)?></th> - <td><?php /* @escapeNotVerified */ echo nl2br(implode("\n", $block->getValueAsArray($_value, true)))?></td> + <th scope="row"><?php echo $block->escapeHtml($label)?></th> + <td> + <?php /* @noEscape */ echo nl2br($block->escapeHtml(implode("\n", $block->getValueAsArray($value, true))));?> + </td> </tr> <?php endforeach; ?> </table> diff --git a/app/code/Magento/Payment/view/frontend/templates/info/instructions.phtml b/app/code/Magento/Payment/view/frontend/templates/info/instructions.phtml index 477f050bc7ebd5efba1ba646a363cfe4ab0fa6fc..9edbfef9b9b12c1e1dfa02fa5dd9abb198d62827 100644 --- a/app/code/Magento/Payment/view/frontend/templates/info/instructions.phtml +++ b/app/code/Magento/Payment/view/frontend/templates/info/instructions.phtml @@ -5,16 +5,14 @@ */ // @codingStandardsIgnoreFile - -?> -<?php /** + * @var \Magento\Payment\Block\Info $block * @see \Magento\Payment\Block\Info */ ?> <dl class="payment-method"> <dt class="title"><?php echo $block->escapeHtml($block->getMethod()->getTitle()) ?></dt> <?php if ($block->getInstructions()): ?> - <dd class="content"><?php /* @escapeNotVerified */ echo nl2br($block->getInstructions()) ?></dd> + <dd class="content"><?php /* @noEscape */ echo nl2br($block->escapeHtml($block->getInstructions())); ?></dd> <?php endif; ?> </dl> diff --git a/app/code/Magento/Payment/view/frontend/templates/transparent/form.phtml b/app/code/Magento/Payment/view/frontend/templates/transparent/form.phtml index 9580a3a2ff1108a873dca309e33abacee8a52eff..64ea503996cd280d8b29dc154b4dc20e9e47f69d 100644 --- a/app/code/Magento/Payment/view/frontend/templates/transparent/form.phtml +++ b/app/code/Magento/Payment/view/frontend/templates/transparent/form.phtml @@ -8,60 +8,102 @@ /** @var \Magento\Payment\Block\Transparent\Form $block */ $code = $block->getMethodCode(); +$ccExpMonth = $block->getInfoData('cc_exp_month'); +$ccExpYear = $block->getInfoData('cc_exp_year'); +$ccType = $block->getInfoData('cc_type'); +$content = '<img src=\"' . $block->getViewFileUrl('Magento_Checkout::cvv.png') . '\" alt=\"' . + $block->escapeHtml(__('Card Verification Number Visual Reference')) . '\" title=\"' . + $block->escapeHtml(__('Card Verification Number Visual Reference')) . '\" />'; ?> <!-- IFRAME for request to Payment Gateway --> -<iframe width="0" height="0" id="<?php /* @escapeNotVerified */ echo $code ?>-transparent-iframe" data-container="<?php /* @escapeNotVerified */ echo $code ?>-transparent-iframe" allowtransparency="true" frameborder="0" name="iframeTransparent" style="display:none;width:100%;background-color:transparent" src="<?php /* @escapeNotVerified */ echo $block->getViewFileUrl('blank.html') ?>"></iframe> +<iframe width="0" height="0" id="<?php /* @noescape */ echo $code; ?>-transparent-iframe" + data-container="<?php /* @noEscape */ echo $code; ?>-transparent-iframe" allowtransparency="true" + frameborder="0" name="iframeTransparent" style="display:none;width:100%;background-color:transparent" + src="<?php /* @noEscape */ echo $block->getViewFileUrl('blank.html') ?>"></iframe> <form class="form" id="co-transparent-form" action="#" method="post" data-mage-init='{ "transparent":{ - "controller":"<?php /* @escapeNotVerified */ echo $block->getRequest()->getControllerName() ?>", - "gateway":"<?php /* @escapeNotVerified */ echo $code ?>", - "orderSaveUrl":"<?php /* @escapeNotVerified */ echo $block->getOrderUrl() ?>", - "cgiUrl":"<?php /* @escapeNotVerified */ echo $block->getCgiUrl() ?>", - "dateDelim":"<?php /* @escapeNotVerified */ echo $block->getDateDelim() ?>", - "cardFieldsMap":<?php /* @escapeNotVerified */ echo $block->getCardFieldsMap() ?>, - "nativeAction":"<?php /* @escapeNotVerified */ echo $block->getUrl('checkout/onepage/saveOrder', ['_secure' => $block->getRequest()->isSecure()]) ?>" + "controller":"<?php echo $block->escapeHtml($block->getRequest()->getControllerName()); ?>", + "gateway":"<?php /* @noEscape */ echo $code; ?>", + "orderSaveUrl":"<?php echo $block->escapeUrl($block->getOrderUrl()); ?>", + "cgiUrl":"<?php echo $block->escapeUrl($block->getCgiUrl()); ?>", + "dateDelim":"<?php echo $block->escapeHtml($block->getDateDelim()); ?>", + "cardFieldsMap":<?php /* @noEscape */ echo $block->getCardFieldsMap(); ?>, + "nativeAction":"<?php echo $block->escapeUrl($block->getUrl('checkout/onepage/saveOrder', ['_secure' => $block->getRequest()->isSecure()])); ?>" }, "validation":[]}'> - <fieldset class="fieldset ccard <?php /* @escapeNotVerified */ echo $code ?>" id="payment_form_<?php /* @escapeNotVerified */ echo $code ?>"> - <legend class="legend"><span><?php /* @escapeNotVerified */ echo __('Credit Card Information') ?></span></legend><br /> + <fieldset class="fieldset ccard <?php /* @noEscape */ echo $code; ?>" id="payment_form_<?php /* @noEscape */ echo $code; ?>"> + <legend class="legend"> + <span><?php echo $block->escapeHtml(__('Credit Card Information')); ?></span>\ + </legend><br /> <div class="field required type"> - <label for="<?php /* @escapeNotVerified */ echo $code ?>_cc_type" class="label"><span><?php /* @escapeNotVerified */ echo __('Credit Card Type') ?></span></label> + <label for="<?php /* @noEscape */ echo $code;?>_cc_type" class="label"> + <span><?php echo $block->escapeHtml(__('Credit Card Type')); ?></span> + </label> <div class="control"> - <select id="<?php /* @escapeNotVerified */ echo $code ?>_cc_type" data-container="<?php /* @escapeNotVerified */ echo $code ?>-cc-type" name="payment[cc_type]" data-validate='{required:true, "validate-cc-type-select":"#<?php /* @escapeNotVerified */ echo $code ?>_cc_number"}'> - <option value=""><?php /* @escapeNotVerified */ echo __('--Please Select--')?></option> - <?php $_ccType = $block->getInfoData('cc_type') ?> - <?php foreach ($block->getCcAvailableTypes() as $_typeCode => $_typeName): ?> - <option value="<?php /* @escapeNotVerified */ echo $_typeCode ?>"<?php if ($_typeCode == $_ccType): ?> selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $_typeName ?></option> + <select id="<?php /* @noEscape */ echo $code; ?>_cc_type" data-container="<?php /* @noEscape */ echo $code; ?>-cc-type" + name="payment[cc_type]" + data-validate='{ + required:true, + "validate-cc-type-select":"#<?php /* @noEscape */ echo $code; ?>_cc_number" + }'> + <option value=""><?php echo $block->escapeHtml(__('--Please Select--'));?></option> + <?php foreach ($block->getCcAvailableTypes() as $typeCode => $typeName): ?> + <option value="<?php echo $block->escapeHtml($typeCode); ?>" + <?php if ($typeCode == $ccType): ?> selected="selected"<?php endif; ?>> + <?php echo $block->escapeHtml($typeName); ?></option> <?php endforeach ?> </select> </div> </div> <div class="field required number"> - <label for="<?php /* @escapeNotVerified */ echo $code ?>_cc_number" class="label"><span><?php /* @escapeNotVerified */ echo __('Credit Card Number') ?></span></label> + <label for="<?php /* @noEscape */ echo $code; ?>_cc_number" class="label"> + <span><?php echo $block->escapeHtml(__('Credit Card Number')); ?></span> + </label> <div class="control"> - <input type="number" id="<?php /* @escapeNotVerified */ echo $code ?>_cc_number" data-container="<?php /* @escapeNotVerified */ echo $code ?>-cc-number" name="payment[cc_number]" title="<?php /* @escapeNotVerified */ echo __('Credit Card Number') ?>" class="input-text" value="" data-validate='{"required-number":true, "validate-cc-number":"#<?php /* @escapeNotVerified */ echo $code ?>_cc_type", "validate-cc-type":"#<?php /* @escapeNotVerified */ echo $code ?>_cc_type"}' autocomplete="off"/> + <input type="number" id="<?php /* @noEscape */ echo $code; ?>_cc_number" + data-container="<?php /* @noEscape */ echo $code; ?>-cc-number" name="payment[cc_number]" + title="<?php echo $block->escapeHtml(__('Credit Card Number')); ?>" class="input-text" value="" + data-validate='{ + "required-number":true, + "validate-cc-number":"#<?php /* @noEscape */ echo $code; ?>_cc_type", + "validate-cc-type":"#<?php /* @noEscape */ echo $code; ?>_cc_type" + }' + autocomplete="off"/> </div> </div> - <div class="field required date" id="<?php /* @escapeNotVerified */ echo $code ?>_cc_type_exp_div"> - <label for="<?php /* @escapeNotVerified */ echo $code ?>_expiration" class="label"><span><?php /* @escapeNotVerified */ echo __('Expiration Date') ?></span></label> + <div class="field required date" id="<?php /* @noEscape */ echo $code; ?>_cc_type_exp_div"> + <label for="<?php /* @noEscape */ echo $code; ?>_expiration" class="label"> + <span><?php echo $block->escapeHtml(__('Expiration Date')); ?></span> + </label> <div class="control"> <div class="fields group group-2"> <div class="field no-label month"> <div class="control"> - <select id="<?php /* @escapeNotVerified */ echo $code ?>_expiration" name="payment[cc_exp_month]" data-container="<?php /* @escapeNotVerified */ echo $code ?>-cc-month" class="month" data-validate='{required:true, "validate-cc-exp":"#<?php /* @escapeNotVerified */ echo $code ?>_expiration_yr"}'> - <?php $ccExpMonth = $block->getInfoData('cc_exp_month') ?> + <select id="<?php /* @noEscape */ echo $code; ?>_expiration" name="payment[cc_exp_month]" + data-container="<?php /* @noEscape */ echo $code; ?>-cc-month" class="month" + data-validate='{ + required:true, + "validate-cc-exp":"#<?php /* @noEscape */ echo $code; ?>_expiration_yr" + }'> <?php foreach ($block->getCcMonths() as $k => $v): ?> - <option value="<?php echo $k ? $k : '' ?>"<?php if ($k == $ccExpMonth): ?> selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $v ?></option> + <option value="<?php /* @noEscape */ echo $k ? $block->escapeHtml($k) : '' ?>" + <?php if ($k == $ccExpMonth): ?> selected="selected"<?php endif; ?>> + <?php echo $block->escapeHtml($v); ?> + </option> <?php endforeach ?> </select> </div> </div> <div class="field no-label year"> <div class="control"> - <select id="<?php /* @escapeNotVerified */ echo $code ?>_expiration_yr" name="payment[cc_exp_year]" class="year" data-container="<?php /* @escapeNotVerified */ echo $code ?>-cc-year" data-validate='{required:true}'> - <?php $ccExpYear = $block->getInfoData('cc_exp_year') ?> + <select id="<?php /* @noEscape */ echo $code; ?>_expiration_yr" name="payment[cc_exp_year]" + class="year" data-container="<?php /* @noEscape */ echo $code; ?>-cc-year" + data-validate='{required:true}'> <?php foreach ($block->getCcYears() as $k => $v): ?> - <option value="<?php echo $k ? $k : '' ?>"<?php if ($k == $ccExpYear): ?> selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $v ?></option> + <option value="<?php /* @noEscape */ echo $k ? $block->escapeHtml($k) : ''; ?>" + <?php if ($k == $ccExpYear): ?> selected="selected"<?php endif; ?>> + <?php echo $block->escapeHtml($v); ?> + </option> <?php endforeach ?> </select> </div> @@ -70,13 +112,25 @@ $code = $block->getMethodCode(); </div> </div> <?php if ($block->hasVerification()): ?> - <div class="field required cvv" id="<?php /* @escapeNotVerified */ echo $code ?>_cc_type_cvv_div"> - <label for="<?php /* @escapeNotVerified */ echo $code ?>_cc_cid" class="label"><span><?php /* @escapeNotVerified */ echo __('Card Verification Number') ?></span></label> + <div class="field required cvv" id="<?php /* @noEscape */ echo $code; ?>_cc_type_cvv_div"> + <label for="<?php /* @noEscape */ echo $code; ?>_cc_cid" class="label"> + <span><?php echo $block->escapeHtml(__('Card Verification Number')); ?></span> + </label> <div class="control"> - <input type="number" title="<?php /* @escapeNotVerified */ echo __('Card Verification Number') ?>" data-container="<?php /* @escapeNotVerified */ echo $code ?>-cc-cvv" class="input-text cvv" id="<?php /* @escapeNotVerified */ echo $code ?>_cc_cid" name="payment[cc_cid]" value="" data-validate='{"required-number":true, "validate-cc-cvn":"#<?php /* @escapeNotVerified */ echo $code ?>_cc_type"}' autocomplete="off"/> - <?php $_content = '<img src=\"' . $block->getViewFileUrl('Magento_Checkout::cvv.png') . '\" alt=\"' . __('Card Verification Number Visual Reference') . '\" title=\"' . __('Card Verification Number Visual Reference') . '\" />'; ?> + <input type="number" title="<?php echo $block->escapeHtml(__('Card Verification Number')); ?>" + data-container="<?php /* @noEscape */ echo $code; ?>-cc-cvv" class="input-text cvv" + id="<?php /* @noEscape */ echo $code; ?>_cc_cid" name="payment[cc_cid]" value="" + data-validate='{ + "required-number":true, + "validate-cc-cvn":"#<?php /* @noEscape */ echo $code;?>_cc_type" + }' autocomplete="off"/> <div class="note"> - <a href="#" id="<?php /* @escapeNotVerified */ echo $code ?>-cvv-what-is-this" class="action cvv" title="<?php echo $block->escapeHtml(__('What is this?'));?>" data-mage-init='{"tooltip": {"content": "<?php /* @escapeNotVerified */ echo $_content ?>"}}'><span><?php /* @escapeNotVerified */ echo __('What is this?') ?></span></a> + <a href="#" id="<?php /* @noEscape */ echo $code; ?>-cvv-what-is-this" class="action cvv" + title="<?php echo $block->escapeHtml(__('What is this?'));?>" data-mage-init='{ + "tooltip": {"content": "<?php /* @noEscape */ echo $content; ?>"} + }'> + <span><?php echo $block->escapeHtml(__('What is this?')); ?></span> + </a> </div> </div> </div> diff --git a/app/code/Magento/Payment/view/frontend/templates/transparent/iframe.phtml b/app/code/Magento/Payment/view/frontend/templates/transparent/iframe.phtml index ad92b4a5a8ccafd0418cf0f5becaeb45f10ae2ec..b191981585af62dde6804c9dbfc44a3b0258e1b5 100644 --- a/app/code/Magento/Payment/view/frontend/templates/transparent/iframe.phtml +++ b/app/code/Magento/Payment/view/frontend/templates/transparent/iframe.phtml @@ -13,18 +13,18 @@ $params = $block->getParams(); <head> <script> <?php if (isset($params['redirect'])): ?> - window.location="<?php echo $block->escapeXssInUrl($params['redirect']) ?>"; + window.location="<?php echo $block->escapeXssInUrl($params['redirect']); ?>"; <?php elseif (isset($params['redirect_parent'])): ?> - window.top.location="<?php echo $block->escapeXssInUrl($params['redirect_parent']) ?>"; + window.top.location="<?php echo $block->escapeXssInUrl($params['redirect_parent']); ?>"; <?php elseif (isset($params['error_msg'])): ?> - window.top.alert(<?php /* @escapeNotVerified */ echo $this->helper('Magento\Framework\Json\Helper\Data')->jsonEncode($params['error_msg']) ?>); + window.top.alert(<?php /* @noEscape */ echo $this->helper('Magento\Framework\Json\Helper\Data')->jsonEncode($params['error_msg']); ?>); var require = window.top.require; require(['Magento_Checkout/js/model/full-screen-loader', 'jquery'], function(fullScreenLoader, $) { fullScreenLoader.stopLoader(); $('[data-role="review-save"]').removeClass('disabled'); }); <?php elseif (isset($params['order_success'])): ?> - window.top.location = "<?php /* @escapeNotVerified */ echo $params['order_success'] ?>"; + window.top.location = "<?php echo $block->escapeXssInUrl($params['order_success']); ?>"; <?php else: ?> var require = window.top.require; require( diff --git a/app/code/Magento/Payment/view/frontend/templates/transparent/info.phtml b/app/code/Magento/Payment/view/frontend/templates/transparent/info.phtml index 0219cd8891fdc9aaeb621f4327fd64bb60e0b145..c3ce1e5dbb7029ed65db079fcbf0230839373a3b 100644 --- a/app/code/Magento/Payment/view/frontend/templates/transparent/info.phtml +++ b/app/code/Magento/Payment/view/frontend/templates/transparent/info.phtml @@ -7,9 +7,12 @@ // @codingStandardsIgnoreFile /** + * @var \Magento\Payment\Block\Transparent\Info $block * @see \Magento\Payment\Block\Transparent\Info */ ?> -<fieldset id="payment_form_<?php /* @escapeNotVerified */ echo $block->getMethodCode() ?>" style="display:none" class="fieldset items redirect"> - <div><?php /* @escapeNotVerified */ echo __('We\'ll ask for your payment details before you place an order.') ?></div> +<fieldset id="payment_form_<?php /* @noEscape */ echo $block->getMethodCode(); ?>" style="display:none" class="fieldset items redirect"> + <div> + <?php echo $block->escapeHtml(__('We\'ll ask for your payment details before you place an order.')); ?> + </div> </fieldset> diff --git a/app/code/Magento/Payment/view/frontend/web/js/view/payment/cc-form.js b/app/code/Magento/Payment/view/frontend/web/js/view/payment/cc-form.js index e957c254fb3719ca2e30319a01221fff7b27e227..b712956a2fc5434a3853144cd5afab7fdbcb293b 100644 --- a/app/code/Magento/Payment/view/frontend/web/js/view/payment/cc-form.js +++ b/app/code/Magento/Payment/view/frontend/web/js/view/payment/cc-form.js @@ -90,14 +90,14 @@ define( getData: function() { return { 'method': this.item.method, - 'cc_type': this.creditCardType(), - 'cc_exp_year': this.creditCardExpYear(), - 'cc_exp_month': this.creditCardExpMonth(), - 'cc_number': this.creditCardNumber(), - additional_data: { + 'additional_data': { 'cc_cid': this.creditCardVerificationNumber(), 'cc_ss_start_month': this.creditCardSsStartMonth(), - 'cc_ss_start_year': this.creditCardSsStartYear() + 'cc_ss_start_year': this.creditCardSsStartYear(), + 'cc_type': this.creditCardType(), + 'cc_exp_year': this.creditCardExpYear(), + 'cc_exp_month': this.creditCardExpMonth(), + 'cc_number': this.creditCardNumber() } }; }, diff --git a/app/code/Magento/Payment/view/frontend/web/transparent.js b/app/code/Magento/Payment/view/frontend/web/transparent.js index 2060ca7c8ea5e5a344329c0e48ad935859f77f8a..66b3203d7bc5181aae26afe4c7153ef5b2266497 100644 --- a/app/code/Magento/Payment/view/frontend/web/transparent.js +++ b/app/code/Magento/Payment/view/frontend/web/transparent.js @@ -6,9 +6,10 @@ define([ "jquery", "mage/template", + 'Magento_Ui/js/modal/alert', "jquery/ui", "Magento_Payment/js/model/credit-card-validation/validator" -], function($, mageTemplate){ +], function($, mageTemplate, alert){ 'use strict'; $.widget('mage.transparent', { @@ -101,10 +102,14 @@ define([ } else { msg = response.error_messages; if (typeof (msg) === 'object') { - alert(msg.join("\n")); + alert({ + content: msg.join("\n") + }); } if (msg) { - alert(msg); + alert({ + content: msg + }); } } } diff --git a/app/code/Magento/Paypal/Block/Express/Review.php b/app/code/Magento/Paypal/Block/Express/Review.php index 3c65f833ae43fd3dbac829c0f9787eeb2618d0e1..f17da02633af25a48c1bc8b39bad5e45e600cdf2 100644 --- a/app/code/Magento/Paypal/Block/Express/Review.php +++ b/app/code/Magento/Paypal/Block/Express/Review.php @@ -174,7 +174,7 @@ class Review extends \Magento\Framework\View\Element\Template $incl = $this->_getShippingPrice($rate->getPrice(), true); if ($incl != $price && $this->_taxHelper->displayShippingBothPrices()) { - $renderedInclTax = sprintf($inclTaxFormat, __('Incl. Tax'), $incl); + $renderedInclTax = sprintf($inclTaxFormat, $this->escapeHtml(__('Incl. Tax')), $incl); } } return sprintf($format, $this->escapeHtml($rate->getMethodTitle()), $price, $renderedInclTax); diff --git a/app/code/Magento/Paypal/Model/Billing/AbstractAgreement.php b/app/code/Magento/Paypal/Model/Billing/AbstractAgreement.php index bf45d116407a828b14b69a71f8b51f3d744c5a96..985f7cd8eefa65a6b5c4dbff7524f0b0a2782467 100644 --- a/app/code/Magento/Paypal/Model/Billing/AbstractAgreement.php +++ b/app/code/Magento/Paypal/Model/Billing/AbstractAgreement.php @@ -63,7 +63,7 @@ abstract class AbstractAgreement extends \Magento\Framework\Model\AbstractModel * @param \Magento\Framework\Model\Context $context * @param \Magento\Framework\Registry $registry * @param \Magento\Payment\Helper\Data $paymentData - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -71,7 +71,7 @@ abstract class AbstractAgreement extends \Magento\Framework\Model\AbstractModel \Magento\Framework\Model\Context $context, \Magento\Framework\Registry $registry, \Magento\Payment\Helper\Data $paymentData, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Paypal/Model/Billing/Agreement.php b/app/code/Magento/Paypal/Model/Billing/Agreement.php index f663aabaf1ad5ef8f982c19f2169b25adec61736..1e6a2cee5ae6a10bbc98044d5878f468706dd5de 100644 --- a/app/code/Magento/Paypal/Model/Billing/Agreement.php +++ b/app/code/Magento/Paypal/Model/Billing/Agreement.php @@ -58,7 +58,7 @@ class Agreement extends \Magento\Paypal\Model\Billing\AbstractAgreement * @param \Magento\Payment\Helper\Data $paymentData * @param \Magento\Paypal\Model\ResourceModel\Billing\Agreement\CollectionFactory $billingAgreementFactory * @param \Magento\Framework\Stdlib\DateTime\DateTimeFactory $dateFactory - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -68,7 +68,7 @@ class Agreement extends \Magento\Paypal\Model\Billing\AbstractAgreement \Magento\Payment\Helper\Data $paymentData, \Magento\Paypal\Model\ResourceModel\Billing\Agreement\CollectionFactory $billingAgreementFactory, \Magento\Framework\Stdlib\DateTime\DateTimeFactory $dateFactory, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Paypal/Model/Cert.php b/app/code/Magento/Paypal/Model/Cert.php index 86f4dd2b47623b06bef351f9e5d69d2b21a1a138..a5e4cb8be07a7eb49711298c047a7080900cb137 100644 --- a/app/code/Magento/Paypal/Model/Cert.php +++ b/app/code/Magento/Paypal/Model/Cert.php @@ -33,7 +33,7 @@ class Cert extends \Magento\Framework\Model\AbstractModel * @param \Magento\Framework\Registry $registry * @param \Magento\Framework\Filesystem $filesystem * @param \Magento\Framework\Encryption\EncryptorInterface $encryptor - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -42,7 +42,7 @@ class Cert extends \Magento\Framework\Model\AbstractModel \Magento\Framework\Registry $registry, \Magento\Framework\Filesystem $filesystem, \Magento\Framework\Encryption\EncryptorInterface $encryptor, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Paypal/Model/Config.php b/app/code/Magento/Paypal/Model/Config.php index b23574a3654d1e418649676d8537d3fe0515e6fc..dd5a0696e3e295878b3b6ec3a6053866d340f674 100644 --- a/app/code/Magento/Paypal/Model/Config.php +++ b/app/code/Magento/Paypal/Model/Config.php @@ -230,6 +230,7 @@ class Config extends AbstractConfig 'BG', 'BR', 'CA', + 'CN', 'CH', 'CL', 'CR', @@ -273,6 +274,7 @@ class Config extends AbstractConfig 'PH', 'PL', 'PT', + 'RU', 'RE', 'RO', 'SE', diff --git a/app/code/Magento/Paypal/Model/Direct.php b/app/code/Magento/Paypal/Model/Direct.php index 0d30a92ca3f97b5401ec53f468ea662a7c11d20e..9433a3b5761b1a9ba07837aeaf16ac2261591af2 100644 --- a/app/code/Magento/Paypal/Model/Direct.php +++ b/app/code/Magento/Paypal/Model/Direct.php @@ -149,7 +149,7 @@ class Direct extends \Magento\Payment\Model\Method\Cc * @param \Magento\Framework\UrlInterface $urlBuilder * @param \Magento\Framework\App\RequestInterface $requestHttp * @param CartFactory $cartFactory - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -169,7 +169,7 @@ class Direct extends \Magento\Payment\Model\Method\Cc \Magento\Framework\UrlInterface $urlBuilder, \Magento\Framework\App\RequestInterface $requestHttp, \Magento\Paypal\Model\CartFactory $cartFactory, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Paypal/Model/Express.php b/app/code/Magento/Paypal/Model/Express.php index 0ae6ca30f8362050adfd446a942b54dc612ed2bf..52a3882a169fce442ae1c5060492b932cedcda51 100644 --- a/app/code/Magento/Paypal/Model/Express.php +++ b/app/code/Magento/Paypal/Model/Express.php @@ -193,7 +193,7 @@ class Express extends \Magento\Payment\Model\Method\AbstractMethod * @param \Magento\Framework\Exception\LocalizedExceptionFactory $exception * @param \Magento\Sales\Api\TransactionRepositoryInterface $transactionRepository * @param Transaction\BuilderInterface $transactionBuilder - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -214,7 +214,7 @@ class Express extends \Magento\Payment\Model\Method\AbstractMethod \Magento\Framework\Exception\LocalizedExceptionFactory $exception, \Magento\Sales\Api\TransactionRepositoryInterface $transactionRepository, \Magento\Sales\Model\Order\Payment\Transaction\BuilderInterface $transactionBuilder, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Paypal/Model/Express/Checkout.php b/app/code/Magento/Paypal/Model/Express/Checkout.php index b1bd45a432ba3ea9fbaaef332c650fc7b8719256..d3b0cf72fc76bf9047b4a82e4cdc663380834123 100644 --- a/app/code/Magento/Paypal/Model/Express/Checkout.php +++ b/app/code/Magento/Paypal/Model/Express/Checkout.php @@ -830,6 +830,7 @@ class Checkout case \Magento\Sales\Model\Order::STATE_COMPLETE: case \Magento\Sales\Model\Order::STATE_PAYMENT_REVIEW: $this->orderSender->send($order); + $this->_checkoutSession->start(); break; default: break; @@ -1190,10 +1191,10 @@ class Checkout /** * Set shipping options to api * @param \Magento\Paypal\Model\Cart $cart - * @param \Magento\Quote\Model\Quote\Address $address + * @param \Magento\Quote\Model\Quote\Address|null $address * @return void */ - private function setShippingOptions(PaypalCart $cart, Address $address) + private function setShippingOptions(PaypalCart $cart, Address $address = null) { // for included tax always disable line items (related to paypal amount rounding problem) $this->_api->setIsLineItemsEnabled($this->_config->getValue(PaypalConfig::TRANSFER_CART_LINE_ITEMS)); diff --git a/app/code/Magento/Paypal/Model/Hostedpro.php b/app/code/Magento/Paypal/Model/Hostedpro.php index 9497beb05d581b9b09fb91079183dcf2752b45e7..61d0c35c916950496b2ed6fd58d9d748be781802 100644 --- a/app/code/Magento/Paypal/Model/Hostedpro.php +++ b/app/code/Magento/Paypal/Model/Hostedpro.php @@ -85,7 +85,7 @@ class Hostedpro extends \Magento\Paypal\Model\Direct * @param \Magento\Framework\App\RequestInterface $requestHttp * @param CartFactory $cartFactory * @param Hostedpro\RequestFactory $hostedproRequestFactory - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -106,7 +106,7 @@ class Hostedpro extends \Magento\Paypal\Model\Direct \Magento\Framework\App\RequestInterface $requestHttp, \Magento\Paypal\Model\CartFactory $cartFactory, \Magento\Paypal\Model\Hostedpro\RequestFactory $hostedproRequestFactory, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Paypal/Model/Ipn.php b/app/code/Magento/Paypal/Model/Ipn.php index 9a14dfdc010b92710c65579cf84350a212e0d18d..811cbf70ebc85ef5db6259585ff2db11916a0527 100644 --- a/app/code/Magento/Paypal/Model/Ipn.php +++ b/app/code/Magento/Paypal/Model/Ipn.php @@ -11,6 +11,7 @@ namespace Magento\Paypal\Model; use Exception; use Magento\Sales\Model\Order\Email\Sender\CreditmemoSender; use Magento\Sales\Model\Order\Email\Sender\OrderSender; +use Magento\Paypal\Model\Info; /** * PayPal Instant Payment Notification processor model @@ -577,15 +578,15 @@ class Ipn extends \Magento\Paypal\Model\AbstractIpn implements IpnInterface * TODO: implement logic in one place * @see \Magento\Paypal\Model\Pro::importPaymentInfo() */ - if ($this->_paypalInfo->isPaymentReviewRequired($payment)) { + if (Info::isPaymentReviewRequired($payment)) { $payment->setIsTransactionPending(true); if ($fraudFilters) { $payment->setIsFraudDetected(true); } } - if ($this->_paypalInfo->isPaymentSuccessful($payment)) { + if (Info::isPaymentSuccessful($payment)) { $payment->setIsTransactionApproved(true); - } elseif ($this->_paypalInfo->isPaymentFailed($payment)) { + } elseif (Info::isPaymentFailed($payment)) { $payment->setIsTransactionDenied(true); } diff --git a/app/code/Magento/Paypal/Model/Method/Agreement.php b/app/code/Magento/Paypal/Model/Method/Agreement.php index 0c6d70b28ef6183efa4803e960bf9054843a03dc..93321eefc89f1eaa6629a146e35ef9b86285f63b 100644 --- a/app/code/Magento/Paypal/Model/Method/Agreement.php +++ b/app/code/Magento/Paypal/Model/Method/Agreement.php @@ -128,7 +128,7 @@ class Agreement extends \Magento\Paypal\Model\Payment\Method\Billing\AbstractAgr * @param \Magento\Paypal\Model\ProFactory $proFactory * @param \Magento\Framework\UrlInterface $urlBuilder * @param \Magento\Paypal\Model\CartFactory $cartFactory - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -146,7 +146,7 @@ class Agreement extends \Magento\Paypal\Model\Payment\Method\Billing\AbstractAgr \Magento\Paypal\Model\ProFactory $proFactory, \Magento\Framework\UrlInterface $urlBuilder, \Magento\Paypal\Model\CartFactory $cartFactory, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Paypal/Model/Payflow/Transparent.php b/app/code/Magento/Paypal/Model/Payflow/Transparent.php index 409e4801d01860dd5b93906600db64728a4453a8..b47e8af2012c36bffa529c63bb89ce819edb91f2 100644 --- a/app/code/Magento/Paypal/Model/Payflow/Transparent.php +++ b/app/code/Magento/Paypal/Model/Payflow/Transparent.php @@ -53,7 +53,7 @@ class Transparent extends Payflowpro implements TransparentInterface * @param Gateway $gateway * @param HandlerInterface $errorHandler * @param ResponseValidator $responseValidator - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -73,7 +73,7 @@ class Transparent extends Payflowpro implements TransparentInterface Gateway $gateway, HandlerInterface $errorHandler, ResponseValidator $responseValidator, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { @@ -123,9 +123,8 @@ class Transparent extends Payflowpro implements TransparentInterface $request = $this->buildBasicRequest(); $order = $payment->getOrder(); - if (!empty($order)) { - $request = $this->fillCustomerContacts($order, $request); - } + $this->addRequestOrderInfo($request, $order); + $request = $this->fillCustomerContacts($order, $request); $request->setTrxtype(self::TRXTYPE_AUTH_ONLY); $request->setOrigid($payment->getAdditionalInformation('pnref')); diff --git a/app/code/Magento/Paypal/Model/PayflowExpress.php b/app/code/Magento/Paypal/Model/PayflowExpress.php index 9c719279cb2e7561998b550854d14829494063da..a45f1153b67b54cfe482ec1cf97b9ddfdd269c81 100644 --- a/app/code/Magento/Paypal/Model/PayflowExpress.php +++ b/app/code/Magento/Paypal/Model/PayflowExpress.php @@ -66,7 +66,7 @@ class PayflowExpress extends \Magento\Paypal\Model\Express * @param \Magento\Sales\Api\TransactionRepositoryInterface $transactionRepository * @param Transaction\BuilderInterface $transactionBuilder * @param InfoFactory $paypalInfoFactory - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -88,7 +88,7 @@ class PayflowExpress extends \Magento\Paypal\Model\Express \Magento\Sales\Api\TransactionRepositoryInterface $transactionRepository, \Magento\Sales\Model\Order\Payment\Transaction\BuilderInterface $transactionBuilder, InfoFactory $paypalInfoFactory, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Paypal/Model/Payflowlink.php b/app/code/Magento/Paypal/Model/Payflowlink.php index ffddac7ea17cfd31d37db2afac4b8e0025aa1a02..91513032674c6250ab1a55306609cb533e432932 100644 --- a/app/code/Magento/Paypal/Model/Payflowlink.php +++ b/app/code/Magento/Paypal/Model/Payflowlink.php @@ -132,7 +132,7 @@ class Payflowlink extends \Magento\Paypal\Model\Payflowpro * @param \Magento\Framework\App\RequestInterface $requestHttp * @param \Magento\Store\Model\WebsiteFactory $websiteFactory * @param OrderSender $orderSender - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -158,7 +158,7 @@ class Payflowlink extends \Magento\Paypal\Model\Payflowpro \Magento\Framework\App\RequestInterface $requestHttp, \Magento\Store\Model\WebsiteFactory $websiteFactory, OrderSender $orderSender, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { @@ -413,38 +413,16 @@ class Payflowlink extends \Magento\Paypal\Model\Payflowpro protected function _buildTokenRequest(\Magento\Sales\Model\Order\Payment $payment) { $request = $this->buildBasicRequest(); - $request->setCreatesecuretoken( - 'Y' - )->setSecuretokenid( - $this->mathRandom->getUniqueHash() - )->setTrxtype( - $this->_getTrxTokenType() - )->setAmt( - sprintf('%.2F', $payment->getOrder()->getBaseTotalDue()) - )->setCurrency( - $payment->getOrder()->getBaseCurrencyCode() - )->setInvnum( - $payment->getOrder()->getIncrementId() - )->setCustref( - $payment->getOrder()->getIncrementId() - )->setPonum( - $payment->getOrder()->getId() - ); + $request->setCreatesecuretoken('Y') + ->setSecuretokenid($this->mathRandom->getUniqueHash()) + ->setTrxtype($this->_getTrxTokenType()); $order = $payment->getOrder(); - if (empty($order)) { - return $request; - } + $request->setAmt(sprintf('%.2F', $order->getBaseTotalDue())) + ->setCurrency($order->getBaseCurrencyCode()); + $this->addRequestOrderInfo($request, $order); - $billing = $order->getBillingAddress(); - if (!empty($billing)) { - $request = $this->setBilling($request, $billing); - $request->setEmail($order->getCustomerEmail()); - } - $shipping = $order->getShippingAddress(); - if (!empty($shipping)) { - $request = $this->setShipping($request, $shipping); - } + $request = $this->fillCustomerContacts($order, $request); //pass store Id to request $request->setData('USER1', $order->getStoreId()); $request->setData('USER2', $this->_getSecureSilentPostHash($payment)); diff --git a/app/code/Magento/Paypal/Model/Payflowpro.php b/app/code/Magento/Paypal/Model/Payflowpro.php index 52294d89b7940e76539f3bdc87848ef07c4db8c8..6efc7e7cca4ed1735aeeaaacc8deee09aaf18eb1 100644 --- a/app/code/Magento/Paypal/Model/Payflowpro.php +++ b/app/code/Magento/Paypal/Model/Payflowpro.php @@ -15,6 +15,7 @@ use Magento\Sales\Model\Order\Payment; use Magento\Payment\Model\Method\Online\GatewayInterface; use Magento\Payment\Model\Method\ConfigInterface; use Magento\Paypal\Model\Config; +use Magento\Sales\Model\Order; use Magento\Store\Model\ScopeInterface; /** @@ -270,7 +271,7 @@ class Payflowpro extends \Magento\Payment\Model\Method\Cc implements GatewayInte * @param ConfigInterfaceFactory $configFactory * @param Gateway $gateway * @param HandlerInterface $errorHandler - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -289,7 +290,7 @@ class Payflowpro extends \Magento\Payment\Model\Method\Cc implements GatewayInte ConfigInterfaceFactory $configFactory, Gateway $gateway, HandlerInterface $errorHandler, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { @@ -362,6 +363,7 @@ class Payflowpro extends \Magento\Payment\Model\Method\Cc implements GatewayInte public function authorize(\Magento\Payment\Model\InfoInterface $payment, $amount) { $request = $this->_buildPlaceRequest($payment, $amount); + $this->addRequestOrderInfo($request, $payment->getOrder()); $request->setTrxtype(self::TRXTYPE_AUTH_ONLY); $response = $this->postRequest($request, $this->getConfig()); $this->processErrors($response); @@ -413,6 +415,7 @@ class Payflowpro extends \Magento\Payment\Model\Method\Cc implements GatewayInte $request = $this->_buildPlaceRequest($payment, $amount); $request->setTrxtype(self::TRXTYPE_SALE); } + $this->addRequestOrderInfo($request, $payment->getOrder()); $response = $this->postRequest($request, $this->getConfig()); $this->processErrors($response); @@ -580,7 +583,7 @@ class Payflowpro extends \Magento\Payment\Model\Method\Cc implements GatewayInte * * @param Object|Payment $payment * @param float $amount - * @return Object + * @return DataObject */ protected function _buildPlaceRequest(DataObject $payment, $amount) { @@ -591,17 +594,8 @@ class Payflowpro extends \Magento\Payment\Model\Method\Cc implements GatewayInte $request->setCvv2($payment->getCcCid()); $order = $payment->getOrder(); - if (!empty($order)) { - $request->setCurrency($order->getBaseCurrencyCode()); - - $orderIncrementId = $order->getIncrementId(); - - $request->setCurrency($order->getBaseCurrencyCode()) - ->setInvnum($orderIncrementId) - ->setPonum($order->getId()) - ->setComment1($orderIncrementId); - $request = $this->fillCustomerContacts($order, $request); - } + $request->setCurrency($order->getBaseCurrencyCode()); + $request = $this->fillCustomerContacts($order, $request); return $request; } @@ -828,10 +822,6 @@ class Payflowpro extends \Magento\Payment\Model\Method\Cc implements GatewayInte */ public function fillCustomerContacts(DataObject $order, DataObject $request) { - $customerId = $order->getCustomerId(); - if ($customerId) { - $request->setCustref($customerId); - } $billing = $order->getBillingAddress(); if (!empty($billing)) { $request = $this->setBilling($request, $billing); @@ -844,4 +834,23 @@ class Payflowpro extends \Magento\Payment\Model\Method\Cc implements GatewayInte } return $request; } + + /** + * Add order details to payment request + * @param DataObject $request + * @param Order $order + * @return void + */ + protected function addRequestOrderInfo(DataObject $request, Order $order) + { + $id = $order->getId(); + // for auth request order id is not exists yet + if (!empty($id)) { + $request->setPonum($id); + } + $orderIncrementId = $order->getIncrementId(); + $request->setCustref($orderIncrementId) + ->setInvnum($orderIncrementId) + ->setComment1($orderIncrementId); + } } diff --git a/app/code/Magento/Paypal/Model/Payment/Method/Billing/AbstractAgreement.php b/app/code/Magento/Paypal/Model/Payment/Method/Billing/AbstractAgreement.php index 71b594ead9f635aeeb217762c5927d7767a6bee2..521a61300267614074234bc2b98d0aca1048662f 100644 --- a/app/code/Magento/Paypal/Model/Payment/Method/Billing/AbstractAgreement.php +++ b/app/code/Magento/Paypal/Model/Payment/Method/Billing/AbstractAgreement.php @@ -52,7 +52,7 @@ abstract class AbstractAgreement extends \Magento\Payment\Model\Method\AbstractM * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig * @param \Magento\Payment\Model\Method\Logger $logger * @param \Magento\Paypal\Model\Billing\AgreementFactory $agreementFactory - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -66,7 +66,7 @@ abstract class AbstractAgreement extends \Magento\Payment\Model\Method\AbstractM \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig, \Magento\Payment\Model\Method\Logger $logger, \Magento\Paypal\Model\Billing\AgreementFactory $agreementFactory, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Paypal/Model/Pro.php b/app/code/Magento/Paypal/Model/Pro.php index f3e29e6f8268ca828cd945ae4f5cb6ba6efc0af5..e3e829132b8dc76ec4b4f94ca603f8432ee71b51 100644 --- a/app/code/Magento/Paypal/Model/Pro.php +++ b/app/code/Magento/Paypal/Model/Pro.php @@ -10,6 +10,7 @@ namespace Magento\Paypal\Model; use Magento\Paypal\Model\Api\AbstractApi; use Magento\Sales\Api\TransactionRepositoryInterface; +use Magento\Paypal\Model\Info; /** * PayPal Website Payments Pro implementation for payment method instances @@ -128,9 +129,9 @@ class Pro * @param int|null $storeId * @return $this */ - public function setConfig(\Magento\Paypal\Model\Config $instace, $storeId = null) + public function setConfig(\Magento\Paypal\Model\Config $instance, $storeId = null) { - $this->_config = $instace; + $this->_config = $instance; if (null !== $storeId) { $this->_config->setStoreId($storeId); } @@ -206,14 +207,14 @@ class Pro if ($from->getDataUsingMethod(\Magento\Paypal\Model\Info::IS_FRAUD)) { $to->setIsTransactionPending(true); $to->setIsFraudDetected(true); - } elseif ($this->getInfo()->isPaymentReviewRequired($to)) { + } elseif (Info::isPaymentReviewRequired($to)) { $to->setIsTransactionPending(true); } // give generic info about transaction state - if ($this->getInfo()->isPaymentSuccessful($to)) { + if (Info::isPaymentSuccessful($to)) { $to->setIsTransactionApproved(true); - } elseif ($this->getInfo()->isPaymentFailed($to)) { + } elseif (Info::isPaymentFailed($to)) { $to->setIsTransactionDenied(true); } @@ -255,17 +256,17 @@ class Pro if (!$authTransactionId) { return false; } - $api = $this->getApi()->setAuthorizationId( - $authTransactionId - )->setIsCaptureComplete( - $payment->getShouldCloseParentTransaction() - )->setAmount( - $amount - )->setCurrencyCode( - $payment->getOrder()->getBaseCurrencyCode() - )->setInvNum( - $payment->getOrder()->getIncrementId() - ); + $api = $this->getApi() + ->setAuthorizationId($authTransactionId) + ->setIsCaptureComplete($payment->getShouldCloseParentTransaction()) + ->setAmount($amount); + + $order = $payment->getOrder(); + $orderIncrementId = $order->getIncrementId(); + $api->setCurrencyCode($order->getBaseCurrencyCode()) + ->setInvNum($orderIncrementId) + ->setCustref($orderIncrementId) + ->setPonum($order->getId()); // TODO: pass 'NOTE' to API $api->callDoCapture(); @@ -345,7 +346,7 @@ class Pro */ protected function _isPaymentReviewRequired(\Magento\Payment\Model\InfoInterface $payment) { - return \Magento\Paypal\Model\Info::isPaymentReviewRequired($payment); + return Info::isPaymentReviewRequired($payment); } /** @@ -362,7 +363,7 @@ class Pro // check whether the review is still needed $api->callGetTransactionDetails(); $this->importPaymentInfo($api, $payment); - if (!$this->getInfo()->isPaymentReviewRequired($payment)) { + if (!Info::isPaymentReviewRequired($payment)) { return false; } diff --git a/app/code/Magento/Paypal/Model/Report/Settlement.php b/app/code/Magento/Paypal/Model/Report/Settlement.php index 73698224b2b39478d10ac09a1cde8ab4850dcc67..4fc8633bafa2fdd22ddeb3442e681f3534fc26c7 100644 --- a/app/code/Magento/Paypal/Model/Report/Settlement.php +++ b/app/code/Magento/Paypal/Model/Report/Settlement.php @@ -168,7 +168,7 @@ class Settlement extends \Magento\Framework\Model\AbstractModel * @param \Magento\Framework\Filesystem $filesystem * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -178,7 +178,7 @@ class Settlement extends \Magento\Framework\Model\AbstractModel \Magento\Framework\Filesystem $filesystem, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Paypal/Model/ResourceModel/Billing/Agreement.php b/app/code/Magento/Paypal/Model/ResourceModel/Billing/Agreement.php index f027cf7bce79373bdbedb852d75545a81d957dce..6f714ae437e605c3836c55a0aa430a845b1f23fd 100644 --- a/app/code/Magento/Paypal/Model/ResourceModel/Billing/Agreement.php +++ b/app/code/Magento/Paypal/Model/ResourceModel/Billing/Agreement.php @@ -8,7 +8,7 @@ namespace Magento\Paypal\Model\ResourceModel\Billing; /** * Billing agreement resource model */ -class Agreement extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Agreement extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Resource initialization diff --git a/app/code/Magento/Paypal/Model/ResourceModel/Billing/Agreement/Collection.php b/app/code/Magento/Paypal/Model/ResourceModel/Billing/Agreement/Collection.php index 23f80dff4199b90e077fdde308030a242c362bbc..f08876e5e61efdde4344620f5cd63977309f93b6 100644 --- a/app/code/Magento/Paypal/Model/ResourceModel/Billing/Agreement/Collection.php +++ b/app/code/Magento/Paypal/Model/ResourceModel/Billing/Agreement/Collection.php @@ -10,7 +10,7 @@ use Magento\Customer\Api\CustomerMetadataInterface; /** * Billing agreements resource collection */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Mapping for fields @@ -45,7 +45,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab * @param \Magento\Customer\Model\ResourceModel\Customer $customerResource * @param \Magento\Eav\Helper\Data $eavHelper * @param mixed $connection - * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource + * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource */ public function __construct( \Magento\Framework\Data\Collection\EntityFactory $entityFactory, @@ -55,7 +55,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab \Magento\Customer\Model\ResourceModel\Customer $customerResource, \Magento\Eav\Helper\Data $eavHelper, \Magento\Framework\DB\Adapter\AdapterInterface $connection = null, - \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null + \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null ) { parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource); $this->_eavHelper = $eavHelper; diff --git a/app/code/Magento/Paypal/Model/ResourceModel/Cert.php b/app/code/Magento/Paypal/Model/ResourceModel/Cert.php index 81cfd75024c05a773d1643495f862c8451cb0010..13de6e3c1f327c1beca3aa5107bc7e2cd654e363 100644 --- a/app/code/Magento/Paypal/Model/ResourceModel/Cert.php +++ b/app/code/Magento/Paypal/Model/ResourceModel/Cert.php @@ -8,7 +8,7 @@ namespace Magento\Paypal\Model\ResourceModel; /** * PayPal resource model for certificate based authentication */ -class Cert extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Cert extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * @var \Magento\Framework\Stdlib\DateTime\DateTime @@ -21,13 +21,13 @@ class Cert extends \Magento\Framework\Model\ModelResource\Db\AbstractDb protected $dateTime; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Framework\Stdlib\DateTime\DateTime $coreDate * @param \Magento\Framework\Stdlib\DateTime $dateTime * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Framework\Stdlib\DateTime\DateTime $coreDate, \Magento\Framework\Stdlib\DateTime $dateTime, $connectionName = null @@ -51,7 +51,7 @@ class Cert extends \Magento\Framework\Model\ModelResource\Db\AbstractDb * Set date of last update * * @param \Magento\Framework\Model\AbstractModel $object - * @return \Magento\Framework\Model\ModelResource\Db\AbstractDb + * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb */ protected function _beforeSave(\Magento\Framework\Model\AbstractModel $object) { diff --git a/app/code/Magento/Paypal/Model/ResourceModel/Report/Settlement.php b/app/code/Magento/Paypal/Model/ResourceModel/Report/Settlement.php index 0538906b4a209e72f65ebd3ae1f441db42ce4166..eed10fa9d69da3a56c37d22bcd1e9724b820f856 100644 --- a/app/code/Magento/Paypal/Model/ResourceModel/Report/Settlement.php +++ b/app/code/Magento/Paypal/Model/ResourceModel/Report/Settlement.php @@ -11,7 +11,7 @@ namespace Magento\Paypal\Model\ResourceModel\Report; /** * Report settlement resource model */ -class Settlement extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Settlement extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Table name @@ -26,12 +26,12 @@ class Settlement extends \Magento\Framework\Model\ModelResource\Db\AbstractDb protected $_coreDate; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Framework\Stdlib\DateTime\DateTime $coreDate * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Framework\Stdlib\DateTime\DateTime $coreDate, $connectionName = null ) { diff --git a/app/code/Magento/Paypal/Model/ResourceModel/Report/Settlement/Row.php b/app/code/Magento/Paypal/Model/ResourceModel/Report/Settlement/Row.php index 1501b46fa35ed1c77208f4079bf1dee73a9c4dc6..b2bc99495f7db5362e9761e702862350d5800658 100644 --- a/app/code/Magento/Paypal/Model/ResourceModel/Report/Settlement/Row.php +++ b/app/code/Magento/Paypal/Model/ResourceModel/Report/Settlement/Row.php @@ -10,7 +10,7 @@ namespace Magento\Paypal\Model\ResourceModel\Report\Settlement; * * @author Magento Core Team <core@magentocommerce.com> */ -class Row extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Row extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Resource model initialization. diff --git a/app/code/Magento/Paypal/Model/ResourceModel/Report/Settlement/Row/Collection.php b/app/code/Magento/Paypal/Model/ResourceModel/Report/Settlement/Row/Collection.php index e76234b84973a7ea2d2d09911ba19394c29902fa..6fcd59ad141e10da8f71859175e7c49599cdac67 100644 --- a/app/code/Magento/Paypal/Model/ResourceModel/Report/Settlement/Row/Collection.php +++ b/app/code/Magento/Paypal/Model/ResourceModel/Report/Settlement/Row/Collection.php @@ -11,7 +11,7 @@ */ namespace Magento\Paypal\Model\ResourceModel\Report\Settlement\Row; -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Resource initializing diff --git a/app/code/Magento/Paypal/Model/System/Config/Backend/Cert.php b/app/code/Magento/Paypal/Model/System/Config/Backend/Cert.php index 5edc101cc02e8eef0b003d144acf381d0e3f4c89..14607a6c87d9cb01be32d4193dc0b9e55e1b555e 100644 --- a/app/code/Magento/Paypal/Model/System/Config/Backend/Cert.php +++ b/app/code/Magento/Paypal/Model/System/Config/Backend/Cert.php @@ -35,7 +35,7 @@ class Cert extends \Magento\Framework\App\Config\Value * @param \Magento\Paypal\Model\CertFactory $certFactory * @param \Magento\Framework\Encryption\EncryptorInterface $encryptor * @param \Magento\Framework\Filesystem $filesystem - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -46,7 +46,7 @@ class Cert extends \Magento\Framework\App\Config\Value \Magento\Paypal\Model\CertFactory $certFactory, \Magento\Framework\Encryption\EncryptorInterface $encryptor, \Magento\Framework\Filesystem $filesystem, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Paypal/Model/System/Config/Backend/Cron.php b/app/code/Magento/Paypal/Model/System/Config/Backend/Cron.php index dda1f59655900691e7f6986a1edd673a0c72ef1e..8afc08f14711c884e8cae9e940c7c9af13c33f81 100644 --- a/app/code/Magento/Paypal/Model/System/Config/Backend/Cron.php +++ b/app/code/Magento/Paypal/Model/System/Config/Backend/Cron.php @@ -21,7 +21,7 @@ class Cron extends \Magento\Framework\App\Config\Value * @param \Magento\Framework\Registry $registry * @param \Magento\Framework\App\Config\ScopeConfigInterface $config * @param \Magento\Framework\App\Config\ValueFactory $configValueFactory - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -30,7 +30,7 @@ class Cron extends \Magento\Framework\App\Config\Value \Magento\Framework\Registry $registry, \Magento\Framework\App\Config\ScopeConfigInterface $config, \Magento\Framework\App\Config\ValueFactory $configValueFactory, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Paypal/Model/System/Config/Backend/MerchantCountry.php b/app/code/Magento/Paypal/Model/System/Config/Backend/MerchantCountry.php index bef8a6e42b448693075ca2bc03a59222821a14c1..caa265b4e07a3ccdadf35d62d7fda84a64d9629d 100644 --- a/app/code/Magento/Paypal/Model/System/Config/Backend/MerchantCountry.php +++ b/app/code/Magento/Paypal/Model/System/Config/Backend/MerchantCountry.php @@ -28,7 +28,7 @@ class MerchantCountry extends \Magento\Framework\App\Config\Value * @param \Magento\Framework\App\Config\ScopeConfigInterface $config * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param \Magento\Directory\Helper\Data $directoryHelper - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -38,7 +38,7 @@ class MerchantCountry extends \Magento\Framework\App\Config\Value \Magento\Framework\App\Config\ScopeConfigInterface $config, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Directory\Helper\Data $directoryHelper, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Paypal/Test/Unit/Model/Payflow/TransparentTest.php b/app/code/Magento/Paypal/Test/Unit/Model/Payflow/TransparentTest.php index b68d42d2974220ff43a930e1e4517e2a340ed75e..0db76c61d8123f970cfe20bf169e8b83b3d107ae 100644 --- a/app/code/Magento/Paypal/Test/Unit/Model/Payflow/TransparentTest.php +++ b/app/code/Magento/Paypal/Test/Unit/Model/Payflow/TransparentTest.php @@ -118,8 +118,11 @@ class TransparentTest extends \PHPUnit_Framework_TestCase */ protected function initializationAuthorizeMock() { - $this->orderMock = $this->getMockBuilder('Magento\Framework\DataObject') - ->setMethods(['getCustomerId', 'getBillingAddress', 'getShippingAddress', 'getCustomerEmail']) + $this->orderMock = $this->getMockBuilder('Magento\Sales\Model\Order') + ->setMethods([ + 'getCustomerId', 'getBillingAddress', 'getShippingAddress', 'getCustomerEmail', + 'getId', 'getIncrementId' + ]) ->disableOriginalConstructor() ->getMock(); $this->addressBillingMock = $this->getMockBuilder('Magento\Framework\DataObject') @@ -163,6 +166,12 @@ class TransparentTest extends \PHPUnit_Framework_TestCase $this->orderMock->expects($this->once()) ->method('getBillingAddress') ->willReturn($this->addressBillingMock); + $this->orderMock->expects(static::once()) + ->method('getId') + ->willReturn(1); + $this->orderMock->expects(static::once()) + ->method('getIncrementId') + ->willReturn('0000001'); $this->orderMock->expects($this->once()) ->method('getShippingAddress') ->willReturn($this->addressShippingMock); @@ -264,6 +273,9 @@ class TransparentTest extends \PHPUnit_Framework_TestCase */ public function testAuthorizeException() { + $this->initializationAuthorizeMock(); + $this->buildRequestData(); + $this->gatewayMock->expects($this->once()) ->method('postRequest') ->willThrowException(new \Exception()); @@ -321,6 +333,9 @@ class TransparentTest extends \PHPUnit_Framework_TestCase $origResultExactlyCall, $origResult ) { + $this->initializationAuthorizeMock(); + $this->buildRequestData(); + $this->responseMock->expects($this->exactly($resultCodeExactlyCall)) ->method('getResultCode') ->willReturn($resultCode); diff --git a/app/code/Magento/Paypal/Test/Unit/Model/PayflowproTest.php b/app/code/Magento/Paypal/Test/Unit/Model/PayflowproTest.php index ff90889d946eb0958998edbf51d6cade7184395b..215680852225b7b3ed5b4507a223fda725b821b5 100644 --- a/app/code/Magento/Paypal/Test/Unit/Model/PayflowproTest.php +++ b/app/code/Magento/Paypal/Test/Unit/Model/PayflowproTest.php @@ -18,6 +18,7 @@ use Magento\Store\Model\ScopeInterface; */ class PayflowproTest extends \PHPUnit_Framework_TestCase { + /** * @var Payflowpro */ @@ -26,7 +27,7 @@ class PayflowproTest extends \PHPUnit_Framework_TestCase /** * @var \Magento\Framework\TestFramework\Unit\Helper\ObjectManager */ - protected $_helper; + protected $helper; /** * @var \Magento\Payment\Model\Method\ConfigInterface|\PHPUnit_Framework_MockObject_MockObject @@ -108,8 +109,8 @@ class PayflowproTest extends \PHPUnit_Framework_TestCase $clientFactory = $this->getMock('Magento\Framework\HTTP\ZendClientFactory', ['create'], [], '', false); $clientFactory->expects($this->any())->method('create')->will($this->returnValue($client)); - $this->_helper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this); - $this->payflowpro = $this->_helper->getObject( + $this->helper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this); + $this->payflowpro = $this->helper->getObject( 'Magento\Paypal\Model\Payflowpro', [ 'configFactory' => $configFactoryMock, @@ -129,7 +130,7 @@ class PayflowproTest extends \PHPUnit_Framework_TestCase */ public function testCanVoid($amountPaid, $paymentType, $expected) { - $payment = $this->_helper->getObject($paymentType); + $payment = $this->helper->getObject($paymentType); $payment->setAmountPaid($amountPaid); $this->payflowpro->setInfoInstance($payment); $this->assertEquals($expected, $this->payflowpro->canVoid()); @@ -161,34 +162,12 @@ class PayflowproTest extends \PHPUnit_Framework_TestCase */ public function testFetchTransactionInfoForBN() { - $storeMock = $this->getMock( - 'Magento\Store\Model\Store', - ['getId'], - [], - '', - false - ); - $response = new \Magento\Framework\DataObject( - [ - 'result' => '0', - 'pnref' => 'V19A3D27B61E', - 'respmsg' => 'Approved', - 'authcode' => '510PNI', - 'hostcode' => 'A', - 'request_id' => 'f930d3dc6824c1f7230c5529dc37ae5e', - 'result_code' => '0', - ] - ); + $response = $this->getGatewayResponseObject(); $this->gatewayMock->expects($this->once()) ->method('postRequest') ->willReturn($response); - $this->storeManagerMock->expects($this->once()) - ->method('getStore') - ->willReturn($storeMock); - $storeMock->expects($this->once()) - ->method('getId') - ->willReturn(77); + $this->initStoreMock(); $this->configMock->expects($this->once())->method('getBuildNotationCode') ->will($this->returnValue('BNCODE')); $payment = $this->getMock('Magento\Payment\Model\Info', ['setTransactionId', '__wakeup'], [], '', false); @@ -203,7 +182,7 @@ class PayflowproTest extends \PHPUnit_Framework_TestCase */ public function testSetTransStatus($response, $paymentExpected) { - $payment = $this->_helper->getObject('Magento\Payment\Model\Info'); + $payment = $this->helper->getObject('Magento\Payment\Model\Info'); $this->payflowpro->setTransStatus($payment, $response); $this->assertEquals($paymentExpected->getData(), $payment->getData()); } @@ -211,7 +190,7 @@ class PayflowproTest extends \PHPUnit_Framework_TestCase public function setTransStatusDataProvider() { return [ - [ + [ 'response' => new \Magento\Framework\DataObject( [ 'pnref' => 'V19A3D27B61E', @@ -268,6 +247,53 @@ class PayflowproTest extends \PHPUnit_Framework_TestCase $this->assertEquals($result, $this->payflowpro->isActive($storeId)); } + /** + * @covers \Magento\Paypal\Model\Payflowpro::capture + */ + public function testCaptureWithBuildPlaceRequest() + { + $paymentMock = $this->getPaymentMock(); + $orderMock = $this->getOrderMock(); + + // test case to build basic request + $paymentMock->expects(static::once()) + ->method('getAdditionalInformation') + ->with('pnref') + ->willReturn(false); + $paymentMock->expects(static::once()) + ->method('getParentTransactionId') + ->willReturn(false); + + $paymentMock->expects(static::exactly(2)) + ->method('getOrder') + ->willReturn($orderMock); + + $response = $this->execGatewayRequest(); + $amount = 23.03; + $this->payflowpro->capture($paymentMock, $amount); + static::assertEquals($response['pnref'], $paymentMock->getTransactionId()); + static::assertFalse((bool)$paymentMock->getIsTransactionPending()); + } + + /** + * @covers \Magento\Paypal\Model\Payflowpro::authorize + */ + public function testAuthorize() + { + $paymentMock = $this->getPaymentMock(); + $orderMock = $this->getOrderMock(); + + $paymentMock->expects(static::exactly(2)) + ->method('getOrder') + ->willReturn($orderMock); + + $response = $this->execGatewayRequest(); + $amount = 43.20; + $this->payflowpro->authorize($paymentMock, $amount); + static::assertEquals($response['pnref'], $paymentMock->getTransactionId()); + static::assertFalse((bool)$paymentMock->getIsTransactionPending()); + } + /** * @return array */ @@ -296,4 +322,123 @@ class PayflowproTest extends \PHPUnit_Framework_TestCase ], ]; } + + /** + * Create mock object for store model + * @return void + */ + protected function initStoreMock() + { + $storeId = 27; + $storeMock = $this->getMockBuilder('Magento\Store\Model\Store') + ->disableOriginalConstructor() + ->setMethods(['getId']) + ->getMock(); + $this->storeManagerMock->expects(static::once()) + ->method('getStore') + ->willReturn($storeMock); + $storeMock->expects(static::once()) + ->method('getId') + ->willReturn($storeId); + } + + /** + * Create response object for Payflowpro gateway + * @return \Magento\Framework\DataObject + */ + protected function getGatewayResponseObject() + { + return new \Magento\Framework\DataObject( + [ + 'result' => '0', + 'pnref' => 'V19A3D27B61E', + 'respmsg' => 'Approved', + 'authcode' => '510PNI', + 'hostcode' => 'A', + 'request_id' => 'f930d3dc6824c1f7230c5529dc37ae5e', + 'result_code' => '0', + ] + ); + } + + /** + * Call payflow gateway request and return response object + * @return \Magento\Framework\DataObject + */ + protected function execGatewayRequest() + { + $this->initStoreMock(); + $response = $this->getGatewayResponseObject(); + $this->gatewayMock->expects(static::once()) + ->method('postRequest') + ->with( + $this->isInstanceOf('Magento\Framework\DataObject'), + $this->isInstanceOf('Magento\Paypal\Model\PayflowConfig') + ) + ->willReturn($response); + return $response; + } + + /** + * Create mock object for payment model + * @return \PHPUnit_Framework_MockObject_MockObject + */ + protected function getPaymentMock() + { + $paymentMock = $this->getMockBuilder('Magento\Payment\Model\Info') + ->disableOriginalConstructor() + ->setMethods([ + 'getAdditionalInformation', 'getParentTransactionId', 'getOrder', + 'getCcNumber', 'getCcExpMonth', 'getCcExpYear', 'getCcCid' + ]) + ->getMock(); + + $cardData = [ + 'number' => 4111111111111111, + 'month' => 12, + 'year' => 18, + 'cvv' => 123 + ]; + $paymentMock->expects(static::once()) + ->method('getCcNumber') + ->willReturn($cardData['number']); + $paymentMock->expects(static::once()) + ->method('getCcExpMonth') + ->willReturn($cardData['month']); + $paymentMock->expects(static::once()) + ->method('getCcExpYear') + ->willReturn($cardData['year']); + $paymentMock->expects(static::once()) + ->method('getCcCid') + ->willReturn($cardData['cvv']); + return $paymentMock; + } + + /** + * Create mock object for order model + * @return \PHPUnit_Framework_MockObject_MockObject + */ + protected function getOrderMock() + { + $orderData = [ + 'currency' => 'USD', + 'id' => 4, + 'increment_id' => '0000004' + ]; + $orderMock = $this->getMockBuilder('Magento\Sales\Model\Order') + ->disableOriginalConstructor() + ->setMethods(['getBaseCurrencyCode', 'getIncrementId', 'getId', 'getBillingAddress', 'getShippingAddress']) + ->getMock(); + + $orderMock->expects(static::once()) + ->method('getId') + ->willReturn($orderData['id']); + $orderMock->expects(static::once()) + ->method('getBaseCurrencyCode') + ->willReturn($orderData['currency']); + $orderMock->expects(static::atLeastOnce()) + ->method('getIncrementId') + ->willReturn($orderData['increment_id']); + return $orderMock; + } } diff --git a/app/code/Magento/Paypal/Test/Unit/Model/ProTest.php b/app/code/Magento/Paypal/Test/Unit/Model/ProTest.php index 1594e4d49918f9c360ba94c3e55c0a6170e9303d..80c6b554d60c9abb9431579973a4d9a4130c0e7e 100644 --- a/app/code/Magento/Paypal/Test/Unit/Model/ProTest.php +++ b/app/code/Magento/Paypal/Test/Unit/Model/ProTest.php @@ -11,22 +11,37 @@ */ namespace Magento\Paypal\Test\Unit\Model; +use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; +use Magento\Paypal\Model\Config as PaypalConfig; + class ProTest extends \PHPUnit_Framework_TestCase { /** * @var \Magento\Paypal\Model\Pro */ - protected $_pro; + protected $pro; + /** @var \PHPUnit_Framework_MockObject_MockObject */ + protected $apiMock; protected function setUp() { - $objectHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this); + $objectHelper = new ObjectManager($this); + $infoFactory = $this->getInfoFactory(); + + $storeId = 33; + $configFactory = $this->getConfigFactory($storeId); + $apiFactory = $this->getApiFactory($objectHelper); $args = $objectHelper->getConstructArguments( 'Magento\Paypal\Model\Pro', - ['infoFactory' => $this->getMock('Magento\Paypal\Model\InfoFactory', ['create'], [], '', false)] + [ + 'configFactory' => $configFactory, + 'infoFactory' => $infoFactory, + 'apiFactory' => $apiFactory + ] ); /** @var $pro \Magento\Paypal\Model\Pro */ - $this->_pro = $this->getMock('Magento\Paypal\Model\Pro', ['_isPaymentReviewRequired'], $args); + $this->pro = $this->getMock('Magento\Paypal\Model\Pro', ['_isPaymentReviewRequired'], $args); + $this->pro->setMethod(PaypalConfig::METHOD_PAYMENT_PRO, $storeId); } /** @@ -37,7 +52,7 @@ class ProTest extends \PHPUnit_Framework_TestCase */ public function testCanReviewPayment($pendingReason, $isReviewRequired, $expected) { - $this->_pro->expects( + $this->pro->expects( $this->any() )->method( '_isPaymentReviewRequired' @@ -59,7 +74,7 @@ class ProTest extends \PHPUnit_Framework_TestCase $this->returnValue($pendingReason) ); - $this->assertEquals($expected, $this->_pro->canReviewPayment($payment)); + $this->assertEquals($expected, $this->pro->canReviewPayment($payment)); } /** @@ -74,4 +89,175 @@ class ProTest extends \PHPUnit_Framework_TestCase ['another_pending_reason', true, true] ]; } + + /** + * @covers \Magento\Paypal\Model\Pro::capture + */ + public function testCapture() + { + $paymentMock = $this->getPaymentMock(); + $orderMock = $this->getOrderMock(); + + $this->apiMock->expects(static::any()) + ->method('setAuthorizationId') + ->willReturnSelf(); + $this->apiMock->expects(static::any()) + ->method('setIsCaptureComplete') + ->willReturnSelf(); + $this->apiMock->expects(static::any()) + ->method('setAmount') + ->willReturnSelf(); + + $paymentMock->expects(static::once()) + ->method('getOrder') + ->willReturn($orderMock); + + $this->apiMock->expects(static::once()) + ->method('getTransactionId') + ->willReturn(45); + $this->apiMock->expects(static::any()) + ->method('getDataUsingMethod') + ->willReturn(false); + + $amount = 43.03; + $this->pro->capture($paymentMock, $amount); + } + + /** + * Create and return mock of info factory + * @return \PHPUnit_Framework_MockObject_MockObject + */ + protected function getInfoFactory() + { + $infoFactory = $this->getMockBuilder('Magento\Paypal\Model\InfoFactory') + ->disableOriginalConstructor() + ->setMethods(['create']) + ->getMock(); + $infoMock = $this->getMockBuilder('Magento\Paypal\Model\Info') + ->disableOriginalConstructor() + ->setMethods(['isPaymentReviewRequired']) + ->getMock(); + $infoFactory->expects(static::any())->method('create')->willReturn($infoMock); + return $infoFactory; + } + + /** + * Create and return mock of config factory + * @param $storeId + * @return \PHPUnit_Framework_MockObject_MockObject + */ + protected function getConfigFactory($storeId) + { + $configType = 'Magento\Paypal\Model\Config'; + $configMock = $this->getMockBuilder($configType) + ->disableOriginalConstructor() + ->getMock(); + $configFactory = $this->getMockBuilder('Magento\Paypal\Model\Config\Factory') + ->disableOriginalConstructor() + ->setMethods(['create']) + ->getMock(); + + $configFactory->expects(static::any()) + ->method('create') + ->with($configType, ['params' => [ + PaypalConfig::METHOD_PAYMENT_PRO, + $storeId + ]]) + ->willReturn($configMock); + return $configFactory; + } + + /** + * Create mock object for paypal api factory + * @param ObjectManager $objectHelper + * @return \PHPUnit_Framework_MockObject_MockObject + */ + protected function getApiFactory(ObjectManager $objectHelper) + { + $apiFactory = $this->getMockBuilder('Magento\Paypal\Model\Api\Type\Factory') + ->disableOriginalConstructor() + ->setMethods(['create']) + ->getMock(); + + $httpClient = $this->getMockBuilder('Magento\Framework\HTTP\Adapter\Curl') + ->disableOriginalConstructor() + ->getMock(); + + $httpClient->expects(static::any()) + ->method('read') + ->will(static::returnValue( + "\r\n" . 'ACK=Success&CORRELATIONID=32342431' + )); + + $curlFactory = $this->getMockBuilder('Magento\Framework\HTTP\Adapter\CurlFactory') + ->disableOriginalConstructor() + ->setMethods(['create']) + ->getMock(); + $curlFactory->expects(static::any())->method('create')->willReturn($httpClient); + + $apiType = 'Magento\Paypal\Model\Api\Nvp'; + $args = $objectHelper->getConstructArguments( + $apiType, + [ + 'curlFactory' => $curlFactory + ] + ); + $this->apiMock = $this->getMockBuilder($apiType) + ->setConstructorArgs($args) + ->setMethods(['__wakeup', 'getTransactionId', 'getDataUsingMethod']) + ->getMock(); + + $apiFactory->expects(static::any())->method('create')->with($apiType)->willReturn($this->apiMock); + return $apiFactory; + } + + /** + * Create mock object for payment model + * @return \PHPUnit_Framework_MockObject_MockObject + */ + protected function getPaymentMock() + { + $paymentMock = $this->getMockBuilder('Magento\Payment\Model\Info') + ->disableOriginalConstructor() + ->setMethods([ + 'getParentTransactionId', 'getOrder', 'getShouldCloseParentTransaction' + ]) + ->getMock(); + $parentTransactionId = 43; + $paymentMock->expects(static::once()) + ->method('getParentTransactionId') + ->willReturn($parentTransactionId); + $paymentMock->expects(static::once()) + ->method('getShouldCloseParentTransaction') + ->willReturn(true); + return $paymentMock; + } + + /** + * Create mock object for order model + * @return \PHPUnit_Framework_MockObject_MockObject + */ + protected function getOrderMock() + { + $orderData = [ + 'currency' => 'USD', + 'id' => 4, + 'increment_id' => '0000004' + ]; + $orderMock = $this->getMockBuilder('Magento\Sales\Model\Order') + ->disableOriginalConstructor() + ->setMethods(['getBaseCurrencyCode', 'getIncrementId', 'getId', 'getBillingAddress', 'getShippingAddress']) + ->getMock(); + + $orderMock->expects(static::once()) + ->method('getId') + ->willReturn($orderData['id']); + $orderMock->expects(static::once()) + ->method('getBaseCurrencyCode') + ->willReturn($orderData['currency']); + $orderMock->expects(static::atLeastOnce()) + ->method('getIncrementId') + ->willReturn($orderData['increment_id']); + return $orderMock; + } } diff --git a/app/code/Magento/Paypal/etc/adminhtml/events.xml b/app/code/Magento/Paypal/etc/adminhtml/events.xml index 729d5132f4fbe662402907223503dd777f43d53e..6ec1f45899949316c65c353aff35a47746752bba 100644 --- a/app/code/Magento/Paypal/etc/adminhtml/events.xml +++ b/app/code/Magento/Paypal/etc/adminhtml/events.xml @@ -7,6 +7,6 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="payment_method_is_active"> - <observer name="sales_billing_agreement" instance="Magento\Paypal\Observer\RestrictAdminBillingAgreementUsageObserver" method="execute" /> + <observer name="sales_billing_agreement" instance="Magento\Paypal\Observer\RestrictAdminBillingAgreementUsageObserver" /> </event> </config> diff --git a/app/code/Magento/Paypal/etc/events.xml b/app/code/Magento/Paypal/etc/events.xml index 275fd93635b29d576ba7c6b87090f1be87f5f0ff..2babfea17384514fba591d1e2ff1d6f62f6751a9 100644 --- a/app/code/Magento/Paypal/etc/events.xml +++ b/app/code/Magento/Paypal/etc/events.xml @@ -7,9 +7,9 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="sales_order_payment_place_end"> - <observer name="paypal" instance="Magento\Paypal\Observer\AddBillingAgreementToSessionObserver" method="execute"/> + <observer name="paypal" instance="Magento\Paypal\Observer\AddBillingAgreementToSessionObserver"/> </event> <event name="sales_order_payment_transaction_html_txn_id"> - <observer name="paypal_transaction_html" instance="Magento\Paypal\Observer\HtmlTransactionIdObserver" method="execute"/> + <observer name="paypal_transaction_html" instance="Magento\Paypal\Observer\HtmlTransactionIdObserver"/> </event> </config> diff --git a/app/code/Magento/Paypal/etc/frontend/di.xml b/app/code/Magento/Paypal/etc/frontend/di.xml index 71408dd33e5328a469257fd220acde5b35d11cef..daa08fcf1dc9d1fbf668559317131b3b1d45ddfd 100644 --- a/app/code/Magento/Paypal/etc/frontend/di.xml +++ b/app/code/Magento/Paypal/etc/frontend/di.xml @@ -16,6 +16,11 @@ <argument name="storage" xsi:type="object">Magento\Paypal\Model\Session\Storage</argument> </arguments> </virtualType> + <type name="Magento\Paypal\Controller\Express\AbstractExpress"> + <arguments> + <argument name="paypalSession" xsi:type="object">Magento\Paypal\Model\Session</argument> + </arguments> + </type> <virtualType name="Magento\Paypal\Model\PayflowSession\Storage" type="Magento\Framework\Session\Storage"> <arguments> <argument name="namespace" xsi:type="string">paypal_payflow</argument> diff --git a/app/code/Magento/Paypal/etc/frontend/events.xml b/app/code/Magento/Paypal/etc/frontend/events.xml index f6787521fa95ed1c859fae85a674c8576cd0d73c..6f72ab58b7c9480855e6aa0324712f68281c25eb 100644 --- a/app/code/Magento/Paypal/etc/frontend/events.xml +++ b/app/code/Magento/Paypal/etc/frontend/events.xml @@ -7,12 +7,12 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="checkout_submit_all_after"> - <observer name="hss_save_order_after_submit" instance="Magento\Paypal\Observer\SaveOrderAfterSubmitObserver" method="execute"/> + <observer name="hss_save_order_after_submit" instance="Magento\Paypal\Observer\SaveOrderAfterSubmitObserver"/> </event> <event name="checkout_controller_onepage_saveOrder"> - <observer name="hss_save_order_onepage" instance="Magento\Paypal\Observer\SetResponseAfterSaveOrderObserver" method="execute"/> + <observer name="hss_save_order_onepage" instance="Magento\Paypal\Observer\SetResponseAfterSaveOrderObserver"/> </event> <event name="shortcut_buttons_container"> - <observer name="paypal_shortcuts" instance="Magento\Paypal\Observer\AddPaypalShortcutsObserver" method="execute"/> + <observer name="paypal_shortcuts" instance="Magento\Paypal\Observer\AddPaypalShortcutsObserver"/> </event> </config> diff --git a/app/code/Magento/Paypal/i18n/de_DE.csv b/app/code/Magento/Paypal/i18n/de_DE.csv index 30521e4faab8aa30c9275c109ae75726636f1858..9688d3237dbcb9b284509178b4417c72dc7fb63b 100644 --- a/app/code/Magento/Paypal/i18n/de_DE.csv +++ b/app/code/Magento/Paypal/i18n/de_DE.csv @@ -71,7 +71,7 @@ Authorization,Bewilligung "IPN ""%1""","IPN ""%1""" "Billing Agreements",Rechnungsvereinbarungen "Reference ID","Reference ID" -"Billing Agreement #%1","Billing Agreement #%1" +"Billing Agreement # ","Billing Agreement # " "Related Orders","Related Orders" "Billing Agreement View","Rechnungsvereinbarung Ansicht" "View Transaction Details","Überweisungsdetails zeigen" @@ -105,7 +105,6 @@ Help,Hilfe "We found nothing to fetch because of an empty configuration.","We found nothing to fetch because of an empty configuration." "We fetched %1 report rows from '%2@%3'.","We fetched %1 report rows from '%2@%3'." "We couldn't fetch reports from '%1@%2'.","We couldn't fetch reports from '%1@%2'." -"Billing Agreement # %1","Billing Agreement # %1" "We couldn't start the billing agreement wizard.","We couldn't start the billing agreement wizard." "The billing agreement ""%1"" has been created.","The billing agreement ""%1"" has been created." "We couldn't finish the billing agreement wizard.","We couldn't finish the billing agreement wizard." @@ -372,7 +371,9 @@ Funding,Finanzierung "Created At","Created At" "Updated At","Updated At" "-- Please Select Billing Agreement--","-- Bitte wählen Sie Rechnungsvereinbarung --" -"Not sure what PayPal payment method to use? Click <a href=""%1"" target=""_blank"">here</a> to learn more.","Not sure what PayPal payment method to use? Click <a href=""%1"" target=""_blank"">here</a> to learn more." +"Not sure what PayPal payment method to use? Click ","Not sure what PayPal payment method to use? Click " +"here","here" +" to learn more."," to learn more." "Important: ","Important: " "To use PayPal Payments Advanced, you must configure your PayPal Payments Advanced account on the PayPal website.","To use PayPal Payments Advanced, you must configure your PayPal Payments Advanced account on the PayPal website." "Once you log into your PayPal Advanced account, navigate to the Service Settings - Hosted Checkout Pages - Set Up menu and set the options described below","Once you log into your PayPal Advanced account, navigate to the Service Settings - Hosted Checkout Pages - Set Up menu and set the options described below" @@ -390,7 +391,7 @@ Updated:,Updated: "New Billing Agreement","Neue Abrechnungsvereinbarung" "You will be redirected to the payment system website.","You will be redirected to the payment system website." Create...,Create... -"Your billing agreement # is: %1.","Your billing agreement # is: %1." +"Your billing agreement # is: ","Your billing agreement # is: " "Review Order","Auftrag überprüfen" "Please select a shipping method...","Bitte wählen Sie eine Versandart aus..." "Update Shipping Method","Update Shipping Method" diff --git a/app/code/Magento/Paypal/i18n/en_US.csv b/app/code/Magento/Paypal/i18n/en_US.csv index 07e1965fc14abaf2b0003beb75636e3576fe6c38..b1b45cb9cc9669803a10ec7754acd1a29e960760 100644 --- a/app/code/Magento/Paypal/i18n/en_US.csv +++ b/app/code/Magento/Paypal/i18n/en_US.csv @@ -71,7 +71,7 @@ Authorization,Authorization "IPN ""%1""","IPN ""%1""" "Billing Agreements","Billing Agreements" "Reference ID","Reference ID" -"Billing Agreement #%1","Billing Agreement #%1" +"Billing Agreement # ","Billing Agreement # " "Related Orders","Related Orders" "Billing Agreement View","Billing Agreement View" "View Transaction Details","View Transaction Details" @@ -105,7 +105,6 @@ Help,Help "We found nothing to fetch because of an empty configuration.","We found nothing to fetch because of an empty configuration." "We fetched %1 report rows from '%2@%3'.","We fetched %1 report rows from '%2@%3'." "We couldn't fetch reports from '%1@%2'.","We couldn't fetch reports from '%1@%2'." -"Billing Agreement # %1","Billing Agreement # %1" "We couldn't start the billing agreement wizard.","We couldn't start the billing agreement wizard." "The billing agreement ""%1"" has been created.","The billing agreement ""%1"" has been created." "We couldn't finish the billing agreement wizard.","We couldn't finish the billing agreement wizard." @@ -372,7 +371,9 @@ Funding,Funding "Created At","Created At" "Updated At","Updated At" "-- Please Select Billing Agreement--","-- Please Select Billing Agreement--" -"Not sure what PayPal payment method to use? Click <a href=""%1"" target=""_blank"">here</a> to learn more.","Not sure what PayPal payment method to use? Click <a href=""%1"" target=""_blank"">here</a> to learn more." +"Not sure what PayPal payment method to use? Click ","Not sure what PayPal payment method to use? Click " +"here","here" +" to learn more."," to learn more." "Important: ","Important: " "To use PayPal Payments Advanced, you must configure your PayPal Payments Advanced account on the PayPal website.","To use PayPal Payments Advanced, you must configure your PayPal Payments Advanced account on the PayPal website." "Once you log into your PayPal Advanced account, navigate to the Service Settings - Hosted Checkout Pages - Set Up menu and set the options described below","Once you log into your PayPal Advanced account, navigate to the Service Settings - Hosted Checkout Pages - Set Up menu and set the options described below" @@ -390,7 +391,7 @@ Updated:,Updated: "New Billing Agreement","New Billing Agreement" "You will be redirected to the payment system website.","You will be redirected to the payment system website." Create...,Create... -"Your billing agreement # is: %1.","Your billing agreement # is: %1." +"Your billing agreement # is: ","Your billing agreement # is: " "Review Order","Review Order" "Please select a shipping method...","Please select a shipping method..." "Update Shipping Method","Update Shipping Method" diff --git a/app/code/Magento/Paypal/i18n/es_ES.csv b/app/code/Magento/Paypal/i18n/es_ES.csv index 91831caaef9a7c531e807c660c5a2e4b73be4937..a6c03fb513331022d51cd211b7d73edcee7f7129 100644 --- a/app/code/Magento/Paypal/i18n/es_ES.csv +++ b/app/code/Magento/Paypal/i18n/es_ES.csv @@ -71,7 +71,7 @@ Authorization,Autorización "IPN ""%1""","IPN ""%1""" "Billing Agreements","Contratos de facturación" "Reference ID","Reference ID" -"Billing Agreement #%1","Billing Agreement #%1" +"Billing Agreement # ","Billing Agreement # " "Related Orders","Related Orders" "Billing Agreement View","Ver contrato de facturación" "View Transaction Details","Ver Detalles de la Transacción" @@ -105,7 +105,6 @@ Help,Ayuda "We found nothing to fetch because of an empty configuration.","We found nothing to fetch because of an empty configuration." "We fetched %1 report rows from '%2@%3'.","We fetched %1 report rows from '%2@%3'." "We couldn't fetch reports from '%1@%2'.","We couldn't fetch reports from '%1@%2'." -"Billing Agreement # %1","Billing Agreement # %1" "We couldn't start the billing agreement wizard.","We couldn't start the billing agreement wizard." "The billing agreement ""%1"" has been created.","The billing agreement ""%1"" has been created." "We couldn't finish the billing agreement wizard.","We couldn't finish the billing agreement wizard." @@ -372,7 +371,9 @@ Funding,Fondos "Created At","Created At" "Updated At","Updated At" "-- Please Select Billing Agreement--","-- Por favor, Seleccione el Acuerdo de Facturación--" -"Not sure what PayPal payment method to use? Click <a href=""%1"" target=""_blank"">here</a> to learn more.","Not sure what PayPal payment method to use? Click <a href=""%1"" target=""_blank"">here</a> to learn more." +"Not sure what PayPal payment method to use? Click ","Not sure what PayPal payment method to use? Click " +"here","here" +" to learn more."," to learn more." "Important: ","Important: " "To use PayPal Payments Advanced, you must configure your PayPal Payments Advanced account on the PayPal website.","To use PayPal Payments Advanced, you must configure your PayPal Payments Advanced account on the PayPal website." "Once you log into your PayPal Advanced account, navigate to the Service Settings - Hosted Checkout Pages - Set Up menu and set the options described below","Once you log into your PayPal Advanced account, navigate to the Service Settings - Hosted Checkout Pages - Set Up menu and set the options described below" @@ -390,7 +391,7 @@ Updated:,Updated: "New Billing Agreement","Nuevo Acuerdo de Facturación" "You will be redirected to the payment system website.","You will be redirected to the payment system website." Create...,Create... -"Your billing agreement # is: %1.","Your billing agreement # is: %1." +"Your billing agreement # is: ","Your billing agreement # is: " "Review Order","Revise su pedido" "Please select a shipping method...","Por favor, elija un método de envÃo..." "Update Shipping Method","Update Shipping Method" diff --git a/app/code/Magento/Paypal/i18n/fr_FR.csv b/app/code/Magento/Paypal/i18n/fr_FR.csv index bc5f0caafdb0393c77086fab281eb770e8811931..2db5be340c65baf6eebfada5516e1c72600d5c7a 100644 --- a/app/code/Magento/Paypal/i18n/fr_FR.csv +++ b/app/code/Magento/Paypal/i18n/fr_FR.csv @@ -71,7 +71,7 @@ Authorization,Autorisation "IPN ""%1""","IPN ""%1""" "Billing Agreements","Accords de facturation" "Reference ID","Reference ID" -"Billing Agreement #%1","Billing Agreement #%1" +"Billing Agreement # ","Billing Agreement # " "Related Orders","Related Orders" "Billing Agreement View","Voir l'accord de facturation" "View Transaction Details","Voir les détails de la transction" @@ -105,7 +105,6 @@ Help,Aide "We found nothing to fetch because of an empty configuration.","We found nothing to fetch because of an empty configuration." "We fetched %1 report rows from '%2@%3'.","We fetched %1 report rows from '%2@%3'." "We couldn't fetch reports from '%1@%2'.","We couldn't fetch reports from '%1@%2'." -"Billing Agreement # %1","Billing Agreement # %1" "We couldn't start the billing agreement wizard.","We couldn't start the billing agreement wizard." "The billing agreement ""%1"" has been created.","The billing agreement ""%1"" has been created." "We couldn't finish the billing agreement wizard.","We couldn't finish the billing agreement wizard." @@ -372,7 +371,9 @@ Funding,Fonds "Created At","Created At" "Updated At","Updated At" "-- Please Select Billing Agreement--","-- Veuillez sélectionner un accord de facturation--" -"Not sure what PayPal payment method to use? Click <a href=""%1"" target=""_blank"">here</a> to learn more.","Not sure what PayPal payment method to use? Click <a href=""%1"" target=""_blank"">here</a> to learn more." +"Not sure what PayPal payment method to use? Click ","Not sure what PayPal payment method to use? Click " +"here","here" +" to learn more."," to learn more." "Important: ","Important: " "To use PayPal Payments Advanced, you must configure your PayPal Payments Advanced account on the PayPal website.","To use PayPal Payments Advanced, you must configure your PayPal Payments Advanced account on the PayPal website." "Once you log into your PayPal Advanced account, navigate to the Service Settings - Hosted Checkout Pages - Set Up menu and set the options described below","Once you log into your PayPal Advanced account, navigate to the Service Settings - Hosted Checkout Pages - Set Up menu and set the options described below" @@ -390,7 +391,7 @@ Updated:,Updated: "New Billing Agreement","Nouvel Accord de Facturation" "You will be redirected to the payment system website.","You will be redirected to the payment system website." Create...,Create... -"Your billing agreement # is: %1.","Your billing agreement # is: %1." +"Your billing agreement # is: ","Your billing agreement # is: " "Review Order","Vérification de la commande" "Please select a shipping method...","Veuillez sélectionner un mode d'expédition..." "Update Shipping Method","Update Shipping Method" diff --git a/app/code/Magento/Paypal/i18n/nl_NL.csv b/app/code/Magento/Paypal/i18n/nl_NL.csv index d14bfcc045a5f08f0cc4ba4341eee3ded6f1b055..6121c7d1ba940a30e8e2aa8ed4930ca55441c6c8 100644 --- a/app/code/Magento/Paypal/i18n/nl_NL.csv +++ b/app/code/Magento/Paypal/i18n/nl_NL.csv @@ -71,7 +71,7 @@ Authorization,Autorisatie "IPN ""%1""","IPN ""%1""" "Billing Agreements","Facturering Overeenkomsten" "Reference ID","Reference ID" -"Billing Agreement #%1","Billing Agreement #%1" +"Billing Agreement # ","Billing Agreement # " "Related Orders","Related Orders" "Billing Agreement View","Factureringsovereenkomst Beeld" "View Transaction Details","Bekijk Transactie Details" @@ -105,7 +105,6 @@ Help,Help "We found nothing to fetch because of an empty configuration.","We found nothing to fetch because of an empty configuration." "We fetched %1 report rows from '%2@%3'.","We fetched %1 report rows from '%2@%3'." "We couldn't fetch reports from '%1@%2'.","We couldn't fetch reports from '%1@%2'." -"Billing Agreement # %1","Billing Agreement # %1" "We couldn't start the billing agreement wizard.","We couldn't start the billing agreement wizard." "The billing agreement ""%1"" has been created.","The billing agreement ""%1"" has been created." "We couldn't finish the billing agreement wizard.","We couldn't finish the billing agreement wizard." @@ -372,7 +371,9 @@ Funding,Financiering "Created At","Created At" "Updated At","Updated At" "-- Please Select Billing Agreement--","-- Selecteer a.u.b. rekeningovereenkomst --" -"Not sure what PayPal payment method to use? Click <a href=""%1"" target=""_blank"">here</a> to learn more.","Not sure what PayPal payment method to use? Click <a href=""%1"" target=""_blank"">here</a> to learn more." +"Not sure what PayPal payment method to use? Click ","Not sure what PayPal payment method to use? Click " +"here","here" +" to learn more."," to learn more." "Important: ","Important: " "To use PayPal Payments Advanced, you must configure your PayPal Payments Advanced account on the PayPal website.","To use PayPal Payments Advanced, you must configure your PayPal Payments Advanced account on the PayPal website." "Once you log into your PayPal Advanced account, navigate to the Service Settings - Hosted Checkout Pages - Set Up menu and set the options described below","Once you log into your PayPal Advanced account, navigate to the Service Settings - Hosted Checkout Pages - Set Up menu and set the options described below" @@ -390,7 +391,7 @@ Updated:,Updated: "New Billing Agreement","Nieuwe factuurovereenkomst" "You will be redirected to the payment system website.","You will be redirected to the payment system website." Create...,Create... -"Your billing agreement # is: %1.","Your billing agreement # is: %1." +"Your billing agreement # is: ","Your billing agreement # is: " "Review Order","Overzicht van de bestelling" "Please select a shipping method...","Selecteer een methode van verzending..." "Update Shipping Method","Update Shipping Method" diff --git a/app/code/Magento/Paypal/i18n/pt_BR.csv b/app/code/Magento/Paypal/i18n/pt_BR.csv index a9ebf9134b7b1cf3307e36b2262ee394878f40a9..22bccf0d19376283f1af7a46835cc08d00784ad5 100644 --- a/app/code/Magento/Paypal/i18n/pt_BR.csv +++ b/app/code/Magento/Paypal/i18n/pt_BR.csv @@ -71,7 +71,7 @@ Authorization,Autorização "IPN ""%1""","IPN ""%1""" "Billing Agreements","Contratos de faturamento" "Reference ID","Reference ID" -"Billing Agreement #%1","Billing Agreement #%1" +"Billing Agreement # ","Billing Agreement # " "Related Orders","Related Orders" "Billing Agreement View","Visualização de Contrato de Faturamento" "View Transaction Details","Visualizar Detalhes da Transação." @@ -105,7 +105,6 @@ Help,Ajuda "We found nothing to fetch because of an empty configuration.","We found nothing to fetch because of an empty configuration." "We fetched %1 report rows from '%2@%3'.","We fetched %1 report rows from '%2@%3'." "We couldn't fetch reports from '%1@%2'.","We couldn't fetch reports from '%1@%2'." -"Billing Agreement # %1","Billing Agreement # %1" "We couldn't start the billing agreement wizard.","We couldn't start the billing agreement wizard." "The billing agreement ""%1"" has been created.","The billing agreement ""%1"" has been created." "We couldn't finish the billing agreement wizard.","We couldn't finish the billing agreement wizard." @@ -372,7 +371,9 @@ Funding,Financiamento "Created At","Created At" "Updated At","Updated At" "-- Please Select Billing Agreement--","-- Por Favor, Escolha o Acordo de Cobrança--" -"Not sure what PayPal payment method to use? Click <a href=""%1"" target=""_blank"">here</a> to learn more.","Not sure what PayPal payment method to use? Click <a href=""%1"" target=""_blank"">here</a> to learn more." +"Not sure what PayPal payment method to use? Click ","Not sure what PayPal payment method to use? Click " +"here","here" +" to learn more."," to learn more." "Important: ","Important: " "To use PayPal Payments Advanced, you must configure your PayPal Payments Advanced account on the PayPal website.","To use PayPal Payments Advanced, you must configure your PayPal Payments Advanced account on the PayPal website." "Once you log into your PayPal Advanced account, navigate to the Service Settings - Hosted Checkout Pages - Set Up menu and set the options described below","Once you log into your PayPal Advanced account, navigate to the Service Settings - Hosted Checkout Pages - Set Up menu and set the options described below" @@ -390,7 +391,7 @@ Updated:,Updated: "New Billing Agreement","Novo Contrato de Faturamento" "You will be redirected to the payment system website.","You will be redirected to the payment system website." Create...,Create... -"Your billing agreement # is: %1.","Your billing agreement # is: %1." +"Your billing agreement # is: ","Your billing agreement # is: " "Review Order","Analisar o pedido" "Please select a shipping method...","Por favor selecione um método de envio..." "Update Shipping Method","Update Shipping Method" diff --git a/app/code/Magento/Paypal/i18n/zh_Hans_CN.csv b/app/code/Magento/Paypal/i18n/zh_Hans_CN.csv index a3bbde6b8771bfd59b1db17340253baa77e6b399..3533b127b1023ba943f9695db6e7db5ac2656b07 100644 --- a/app/code/Magento/Paypal/i18n/zh_Hans_CN.csv +++ b/app/code/Magento/Paypal/i18n/zh_Hans_CN.csv @@ -71,7 +71,7 @@ Authorization,æŽˆæƒ "IPN ""%1""","IPN ""%1""" "Billing Agreements",è®°è´¦åè®® "Reference ID","Reference ID" -"Billing Agreement #%1","Billing Agreement #%1" +"Billing Agreement # ","Billing Agreement # " "Related Orders","Related Orders" "Billing Agreement View",è®°è´¦å议视图 "View Transaction Details",查看交易详情 @@ -105,7 +105,6 @@ Help,帮助 "We found nothing to fetch because of an empty configuration.","We found nothing to fetch because of an empty configuration." "We fetched %1 report rows from '%2@%3'.","We fetched %1 report rows from '%2@%3'." "We couldn't fetch reports from '%1@%2'.","We couldn't fetch reports from '%1@%2'." -"Billing Agreement # %1","Billing Agreement # %1" "We couldn't start the billing agreement wizard.","We couldn't start the billing agreement wizard." "The billing agreement ""%1"" has been created.","The billing agreement ""%1"" has been created." "We couldn't finish the billing agreement wizard.","We couldn't finish the billing agreement wizard." @@ -372,7 +371,9 @@ Funding,退款 "Created At","Created At" "Updated At","Updated At" "-- Please Select Billing Agreement--","-- 请选择记账åè®® --" -"Not sure what PayPal payment method to use? Click <a href=""%1"" target=""_blank"">here</a> to learn more.","Not sure what PayPal payment method to use? Click <a href=""%1"" target=""_blank"">here</a> to learn more." +"Not sure what PayPal payment method to use? Click ","Not sure what PayPal payment method to use? Click " +"here","here" +" to learn more."," to learn more." "Important: ","Important: " "To use PayPal Payments Advanced, you must configure your PayPal Payments Advanced account on the PayPal website.","To use PayPal Payments Advanced, you must configure your PayPal Payments Advanced account on the PayPal website." "Once you log into your PayPal Advanced account, navigate to the Service Settings - Hosted Checkout Pages - Set Up menu and set the options described below","Once you log into your PayPal Advanced account, navigate to the Service Settings - Hosted Checkout Pages - Set Up menu and set the options described below" @@ -390,7 +391,7 @@ Updated:,Updated: "New Billing Agreement",新建记账åè®® "You will be redirected to the payment system website.","You will be redirected to the payment system website." Create...,Create... -"Your billing agreement # is: %1.","Your billing agreement # is: %1." +"Your billing agreement # is: ","Your billing agreement # is: " "Review Order",æŸ¥çœ‹è®¢å• "Please select a shipping method...",请选择é€è´§æ–¹æ³•... "Update Shipping Method","Update Shipping Method" diff --git a/app/code/Magento/Paypal/view/adminhtml/templates/billing/agreement/form.phtml b/app/code/Magento/Paypal/view/adminhtml/templates/billing/agreement/form.phtml index 6be6500df521f5885e99f3a1183889364cc6489b..0d933a861b54182146e34358253ac033072f4c28 100644 --- a/app/code/Magento/Paypal/view/adminhtml/templates/billing/agreement/form.phtml +++ b/app/code/Magento/Paypal/view/adminhtml/templates/billing/agreement/form.phtml @@ -5,21 +5,24 @@ */ // @codingStandardsIgnoreFile - +/** @var \Magento\Paypal\Block\Adminhtml\Billing\Agreement\View\Form $block */ ?> -<?php $_code = $block->getMethodCode() ?> -<fieldset class="form-list" id="payment_form_<?php /* @escapeNotVerified */ echo $_code ?>" style="display:none;"> +<?php $code = $block->getMethodCode() ?> +<fieldset class="form-list" id="payment_form_<?php /* @noEscape */ echo $code; ?>" style="display:none;"> <div class="admin__field _required"> - <label for="<?php /* @escapeNotVerified */ echo $_code ?>_ba_agreement_id" - class="admin__field-label"><span><?php /* @escapeNotVerified */ echo __('Billing Agreement') ?></span></label> + <label for="<?php /* @noEscape */ echo $code; ?>_ba_agreement_id" class="admin__field-label"> + <span><?php echo $block->escapeHtml(__('Billing Agreement')); ?></span> + </label> <div class="admin__field-control"> - <select id="<?php /* @escapeNotVerified */ echo $_code ?>_ba_agreement_id" - name="payment[<?php /* @escapeNotVerified */ echo $block->getTransportBAId(); ?>]" + <select id="<?php /* @noEscape */ echo $code; ?>_ba_agreement_id" + name="payment[<?php echo $block->escapeHtml($block->getTransportBAId()); ?>]" class="required-entry admin__control-select"> - <option value=""><?php /* @escapeNotVerified */ echo __('Please Select') ?></option> + <option value=""><?php echo $block->escapeHtml(__('Please Select')); ?></option> <?php foreach ($block->getBillingAgreements() as $id => $referenceId): ?> - <option value="<?php /* @escapeNotVerified */ echo $id ?>"><?php echo $block->escapeHtml($referenceId) ?></option> - <?php endforeach ?> + <option value="<?php echo $block->escapeHtml($id); ?>"> + <?php echo $block->escapeHtml($referenceId); ?> + </option> + <?php endforeach; ?> </select> </div> </div> diff --git a/app/code/Magento/Paypal/view/adminhtml/templates/billing/agreement/view/tab/info.phtml b/app/code/Magento/Paypal/view/adminhtml/templates/billing/agreement/view/tab/info.phtml index d4dabc5a81fd0f9af9890c610b4c8460591985b7..c5888b2728ae72302c1ed31d30852fd7b71b7a9a 100644 --- a/app/code/Magento/Paypal/view/adminhtml/templates/billing/agreement/view/tab/info.phtml +++ b/app/code/Magento/Paypal/view/adminhtml/templates/billing/agreement/view/tab/info.phtml @@ -3,37 +3,38 @@ * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ +/** @var \Magento\Paypal\Block\Adminhtml\Billing\Agreement\View\Tab\Info $block */ ?> <section class="admin__page-section"> <div class="admin__page-section-title"> - <span class="title"><?php /* @escapeNotVerified */ echo __('General Information'); ?></span> + <span class="title"><?php echo $block->escapeHtml(__('General Information')); ?></span> </div> <div class="admin__page-section-content log-details"> <table class="data-table admin__table-secondary order-billing-agreement-table"> <tbody> <tr> - <th><?php /* @escapeNotVerified */ echo __('Reference ID'); ?></th> - <td><?php echo $block->escapeHtml($block->getReferenceId()) ?></td> + <th><?php echo $block->escapeHtml(__('Reference ID')); ?></th> + <td><?php echo $block->escapeHtml($block->getReferenceId()); ?></td> </tr> <tr> - <th><?php /* @escapeNotVerified */ echo __('Customer'); ?></th> + <th><?php echo $block->escapeHtml(__('Customer')); ?></th> <td> - <a href="<?php /* @escapeNotVerified */ echo $block->getCustomerUrl(); ?>"> - <?php /* @escapeNotVerified */ echo $block->getCustomerEmail() ?> + <a href="<?php echo $block->escapeUrl($block->getCustomerUrl()); ?>"> + <?php echo $block->escapeHtml($block->getCustomerEmail()); ?> </a> </td> </tr> <tr> - <th><?php /* @escapeNotVerified */ echo __('Status'); ?></th> - <td><?php /* @escapeNotVerified */ echo $block->getStatus() ?></td> + <th><?php echo $block->escapeHtml(__('Status')); ?></th> + <td><?php echo $block->escapeHtml($block->getStatus()); ?></td> </tr> <tr> - <th><?php /* @escapeNotVerified */ echo __('Created At'); ?></th> - <td><?php /* @escapeNotVerified */ echo $block->getCreatedAt(); ?></td> + <th><?php echo $block->escapeHtml(__('Created At')); ?></th> + <td><?php echo $block->escapeHtml($block->getCreatedAt()); ?></td> </tr> <tr> - <th><?php /* @escapeNotVerified */ echo __('Updated At'); ?></th> - <td><?php /* @escapeNotVerified */ echo $block->getUpdatedAt(); ?></td> + <th><?php echo $block->escapeHtml(__('Updated At')); ?></th> + <td><?php echo $block->escapeHtml($block->getUpdatedAt()); ?></td> </tr> </tbody> </table> diff --git a/app/code/Magento/Paypal/view/adminhtml/templates/payment/form/billing/agreement.phtml b/app/code/Magento/Paypal/view/adminhtml/templates/payment/form/billing/agreement.phtml index dea408fd816b96b50e0ba46f18776580725a86f7..d3a6bab129806819191d864a6dde2c60c952703f 100644 --- a/app/code/Magento/Paypal/view/adminhtml/templates/payment/form/billing/agreement.phtml +++ b/app/code/Magento/Paypal/view/adminhtml/templates/payment/form/billing/agreement.phtml @@ -5,23 +5,29 @@ */ // @codingStandardsIgnoreFile - +/* @var $block \Magento\Paypal\Block\Payment\Form\Billing\Agreement */ ?> -<?php /* @var $block \Magento\Paypal\Block\Payment\Form\Billing\Agreement */?> -<?php $_code = $block->getMethodCode() ?> -<fieldset class="admin__fieldset payment-method form-list" id="payment_form_<?php /* @escapeNotVerified */ echo $_code ?>" style="display:none;"> +<?php $code = $block->getMethodCode() ?> +<fieldset class="admin__fieldset payment-method form-list" + id="payment_form_<?php /* @noEscape */ echo $code; ?>" style="display:none;"> <div class="admin__field _required"> <label class="admin__field-label" - for="<?php /* @escapeNotVerified */ echo $_code ?>_ba_agreement_id"><span><?php /* @escapeNotVerified */ echo __('Billing Agreement') ?></span></label> + for="<?php /* @noEscape */ echo $code; ?>_ba_agreement_id"> + <span><?php echo $block->escapeHtml(__('Billing Agreement')); ?></span> + </label> <div class="admin__field-control"> - <select id="<?php /* @escapeNotVerified */ echo $_code ?>_ba_agreement_id" - name="payment[<?php /* @escapeNotVerified */ echo $block->getTransportName(); ?>]" + <select id="<?php /* @noEscape */ echo $code; ?>_ba_agreement_id" + name="payment[<?php echo $block->escapeHtml($block->getTransportName()); ?>]" class="required-entry admin__control-select"> - <option value=""><?php /* @escapeNotVerified */ echo __('Please Select') ?></option> + <option value=""><?php echo $block->escapeHtml(__('Please Select')); ?></option> <?php foreach ($block->getBillingAgreements() as $id => $referenceId): ?> - <option - value="<?php /* @escapeNotVerified */ echo $id ?>"<?php echo ($id == $block->getInfoData($block->getTransportName())) ? ' selected="selected"' : '' ?>><?php echo $block->escapeHtml($referenceId) ?></option> - <?php endforeach ?> + <option value="<?php echo $block->escapeHtml($id); ?>" + <?php echo ($id == $block->getInfoData($block->getTransportName())) ? + ' selected="selected"' : ''; + ?>> + <?php echo $block->escapeHtml($referenceId); ?> + </option> + <?php endforeach; ?> </select> </div> </div> diff --git a/app/code/Magento/Paypal/view/adminhtml/templates/system/config/api_wizard.phtml b/app/code/Magento/Paypal/view/adminhtml/templates/system/config/api_wizard.phtml index 9472de6106deac7cc4b6feb9f46edfe2767b9397..3f729e92cbf740f2ac5a3b5019d09cbb16dc9de4 100644 --- a/app/code/Magento/Paypal/view/adminhtml/templates/system/config/api_wizard.phtml +++ b/app/code/Magento/Paypal/view/adminhtml/templates/system/config/api_wizard.phtml @@ -4,19 +4,28 @@ * See COPYING.txt for license details. */ -// @codingStandardsIgnoreFile - -?> -<?php /** * @see \Magento\Paypal\Block\Adminhtml\System\Config\ApiWizard + * @var \Magento\Paypal\Block\Adminhtml\System\Config\ApiWizard $block */ ?> <div class="pp-buttons-container"> - <button onclick="javascript:window.open('<?php /* @escapeNotVerified */ echo $block->getButtonUrl()?>', 'apiwizard','toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, ,left=100, top=100, width=380, height=470'); return false;" class="scalable" type="button" id="<?php echo $block->getHtmlId() ?>"> + <button onclick="javascript:window.open( + '<?php echo $block->escapeUrl($block->getButtonUrl()); ?>', + 'apiwizard', + 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, ,' + + 'left=100, top=100, width=380, height=470' + ); return false;" + class="scalable" type="button" id="<?php echo $block->escapeHtml($block->getHtmlId()); ?>"> <span><span><span><?php echo $block->escapeHtml($block->getButtonLabel()); ?></span></span></span> </button> - <button onclick="javascript:window.open('<?php /* @escapeNotVerified */ echo $block->getSandboxButtonUrl()?>', 'apiwizard','toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, ,left=100, top=100, width=380, height=470'); return false;" class="scalable" type="button" id="<?php echo $block->getSandboxHtmlId() ?>"> + <button onclick="javascript:window.open( + '<?php echo $block->escapeUrl($block->getSandboxButtonUrl()); ?>', + 'apiwizard', + 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, ,' + + 'left=100, top=100, width=380, height=470' + ); return false;" + class="scalable" type="button" id="<?php echo $block->escapeHtml($block->getSandboxHtmlId()); ?>"> <span><span><span><?php echo $block->escapeHtml($block->getSandboxButtonLabel()); ?></span></span></span> </button> </div> diff --git a/app/code/Magento/Paypal/view/adminhtml/templates/system/config/bml_api_wizard.phtml b/app/code/Magento/Paypal/view/adminhtml/templates/system/config/bml_api_wizard.phtml index 0c986674244239a08c2b7c5a0ddaa68950a6b942..11b8fc9508271e1797968c00993df866adea8824 100644 --- a/app/code/Magento/Paypal/view/adminhtml/templates/system/config/bml_api_wizard.phtml +++ b/app/code/Magento/Paypal/view/adminhtml/templates/system/config/bml_api_wizard.phtml @@ -4,16 +4,19 @@ * See COPYING.txt for license details. */ -// @codingStandardsIgnoreFile - - ?> -<?php /** * @see \Magento\Paypal\Block\Adminhtml\System\Config\BmlApiWizard + * @var \Magento\Paypal\Block\Adminhtml\System\Config\BmlApiWizard $block */ ?> <div class="pp-buttons-container"> - <button onclick="javascript:window.open('<?php /* @escapeNotVerified */ echo $block->getButtonUrl()?>', 'bmlapiwizard','toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, ,left=100, top=100, width=550, height=550'); return false;" class="scalable" type="button" id="<?php echo $block->getHtmlId() ?>"> + <button onclick="javascript:window.open( + '<?php echo $block->escapeUrl($block->getButtonUrl()); ?>', + 'bmlapiwizard', + 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, ,' + + 'left=100, top=100, width=550, height=550' + ); return false;" + class="scalable" type="button" id="<?php echo $block->escapeHtml($block->getHtmlId()); ?>"> <span><span><span><?php echo $block->escapeHtml($block->getButtonLabel()); ?></span></span></span> </button> </div> diff --git a/app/code/Magento/Paypal/view/adminhtml/templates/system/config/fieldset/hint.phtml b/app/code/Magento/Paypal/view/adminhtml/templates/system/config/fieldset/hint.phtml index 53da2d2720ed7b6d57e935d464d51cb7269a3406..afc93a0a8ff8c9c9135ede826f180c22e5a11809 100644 --- a/app/code/Magento/Paypal/view/adminhtml/templates/system/config/fieldset/hint.phtml +++ b/app/code/Magento/Paypal/view/adminhtml/templates/system/config/fieldset/hint.phtml @@ -5,21 +5,23 @@ */ // @codingStandardsIgnoreFile - -?> -<?php /** * @see \Magento\Paypal\Block\System\Config\Fieldset\Hint + * @var \Magento\Paypal\Block\Adminhtml\System\Config\Fieldset\Hint $block */ +$helpLink = $block->escapeUrl($block->getHelpLink()); ?> <?php - if ($block->getHelpLink()): +if ($helpLink): ?> -<div class="paypal-payment-notice"> - <?php /* @escapeNotVerified */ echo __('Not sure what PayPal payment method to use? Click <a href="%1" target="_blank">here</a> to learn more.', $block->getHelpLink()); ?> -</div> + <div class="paypal-payment-notice"> + <?php echo $block->escapeHtml(__('Not sure what PayPal payment method to use? Click ')); ?> + <a href="<?php /* @noEscape */ + echo $helpLink; ?>" target="_blank"><?php echo $block->escapeHtml(__('here')); ?></a> + <?php echo $block->escapeHtml(__(' to learn more.')); ?> + </div> <?php - endif; +endif; ?> <script> require(['jquery', 'prototype'], function(jQuery){ diff --git a/app/code/Magento/Paypal/view/adminhtml/templates/system/config/payflowlink/advanced.phtml b/app/code/Magento/Paypal/view/adminhtml/templates/system/config/payflowlink/advanced.phtml index 839899ea73dfd3c9c90a8322578edb545946b09d..a874c96b267be0ef4fed466e07b5a6b7b74dc62a 100644 --- a/app/code/Magento/Paypal/view/adminhtml/templates/system/config/payflowlink/advanced.phtml +++ b/app/code/Magento/Paypal/view/adminhtml/templates/system/config/payflowlink/advanced.phtml @@ -5,16 +5,15 @@ */ // @codingStandardsIgnoreFile - /* * @var $block \Magento\Paypal\Block\Adminhtml\System\Config\Payflowlink\Advanced */ ?> <div class="payflow-settings-notice"> <p> - <strong class="important-label"><?php /* @escapeNotVerified */ echo __('Important: ') ?></strong> - <?php /* @escapeNotVerified */ echo __('To use PayPal Payments Advanced, you must configure your PayPal Payments Advanced account on the PayPal website.'); ?> - <?php /* @escapeNotVerified */ echo __('Once you log into your PayPal Advanced account, navigate to the Service Settings - Hosted Checkout Pages - Set Up menu and set the options described below') ?> + <strong class="important-label"><?php echo $block->escapeHtml(__('Important: ')); ?></strong> + <?php echo $block->escapeHtml(__('To use PayPal Payments Advanced, you must configure your PayPal Payments Advanced account on the PayPal website.')); ?> + <?php echo $block->escapeHtml(__('Once you log into your PayPal Advanced account, navigate to the Service Settings - Hosted Checkout Pages - Set Up menu and set the options described below')); ?> </p> <ul class="options-list"> <li><strong>AVS:</strong> No</li> diff --git a/app/code/Magento/Paypal/view/adminhtml/templates/system/config/payflowlink/info.phtml b/app/code/Magento/Paypal/view/adminhtml/templates/system/config/payflowlink/info.phtml index 10724969c353b375d300bdc7d8bd8e1ccbdf8b92..86e435fa800df925340b8414a137988172baa514 100644 --- a/app/code/Magento/Paypal/view/adminhtml/templates/system/config/payflowlink/info.phtml +++ b/app/code/Magento/Paypal/view/adminhtml/templates/system/config/payflowlink/info.phtml @@ -5,17 +5,16 @@ */ // @codingStandardsIgnoreFile - -?> -<?php /** * @see \Magento\Paypal\Block\Adminhtml\System\Config\Payflowlink\Info + * @var \Magento\Paypal\Block\Adminhtml\System\Config\Payflowlink\Info $block */ + ?> <div class="payflow-settings-notice"> - <strong class="important-label"><?php /* @escapeNotVerified */ echo __('Important: ') ?></strong> - <?php /* @escapeNotVerified */ echo __('To use PayPal Payflow Link, you must configure your PayPal Payflow Link account on the PayPal website.'); ?> - <?php /* @escapeNotVerified */ echo __('Once you log into your PayPal Payflow Link account, navigate to the Service Settings - Hosted Checkout Pages - Set Up menu and set the options described below') ?> + <strong class="important-label"><?php echo $block->escapeHtml(__('Important: ')); ?></strong> + <?php echo $block->escapeHtml(__('To use PayPal Payflow Link, you must configure your PayPal Payflow Link account on the PayPal website.')); ?> + <?php echo $block->escapeHtml(__('Once you log into your PayPal Payflow Link account, navigate to the Service Settings - Hosted Checkout Pages - Set Up menu and set the options described below')); ?> <ul class="options-list"> <li><strong>AVS:</strong> No</li> <li><strong>CSC:</strong> No</li> diff --git a/app/code/Magento/Paypal/view/adminhtml/templates/system/config/rules.phtml b/app/code/Magento/Paypal/view/adminhtml/templates/system/config/rules.phtml index 3f4f8b3c123554409c5409e55314be881d403705..6abfb6ed06237c9664334655e6cb2c5f4ed8b1d3 100644 --- a/app/code/Magento/Paypal/view/adminhtml/templates/system/config/rules.phtml +++ b/app/code/Magento/Paypal/view/adminhtml/templates/system/config/rules.phtml @@ -14,6 +14,6 @@ "Magento_Paypal/js/solutions", "domReady!" ], function (Solutions) { - var solutions = new Solutions({config: {solutions: <?php /* @escapeNotVerified */ echo $block->getJson(); ?>}}); + var solutions = new Solutions({config: {solutions: <?php /* @noEscape */ echo $block->getJson(); ?>}}); }); </script> diff --git a/app/code/Magento/Paypal/view/adminhtml/web/js/rule.js b/app/code/Magento/Paypal/view/adminhtml/web/js/rule.js index 0c49932d489a22e0d5e64274221ebc29ea949bd4..b565aa2d66d6b46c2165650567b06fe440291b4e 100644 --- a/app/code/Magento/Paypal/view/adminhtml/web/js/rule.js +++ b/app/code/Magento/Paypal/view/adminhtml/web/js/rule.js @@ -3,7 +3,7 @@ * See COPYING.txt for license details. */ define([ - "Magento_Ui/js/lib/class", + "uiClass", "underscore" ], function (Class, _) { "use strict"; diff --git a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/conflict.js b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/conflict.js index 98c79243d483266581e0d52bc1d1041fc9b4ce7a..4d94f6a2a9ff63cdb9195b4bbdaf012f98ec4cf7 100644 --- a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/conflict.js +++ b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/conflict.js @@ -4,7 +4,9 @@ */ (function() { var executed = false; - define([], function () { + define([ + 'Magento_Ui/js/modal/alert' + ], function (alert) { "use strict"; return function ($target, $owner, data) { if ($owner.find(data.enableButton).val() == 1) { @@ -22,11 +24,11 @@ if (!isDisabled && !executed) { executed = true; - alert( - "The following error(s) occured:\n\r" - + "Some PayPal solutions conflict.\n\r" - + "Please re-enable the previously enabled payment solutions." - ); + alert({ + content: "The following error(s) occured:\n\r" + +"Some PayPal solutions conflict.\n\r" + +"Please re-enable the previously enabled payment solutions." + }); } } }; diff --git a/app/code/Magento/Paypal/view/adminhtml/web/js/solution.js b/app/code/Magento/Paypal/view/adminhtml/web/js/solution.js index 3ff36adf61426bbbd23d77fbe559d22c581d82d9..787d9e066cdbe0234bb434f57d39919d00639181 100644 --- a/app/code/Magento/Paypal/view/adminhtml/web/js/solution.js +++ b/app/code/Magento/Paypal/view/adminhtml/web/js/solution.js @@ -4,7 +4,7 @@ */ define([ "jquery", - "Magento_Ui/js/lib/class", + "uiClass", "Magento_Paypal/js/rule", "mageUtils", "underscore" diff --git a/app/code/Magento/Paypal/view/adminhtml/web/js/solutions.js b/app/code/Magento/Paypal/view/adminhtml/web/js/solutions.js index fc688c2da2a2c84d20663d3a82a784253f1a2d34..b1e124aca387a556069a776721a90d0c529db62a 100644 --- a/app/code/Magento/Paypal/view/adminhtml/web/js/solutions.js +++ b/app/code/Magento/Paypal/view/adminhtml/web/js/solutions.js @@ -4,7 +4,7 @@ */ define([ "jquery", - "Magento_Ui/js/lib/class", + "uiClass", "Magento_Paypal/js/solution", "underscore" ], function ($, Class, Solution, _) { diff --git a/app/code/Magento/Paypal/view/frontend/templates/billing/agreement/view.phtml b/app/code/Magento/Paypal/view/frontend/templates/billing/agreement/view.phtml index 1723df964402960ffc741d73446beb237310bf5b..c026c3fca5e1f8fe7fbcb4a266d1267fe89d9f0b 100644 --- a/app/code/Magento/Paypal/view/frontend/templates/billing/agreement/view.phtml +++ b/app/code/Magento/Paypal/view/frontend/templates/billing/agreement/view.phtml @@ -5,100 +5,133 @@ */ // @codingStandardsIgnoreFile - +/** + * @var \Magento\Paypal\Block\Billing\Agreement\View $block + */ +$relatedOrders = $block->getRelatedOrders(); ?> -<?php /* @var $block \Magento\Paypal\Block\Billing\Agreement\View */ ?> - <div class="block block-billing-agreements-view"> - <div class="block-title"> - <strong><?php echo __('Billing Agreement # %1', $block->escapeHtml($block->getReferenceId())) ?></strong> - <?php if ($block->getCanCancel()): ?> - <button type="button" title="<?php /* @escapeNotVerified */ echo __('Cancel') ?>" class="secondary action cancel" onclick="if( confirm('<?php /* @escapeNotVerified */ echo __('Are you sure you want to do this?') ?>') ) { window.location.href = '<?php /* @escapeNotVerified */ echo $block->getCancelUrl() ?>'; } return false;"> - <span><?php /* @escapeNotVerified */ echo __('Cancel') ?></span> - </button> - <?php endif; ?> - </div> - <div class="block-title"><strong><?php /* @escapeNotVerified */ echo __('Agreement Information') ?></strong></div> - <div class="block-content"> - <div class="table-wrapper billing-agreements-view"> - <table class="data table table-billing-agreements-view"> - <caption class="table-caption"><?php /* @escapeNotVerified */ echo __('Agreement Information') ?></caption> - <thead> - <tr> - <th scope="col" class="col id"><?php /* @escapeNotVerified */ echo __('Reference ID:'); ?></th> - <th scope="col" class="col status"><?php /* @escapeNotVerified */ echo __('Status:'); ?></th> - <th scope="col" class="col created"><?php /* @escapeNotVerified */ echo __('Created:'); ?></th> - <?php if ($block->getAgreementUpdatedAt()): ?> - <th scope="col" class="col updated"><?php /* @escapeNotVerified */ echo __('Updated:'); ?></th> - <?php endif; ?> - <th scope="col" class="col payment"><?php /* @escapeNotVerified */ echo __('Payment Method:'); ?></th> - </tr> - </thead> - <tbody> - <tr> - <td data-th="<?php echo $block->escapeHtml(__('Reference ID:')); ?>" - class="col id"><?php echo $block->escapeHtml($block->getReferenceId()); ?></td> - <td data-th="<?php echo $block->escapeHtml(__('Status:')); ?>" - class="col status"><?php /* @escapeNotVerified */ echo $block->getAgreementStatus() ?></td> - <td data-th="<?php echo $block->escapeHtml(__('Created:')); ?>" - class="col created"><?php echo $block->escapeHtml($block->getAgreementCreatedAt()) ?></td> - <?php if ($block->getAgreementUpdatedAt()): ?> - <td data-th="<?php echo $block->escapeHtml(__('Updated:')); ?>" - class="col updated"><?php echo $block->escapeHtml($block->getAgreementUpdatedAt()); ?></td> - <?php endif; ?> - <td data-th="<?php echo $block->escapeHtml(__('Payment Method:')); ?>" - class="col payment"><?php /* @escapeNotVerified */ echo $block->getPaymentMethodTitle() ?></td> - </tr> - </tbody> - </table> - </div> +<div class="block block-billing-agreements-view"> + <div class="block-title"> + <strong> + <?php echo $block->escapeHtml(__('Billing Agreement # ')); ?> + <?php echo $block->escapeHtml($block->getReferenceId()); ?> + </strong> + <?php if ($block->getCanCancel()): ?> + <button type="button" title="<?php echo $block->escapeHtml(__('Cancel')); ?>" + class="secondary action cancel" onclick="if( confirm('<?php + echo $block->escapeHtml(__('Are you sure you want to do this?')); ?>') ) { window.location.href = '<?php + echo $block->escapeUrl($block->getCancelUrl()) ?>'; } return false;"> + <span><?php echo $block->escapeHtml(__('Cancel')); ?></span> + </button> + <?php endif; ?> + </div> + <div class="block-title"> + <strong><?php echo $block->escapeHtml(__('Agreement Information')); ?></strong> + </div> + <div class="block-content"> + <div class="table-wrapper billing-agreements-view"> + <table class="data table table-billing-agreements-view"> + <caption class="table-caption"><?php echo $block->escapeHtml(__('Agreement Information')); ?></caption> + <thead> + <tr> + <th scope="col" class="col id"><?php echo $block->escapeHtml(__('Reference ID:')); ?></th> + <th scope="col" class="col status"><?php echo $block->escapeHtml(__('Status:')); ?></th> + <th scope="col" class="col created"><?php echo $block->escapeHtml(__('Created:')); ?></th> + <?php if ($block->getAgreementUpdatedAt()): ?> + <th scope="col" class="col updated"><?php echo $block->escapeHtml(__('Updated:')); ?></th> + <?php endif; ?> + <th scope="col" class="col payment"><?php echo $block->escapeHtml(__('Payment Method:')); ?></th> + </tr> + </thead> + <tbody> + <tr> + <td data-th="<?php echo $block->escapeHtml(__('Reference ID:')); ?>" class="col id"> + <?php echo $block->escapeHtml($block->getReferenceId()); ?> + </td> + <td data-th="<?php echo $block->escapeHtml(__('Status:')); ?>" class="col status"> + <?php echo $block->escapeHtml($block->getAgreementStatus()); ?> + </td> + <td data-th="<?php echo $block->escapeHtml(__('Created:')); ?>" class="col created"> + <?php echo $block->escapeHtml($block->getAgreementCreatedAt()); ?> + </td> + <?php if ($block->getAgreementUpdatedAt()): ?> + <td data-th="<?php echo $block->escapeHtml(__('Updated:')); ?>" class="col updated"> + <?php echo $block->escapeHtml($block->getAgreementUpdatedAt()); ?> + </td> + <?php endif; ?> + <td data-th="<?php echo $block->escapeHtml(__('Payment Method:')); ?>" class="col payment"> + <?php echo $block->escapeHtml($block->getPaymentMethodTitle()); ?> + </td> + </tr> + </tbody> + </table> </div> </div> - <?php $relatedOrders = $block->getRelatedOrders() ?> - <?php if (count($relatedOrders) > 0): ?> +</div> +<?php if (count($relatedOrders) > 0): ?> <div class="block block-billing-orders-view"> - <?php echo $block->getChildHtml('pager'); ?> - <div class="block-title"><span><?php /* @escapeNotVerified */ echo __('Related Orders') ?></span></div> + <?php echo $block->getChildHtml('pager'); ?> + <div class="block-title"> + <span><?php echo $block->escapeHtml(__('Related Orders')); ?></span> + </div> <div class="block-content"> <div class="table-wrapper billing-agreements-related"> <table class="data table table-billing-agreements-related" id="related-orders-table"> - <caption class="table-caption"><?php /* @escapeNotVerified */ echo __('Related Orders') ?></caption> + <caption class="table-caption"><?php echo $block->escapeHtml(__('Related Orders')) ?></caption> <thead> - <tr> - <th scope="col" class="col id"><?php /* @escapeNotVerified */ echo __('Order #') ?></th> - <th scope="col" class="col date"><?php /* @escapeNotVerified */ echo __('Date') ?></th> - <th scope="col" class="col shipto"><?php /* @escapeNotVerified */ echo __('Ship To') ?></th> - <th scope="col" class="col total"><?php /* @escapeNotVerified */ echo __('Order Total') ?></th> - <th scope="col" class="col status"><?php /* @escapeNotVerified */ echo __('Order Status') ?></th> - <th scope="col" class="col actions"> </th> - </tr> + <tr> + <th scope="col" class="col id"><?php echo $block->escapeHtml(__('Order #')); ?></th> + <th scope="col" class="col date"><?php echo $block->escapeHtml(__('Date')); ?></th> + <th scope="col" class="col shipto"><?php echo $block->escapeHtml(__('Ship To')); ?></th> + <th scope="col" class="col total"><?php echo $block->escapeHtml(__('Order Total')); ?></th> + <th scope="col" class="col status"><?php echo $block->escapeHtml(__('Order Status')); ?></th> + <th scope="col" class="col actions"> </th> + </tr> </thead> <tbody> - <?php foreach ($relatedOrders as $order): ?> - <tr> - <td data-th="<?php echo $block->escapeHtml(__('Order #')); ?>" - class="col id"><?php /* @escapeNotVerified */ echo $block->getOrderItemValue($order, 'order_increment_id') ?></td> - <td data-th="<?php echo $block->escapeHtml(__('Date')); ?>" - class="col date"><?php /* @escapeNotVerified */ echo $block->getOrderItemValue($order, 'created_at') ?></td> - <td data-th="<?php echo $block->escapeHtml(__('Ship To')); ?>" - class="col shipto"><?php /* @escapeNotVerified */ echo $block->getOrderItemValue($order, 'shipping_address') ?></td> - <td data-th="<?php echo $block->escapeHtml(__('Order Total')); ?>" - class="col total"><?php /* @escapeNotVerified */ echo $block->getOrderItemValue($order, 'order_total') ?></td> - <td data-th="<?php echo $block->escapeHtml(__('Order Status')); ?>" - class="col status"><?php /* @escapeNotVerified */ echo $block->getOrderItemValue($order, 'status_label') ?></td> - <td data-th="" class="col actions"> - <a href="<?php /* @escapeNotVerified */ echo $block->getOrderItemValue($order, 'view_url') ?>" class="action view"><span><?php /* @escapeNotVerified */ echo __('View Order') ?></span></a> - </td> - </tr> - <?php endforeach; ?> + <?php foreach ($relatedOrders as $order): ?> + <tr> + <td data-th="<?php echo $block->escapeHtml(__('Order #')); ?>" class="col id"> + <?php echo $block->escapeHtml($block->getOrderItemValue( + $order, 'order_increment_id' + )); ?> + </td> + <td data-th="<?php echo $block->escapeHtml(__('Date')); ?>" class="col date"> + <?php echo $block->escapeHtml($block->getOrderItemValue($order, 'created_at')); ?> + </td> + <td data-th="<?php echo $block->escapeHtml(__('Ship To')); ?>" class="col shipto"> + <?php echo $block->escapeHtml($block->getOrderItemValue( + $order, 'shipping_address' + )); ?> + </td> + <td data-th="<?php echo $block->escapeHtml(__('Order Total')); ?>" class="col total"> + <?php echo $block->escapeHtml($block->getOrderItemValue($order, 'order_total')); ?> + </td> + <td data-th="<?php echo $block->escapeHtml(__('Order Status')); ?>" class="col status"> + <?php echo $block->escapeHtml($block->getOrderItemValue( + $order, 'status_label' + )); ?> + </td> + <td data-th="" class="col actions"> + <a href="<?php echo $block->escapeUrl($block->getOrderItemValue( + $order, 'view_url' + )); ?>" class="action view"> + <span><?php echo $block->escapeHtml(__('View Order')); ?></span> + </a> + </td> + </tr> + <?php endforeach; ?> </tbody> </table> </div> </div> </div> - <?php endif; ?> +<?php endif; ?> - <div class="actions-toolbar"> - <div class="secondary"> - <a href="<?php /* @escapeNotVerified */ echo $block->getBackUrl() ?>" class="action back"><?php /* @escapeNotVerified */ echo __('Back to Billing Agreements') ?></a> - </div> +<div class="actions-toolbar"> + <div class="secondary"> + <a href="<?php echo $block->escapeUrl($block->getBackUrl()); ?>" class="action back"> + <?php echo $block->escapeHtml(__('Back to Billing Agreements')); ?> + </a> </div> +</div> diff --git a/app/code/Magento/Paypal/view/frontend/templates/billing/agreements.phtml b/app/code/Magento/Paypal/view/frontend/templates/billing/agreements.phtml index 47034fd2a055e4451bdcead3647e9583bae733a8..c82412e37011e45cea5d721a26b31ad66e4384a4 100644 --- a/app/code/Magento/Paypal/view/frontend/templates/billing/agreements.phtml +++ b/app/code/Magento/Paypal/view/frontend/templates/billing/agreements.phtml @@ -5,60 +5,84 @@ */ // @codingStandardsIgnoreFile +/** + * @var \Magento\Paypal\Block\Billing\Agreements $block + */ +$billingAgreements = $block->getBillingAgreements(); +$paymentMethods = $block->getWizardPaymentMethodOptions(); ?> -<?php /* @var $block \Magento\Paypal\Block\Billing\Agreements */ ?> <div class="account-billing-agreements"> - <?php $billingAgreements = $block->getBillingAgreements(); ?> <?php if (count($billingAgreements) > 0): ?> <?php echo $block->getChildHtml('pager'); ?> <div class="table-wrapper billing-agreements"> <table id="billing-agreements" class="data table table-billing-agreements"> - <caption class="table-caption"><?php /* @escapeNotVerified */ echo __('Billing Agreements') ?></caption> + <caption class="table-caption"><?php echo $block->escapeHtml(__('Billing Agreements')); ?></caption> <thead> <tr> - <th scope="col" class="col id"><?php /* @escapeNotVerified */ echo __('Reference ID'); ?></th> - <th scope="col" class="col status"><?php /* @escapeNotVerified */ echo __('Status'); ?></th> - <th scope="col" class="col created"><?php /* @escapeNotVerified */ echo __('Created At'); ?></th> - <th scope="col" class="col updated"><?php /* @escapeNotVerified */ echo __('Updated At'); ?></th> - <th scope="col" class="col payment"><?php /* @escapeNotVerified */ echo __('Payment Method'); ?></th> + <th scope="col" class="col id"><?php echo $block->escapeHtml(__('Reference ID')); ?></th> + <th scope="col" class="col status"><?php echo $block->escapeHtml(__('Status')); ?></th> + <th scope="col" class="col created"><?php echo $block->escapeHtml(__('Created At')); ?></th> + <th scope="col" class="col updated"><?php echo $block->escapeHtml(__('Updated At')); ?></th> + <th scope="col" class="col payment"><?php echo $block->escapeHtml(__('Payment Method')); ?></th> <th scope="col" class="col actions"> </th> </tr> </thead> <tbody> - <?php foreach ($billingAgreements as $item): ?> - <tr> - <td data-th="<?php echo $block->escapeHtml(__('Reference ID')); ?>" class="col id"><?php /* @escapeNotVerified */ echo $block->getItemValue($item, 'reference_id') ?></td> - <td data-th="<?php echo $block->escapeHtml(__('Status')); ?>" class="col status"><?php /* @escapeNotVerified */ echo $block->getItemValue($item, 'status') ?></td> - <td data-th="<?php echo $block->escapeHtml(__('Created At')); ?>" class="col created"><?php /* @escapeNotVerified */ echo $block->getItemValue($item, 'created_at') ?></td> - <td data-th="<?php echo $block->escapeHtml(__('Updated At')); ?>" class="col updated"><?php /* @escapeNotVerified */ echo $block->getItemValue($item, 'updated_at') ?></td> - <td data-th="<?php echo $block->escapeHtml(__('Payment Method')); ?>" class="col payment"><?php /* @escapeNotVerified */ echo $block->getItemValue($item, 'payment_method_label') ?></td> - <td data-th="" class="col actions"> - <a href="<?php /* @escapeNotVerified */ echo $block->getItemValue($item, 'edit_url') ?>" class="action view"><span><?php /* @escapeNotVerified */ echo __('View') ?></span></a> - </td> - </tr> - <?php endforeach; ?> + <?php foreach ($billingAgreements as $item): ?> + <tr> + <td data-th="<?php echo $block->escapeHtml(__('Reference ID')); ?>" class="col id"> + <?php echo $block->escapeHtml($block->getItemValue($item, 'reference_id')); ?> + </td> + <td data-th="<?php echo $block->escapeHtml(__('Status')); ?>" class="col status"> + <?php echo $block->escapeHtml($block->getItemValue($item, 'status')); ?> + </td> + <td data-th="<?php echo $block->escapeHtml(__('Created At')); ?>" class="col created"> + <?php echo $block->escapeHtml($block->getItemValue($item, 'created_at')); ?> + </td> + <td data-th="<?php echo $block->escapeHtml(__('Updated At')); ?>" class="col updated"> + <?php echo $block->escapeHtml($block->getItemValue($item, 'updated_at')); ?> + </td> + <td data-th="<?php echo $block->escapeHtml(__('Payment Method')); ?>" class="col payment"> + <?php echo $block->escapeHtml($block->getItemValue($item, 'payment_method_label')); ?> + </td> + <td data-th="" class="col actions"> + <a href="<?php echo $block->escapeUrl($block->getItemValue($item, 'edit_url')); ?>" + class="action view"> + <span><?php echo $block->escapeHtml(__('View')); ?></span> + </a> + </td> + </tr> + <?php endforeach; ?> </tbody> </table> </div> <?php else: ?> - <div class="message info empty"><span><?php /* @escapeNotVerified */ echo __('There are no billing agreements yet.') ?></span></div> + <div class="message info empty"> + <span><?php echo $block->escapeHtml(__('There are no billing agreements yet.')); ?></span> + </div> <?php endif; ?> - <?php $paymentMethods = $block->getWizardPaymentMethodOptions() ?> <?php if ($paymentMethods): ?> - <form action="<?php /* @escapeNotVerified */ echo $block->getCreateUrl() ?>" method="post" class="form form-new-agreement"> + <form action="<?php echo $block->escapeUrl($block->getCreateUrl()); ?>" method="post" + class="form form-new-agreement"> <fieldset class="fieldset"> - <legend class="legend"><span><?php /* @escapeNotVerified */ echo __('New Billing Agreement') ?></span></legend> + <legend class="legend"> + <span><?php echo $block->escapeHtml(__('New Billing Agreement')); ?></span> + </legend> <br /> - <p class="note"><?php /* @escapeNotVerified */ echo __('You will be redirected to the payment system website.') ?></p> + <p class="note"> + <?php echo $block->escapeHtml(__('You will be redirected to the payment system website.')); ?> + </p> <div class="field payment method"> <div class="control"> <select id="payment_method" name="payment_method"> - <option value=""><?php /* @escapeNotVerified */ echo __('-- Please Select --') ?></option> + <option value=""><?php echo $block->escapeHtml(__('-- Please Select --'));?></option> <?php foreach ($paymentMethods as $code => $title): ?> - <option value="<?php /* @escapeNotVerified */ echo $code ?>"><?php /* @escapeNotVerified */ echo $title ?></option> + <option value="<?php echo $block->escapeHtml($code); ?>"> + <?php echo $block->escapeHtml($title); ?> + </option> <?php endforeach; ?> </select> </div> @@ -66,12 +90,13 @@ <div class="actions-toolbar"> <div class="primary"> <button type="submit" class="primary action create"> - <span><?php /* @escapeNotVerified */ echo __('Create...') ?></span> + <span><?php echo $block->escapeHtml(__('Create...')); ?></span> </button> </div> <div class="secondary"> - <a href="<?php echo $block->escapeHtml($block->getBackUrl()) ?>" - class="action back"><span><?php /* @escapeNotVerified */ echo __('Back') ?></span></a> + <a href="<?php echo $block->escapeUrl($block->getBackUrl()); ?>" class="action back"> + <span><?php echo $block->escapeHtml(__('Back')); ?></span> + </a> </div> </div> </fieldset> @@ -79,8 +104,9 @@ <?php else: ?> <div class="actions-toolbar"> <div class="secondary"> - <a href="<?php echo $block->escapeHtml($block->getBackUrl()) ?>" - class="action back"><span><?php /* @escapeNotVerified */ echo __('Back') ?></span></a> + <a href="<?php echo $block->escapeUrl($block->getBackUrl()); ?>" class="action back"> + <span><?php echo $block->escapeHtml(__('Back')); ?></span> + </a> </div> </div> <?php endif; ?> diff --git a/app/code/Magento/Paypal/view/frontend/templates/bml.phtml b/app/code/Magento/Paypal/view/frontend/templates/bml.phtml index 981c19c04dbdad9cc44d6f3654477e38de630b45..772ecfd6c6a856bf4c1cae504c57e1f1a80ca88e 100644 --- a/app/code/Magento/Paypal/view/frontend/templates/bml.phtml +++ b/app/code/Magento/Paypal/view/frontend/templates/bml.phtml @@ -4,7 +4,7 @@ * See COPYING.txt for license details. */ -// @codingStandardsIgnoreFile + ?> <?php @@ -13,7 +13,9 @@ */ ?> <div class="paypal-logo"> - <script data-pp-pubid="<?php echo $block->escapeHtml($block->getPublisherId()) ?>" data-pp-placementtype="<?php echo $block->escapeHtml($block->getSize()) ?>"> (function (d, t) { + <script data-pp-pubid="<?php echo $block->escapeHtml($block->getPublisherId()) ?>" + data-pp-placementtype="<?php echo $block->escapeHtml($block->getSize()) ?>" + > (function (d, t) { "use strict"; var s = d.getElementsByTagName(t)[0], n = d.createElement(t); n.src = "//paypal.adtag.where.com/merchant.js"; diff --git a/app/code/Magento/Paypal/view/frontend/templates/checkout/onepage/success/billing_agreement.phtml b/app/code/Magento/Paypal/view/frontend/templates/checkout/onepage/success/billing_agreement.phtml index 2163d12e0843d4456245d707dccdccf5954305c0..cdfb31348a4d125b38f494df770262bfdbab0d1b 100644 --- a/app/code/Magento/Paypal/view/frontend/templates/checkout/onepage/success/billing_agreement.phtml +++ b/app/code/Magento/Paypal/view/frontend/templates/checkout/onepage/success/billing_agreement.phtml @@ -4,8 +4,14 @@ * See COPYING.txt for license details. */ -// @codingStandardsIgnoreFile +/** + * @var \Magento\Paypal\Block\Checkout\Onepage\Success\BillingAgreement $block + */ ?> -<?php /* @var $block \Magento\Paypal\Block\Checkout\Onepage\Success\BillingAgreement */ ?> -<p><?php echo __('Your billing agreement # is: %1.', sprintf('<a href="%s">%s</a>', $block->escapeHtml($block->getAgreementUrl()), $block->escapeHtml($block->getAgreementRefId())))?></p> +<p> + <?php echo $block->escapeHtml(__('Your billing agreement # is: ')); ?> + <a href="<?php echo $block->escapeUrl($block->getAgreementUrl()); ?>"> + <?php echo $block->escapeHtml($block->getAgreementRefId()); ?> + </a>. +</p> diff --git a/app/code/Magento/Paypal/view/frontend/templates/express/review.phtml b/app/code/Magento/Paypal/view/frontend/templates/express/review.phtml index a5a69a77b99f302e465ce2c9da904e9509abc11a..892e8771da7dce8e89e43717a2cf0fbfd5f626da 100644 --- a/app/code/Magento/Paypal/view/frontend/templates/express/review.phtml +++ b/app/code/Magento/Paypal/view/frontend/templates/express/review.phtml @@ -5,19 +5,21 @@ */ // @codingStandardsIgnoreFile - -/** @var $block \Magento\Paypal\Block\Express\Review */ - +/** + * @var \Magento\Paypal\Block\Express\Review $block + */ ?> <div class="paypal-review view"> <div class="block block-order-details-view"> <div class="block-content"> <?php if ($block->getShippingAddress()): ?> <div class="box box-order-shipping-method"> - <strong class="box-title"><span><?php /* @escapeNotVerified */ echo __('Shipping Method') ?></span></strong> + <strong class="box-title"> + <span><?php echo $block->escapeHtml(__('Shipping Method')) ?></span> + </strong> <div class="box-content"> <form method="post" id="shipping-method-form" - action="<?php echo $block->escapeHtml($block->getShippingMethodSubmitUrl()) ?>" + action="<?php echo $block->escapeUrl($block->getShippingMethodSubmitUrl()); ?>" class="form"> <?php if ($block->getCanEditShippingMethod() || !$block->getCurrentShippingRate()): ?> <?php if ($groups = $block->getShippingRateGroups()): ?> @@ -25,17 +27,24 @@ <div class="field shipping required"> <select name="shipping_method" id="shipping-method" class="select"> <?php if (!$currentRate): ?> - <option value=""> - <?php /* @escapeNotVerified */ echo __('Please select a shipping method...') ?> - </option> + <option value=""><?php echo $block->escapeHtml(__( + 'Please select a shipping method...' + )); ?></option> <?php endif; ?> <?php foreach ($groups as $code => $rates): ?> - <optgroup - label="<?php echo $block->escapeHtml($block->getCarrierName($code)) ?>"> + <optgroup label="<?php echo $block->escapeHtml($block->getCarrierName( + $code + )); ?>"> <?php foreach ($rates as $rate): ?> - <option - value="<?php /* @escapeNotVerified */ echo $block->renderShippingRateValue($rate) ?>"<?php echo($currentRate === $rate) ? ' selected="selected"' : ''; ?>> - <?php /* @escapeNotVerified */ echo $block->renderShippingRateOption($rate) ?> + <option value="<?php echo $block->escapeHtml( + $block->renderShippingRateValue($rate) + ); ?>" + <?php echo($currentRate === $rate) ? + ' selected="selected"' : ''; + ?>> + <?php /* @noEscape */ echo + $block->renderShippingRateOption($rate); + ?> </option> <?php endforeach; ?> </optgroup> @@ -46,42 +55,59 @@ <div class="primary"> <button id="update-shipping-method-submit" type="submit" class="action update primary"> - <span><?php /* @escapeNotVerified */ echo __('Update Shipping Method') ?></span></button> + <span> + <?php echo $block->escapeHtml(__('Update Shipping Method')); ?> + </span> + </button> </div> </div> <?php else: ?> - <p><?php /* @escapeNotVerified */ echo __('Sorry, no quotes are available for this order right now.') ?></p> + <p> + <?php echo $block->escapeHtml(__( + 'Sorry, no quotes are available for this order right now.' + )); ?> + </p> <?php endif; ?> <?php else: ?> - <p><?php /* @escapeNotVerified */ echo $block->renderShippingRateOption($block->getCurrentShippingRate()) ?></p> + <p> + <?php /* @noEscape */ echo $block->renderShippingRateOption( + $block->getCurrentShippingRate() + ); ?> + </p> <?php endif; ?> </form> </div> </div> <div class="box box-order-shipping-address"> - <strong class="box-title"><span><?php /* @escapeNotVerified */ echo __('Shipping Address') ?></span></strong> + <strong class="box-title"> + <span><?php echo $block->escapeHtml(__('Shipping Address')); ?></span> + </strong> <div class="box-content"> - <address><?php /* @escapeNotVerified */ echo $block->renderAddress($block->getShippingAddress()) ?></address> + <address> + <?php /* @noEscape */ echo $block->renderAddress($block->getShippingAddress()); ?> + </address> </div> <?php if ($block->getCanEditShippingAddress()): ?> <div class="box-actions"> - <a href="<?php /* @escapeNotVerified */ echo $block->getEditUrl() ?>" - class="action edit"><span><?php /* @escapeNotVerified */ echo __('Edit') ?></span></a> + <a href="<?php echo $block->escapeUrl($block->getEditUrl()); ?>" class="action edit"> + <span><?php echo $block->escapeHtml(__('Edit')); ?></span> + </a> </div> <?php endif; ?> </div> <?php endif; ?> <div class="box box-order-billing-address"> - <strong class="box-title"><span><?php /* @escapeNotVerified */ echo __('Payment Method') ?></span></strong> + <strong class="box-title"><span><?php echo $block->escapeHtml(__('Payment Method')); ?></span></strong> <div class="box-content"> - <?php echo $block->escapeHtml($block->getPaymentMethodTitle()) ?><br> - <?php echo $block->escapeHtml($block->getEmail()) ?> <br> - <img src="https://www.paypalobjects.com/webstatic/en_US/i/buttons/pp-acceptance-medium.png" alt="<?php /* @escapeNotVerified */ echo __('Buy now with PayPal') ?>"/> + <?php echo $block->escapeHtml($block->getPaymentMethodTitle()); ?><br> + <?php echo $block->escapeHtml($block->getEmail()); ?> <br> + <img src="https://www.paypalobjects.com/webstatic/en_US/i/buttons/pp-acceptance-medium.png" + alt="<?php echo $block->escapeHtml(__('Buy now with PayPal')); ?>"/> </div> <?php if ($block->getEditUrl()): ?> <div class="box-actions"> - <a href="<?php /* @escapeNotVerified */ echo $block->getEditUrl() ?>" class="action edit"> - <span><?php /* @escapeNotVerified */ echo __('Edit Payment Information') ?></span> + <a href="<?php echo $block->escapeUrl($block->getEditUrl()); ?>" class="action edit"> + <span><?php echo $block->escapeHtml(__('Edit Payment Information')); ?></span> </a> </div> <?php endif ?> @@ -95,24 +121,31 @@ <div class="paypal-review-items"> <div class="paypal-review-title"> - <strong><?php /* @escapeNotVerified */ echo __('Items in Your Shopping Cart') ?></strong> - <a href="<?php /* @escapeNotVerified */ echo $block->getUrl('checkout/cart') ?>" - class="action edit"><span><?php /* @escapeNotVerified */ echo __('Edit Shopping Cart') ?></span></a> + <strong><?php echo $block->escapeHtml(__('Items in Your Shopping Cart')); ?></strong> + <a href="<?php echo $block->escapeUrl($block->getUrl('checkout/cart')); ?>" class="action edit"> + <span><?php echo $block->escapeHtml(__('Edit Shopping Cart')); ?></span> + </a> </div> <?php echo $block->getChildHtml('details') ?> - <form method="post" id="order-review-form" action="<?php /* @escapeNotVerified */ echo $block->getPlaceOrderUrl() ?>" class="form"> + <form method="post" id="order-review-form" action="<?php echo $block->escapeUrl($block->getPlaceOrderUrl()); ?>" + class="form"> <?php echo $block->getChildHtml('agreements'); ?> <div class="actions-toolbar" id="review-buttons-container"> <div class="primary"> - <button type="button" id="review-button" value="<?php /* @escapeNotVerified */ echo __('Place Order') ?>" - class="action checkout primary"><span><?php /* @escapeNotVerified */ echo __('Place Order') ?></span></button> - <button type="button" id="review-submit" value="<?php /* @escapeNotVerified */ echo __('Place Order') ?>" - class="action checkout primary"><span><?php /* @escapeNotVerified */ echo __('Place Order') ?></span></button> + <button type="button" id="review-button" class="action checkout primary" + value="<?php echo $block->escapeHtml(__('Place Order')); ?>"> + <span><?php echo $block->escapeHtml(__('Place Order')); ?></span> + </button> + <button type="button" id="review-submit" class="action checkout primary" + value="<?php echo $block->escapeHtml(__('Place Order')); ?>"> + <span><?php echo $block->escapeHtml(__('Place Order')); ?></span> + </button> </div> - <span class="please-wait load indicator" id="review-please-wait" style="display: none;" data-text="<?php /* @escapeNotVerified */ echo __('Submitting order information...') ?>"> - <span><?php /* @escapeNotVerified */ echo __('Submitting order information...') ?></span> + <span class="please-wait load indicator" id="review-please-wait" style="display: none;" + data-text="<?php echo $block->escapeHtml(__('Submitting order information...')); ?>"> + <span><?php echo $block->escapeHtml(__('Submitting order information...')); ?></span> </span> </div> </form> @@ -125,8 +158,8 @@ "orderReview": { "shippingSubmitFormSelector": "#shipping-method-form", "shippingSelector": "#shipping-method", - "shippingMethodUpdateUrl": "<?php echo $block->escapeHtml($block->getUpdateShippingMethodsUrl()) ?>", - "isAjax": <?php /* @escapeNotVerified */ echo $block->getUseAjax() ? 'true' : 'false' ?> + "shippingMethodUpdateUrl": "<?php echo $block->escapeUrl($block->getUpdateShippingMethodsUrl()) ?>", + "isAjax": <?php /* @noEscape */ echo $block->getUseAjax() ? 'true' : 'false' ?> } } } diff --git a/app/code/Magento/Paypal/view/frontend/templates/express/review/details.phtml b/app/code/Magento/Paypal/view/frontend/templates/express/review/details.phtml index b1347b28e98a6f7749861d92cd6f0053604a5381..50d46f547fa9008543f09d18691e1577a0929298 100644 --- a/app/code/Magento/Paypal/view/frontend/templates/express/review/details.phtml +++ b/app/code/Magento/Paypal/view/frontend/templates/express/review/details.phtml @@ -5,25 +5,25 @@ */ // @codingStandardsIgnoreFile - /** * @see \Magento\Paypal\Block\Express\Review\Details + * @var \Magento\Paypal\Block\Express\Review\Details $block */ ?> <div id="details-reload" class="table-wrapper order-items cart"> <table id="details-table" class="cart items data table table-paypal-review-items"> - <caption class="table-caption"><?php /* @escapeNotVerified */ echo __('Items in Your Shopping Cart') ?></caption> + <caption class="table-caption"><?php echo $block->escapeHtml(__('Items in Your Shopping Cart')); ?></caption> <thead> <tr> - <th class="col name" scope="col"><?php /* @escapeNotVerified */ echo __('Item') ?></th> - <th class="col price" scope="col"><?php /* @escapeNotVerified */ echo __('Price') ?></th> - <th class="col qty" scope="col"><?php /* @escapeNotVerified */ echo __('Qty') ?></th> - <th class="col subtotal" scope="col"><?php /* @escapeNotVerified */ echo __('Subtotal') ?></th> + <th class="col name" scope="col"><?php echo $block->escapeHtml(__('Item')); ?></th> + <th class="col price" scope="col"><?php echo $block->escapeHtml(__('Price')); ?></th> + <th class="col qty" scope="col"><?php echo $block->escapeHtml(__('Qty')); ?></th> + <th class="col subtotal" scope="col"><?php echo $block->escapeHtml(__('Subtotal')); ?></th> </tr> </thead> - <?php foreach ($block->getItems() as $_item): ?> - <?php echo $block->getItemHtml($_item) ?> - <?php endforeach ?> + <?php foreach ($block->getItems() as $item): ?> + <?php echo $block->getItemHtml($item) ?> + <?php endforeach ?> <tfoot> <?php echo $block->getChildHtml('totals'); ?> </tfoot> diff --git a/app/code/Magento/Paypal/view/frontend/templates/express/review/shipping/method.phtml b/app/code/Magento/Paypal/view/frontend/templates/express/review/shipping/method.phtml index 3757e741f3b73a77a463ae0eef61f9213dc722fa..909d0e1c762e851ec6d81f6f643e725bd8cb067c 100644 --- a/app/code/Magento/Paypal/view/frontend/templates/express/review/shipping/method.phtml +++ b/app/code/Magento/Paypal/view/frontend/templates/express/review/shipping/method.phtml @@ -5,7 +5,6 @@ */ // @codingStandardsIgnoreFile - /** @var $block \Magento\Paypal\Block\Express\Review */ ?> <div id="shipping-method-container"> @@ -14,27 +13,38 @@ <?php $currentRate = $block->getCurrentShippingRate(); ?> <select name="shipping_method" id="shipping_method" class="required-entry"> <?php if (!$currentRate): ?> - <option value=""><?php /* @escapeNotVerified */ echo __('Please select a shipping method...') ?></option> + <option value=""> + <?php echo $block->escapeHtml(__('Please select a shipping method...')); ?> + </option> <?php endif; ?> <?php foreach ($groups as $code => $rates): ?> <optgroup label="<?php echo $block->escapeHtml($block->getCarrierName($code)) ?>" style="font-style:normal;"> <?php foreach ($rates as $rate): ?> <option - value="<?php /* @escapeNotVerified */ echo $block->renderShippingRateValue($rate) ?>"<?php echo($currentRate === $rate) ? ' selected="selected"' : ''; ?>> - <?php /* @escapeNotVerified */ echo $block->renderShippingRateOption($rate) ?> + value="<?php echo $block->escapeHtml($block->renderShippingRateValue($rate)); ?>" + <?php echo($currentRate === $rate) ? ' selected="selected"' : ''; ?>> + <?php /* @noEscape */ echo $block->renderShippingRateOption($rate); ?> </option> <?php endforeach; ?> </optgroup> <?php endforeach; ?> </select> <?php else: ?> - <p><strong><?php /* @escapeNotVerified */ echo __('Sorry, no quotes are available for this order right now.') ?></strong></p> + <p> + <strong> + <?php echo $block->escapeHtml(__('Sorry, no quotes are available for this order right now.')); ?> + </strong> + </p> <?php endif; ?> <?php else: ?> - <p><strong><?php /* @escapeNotVerified */ echo $block->renderShippingRateOption($block->getCurrentShippingRate()) ?></strong></p> + <p> + <strong> + <?php /* @noEscape */ echo $block->renderShippingRateOption($block->getCurrentShippingRate()); ?> + </strong> + </p> <?php endif; ?> </div> <div style="display: none" id="shipping_method_update"> - <p><?php /* @escapeNotVerified */ echo __('Please update order data to get shipping methods and rates') ?></p> + <p><?php echo $block->escapeHtml(__('Please update order data to get shipping methods and rates')); ?></p> </div> diff --git a/app/code/Magento/Paypal/view/frontend/templates/express/shortcut.phtml b/app/code/Magento/Paypal/view/frontend/templates/express/shortcut.phtml index 195795a33ca60705b6adb86dce972484b628d0b9..fa9afa80e5fa8abd356ed6ccfe3d54e80e3638a4 100644 --- a/app/code/Magento/Paypal/view/frontend/templates/express/shortcut.phtml +++ b/app/code/Magento/Paypal/view/frontend/templates/express/shortcut.phtml @@ -5,11 +5,8 @@ */ // @codingStandardsIgnoreFile - -?> -<?php /** - * @var $block \Magento\Paypal\Block\Express\Shortcut + * @var \Magento\Paypal\Block\Express\Shortcut $block */ ?> <?php @@ -19,32 +16,42 @@ if ($block->isOrPositionBefore()) { } elseif ($block->isOrPositionAfter()) { $labelPosition = ' after'; } +$shortcutHtmlId = $block->escapeHtml($block->getShortcutHtmlId()); +$confirmationUrl = ''; +$isInCatalogProduct = false; +if ($block->getConfirmationUrl() || $block->getIsInCatalogProduct()) { + $confirmationUrl = $block->escapeUrl($block->getConfirmationUrl()); + $isInCatalogProduct = $block->getIsInCatalogProduct(); +} ?> -<?php $shortcutHtmlId = $block->getShortcutHtmlId() ?> <div data-label="<?php echo $block->escapeHtml(__('or')); ?>" - class="paypal checkout <?php /* @escapeNotVerified */ echo $labelPosition ?> paypal-logo <?php /* @escapeNotVerified */ echo $shortcutHtmlId ?>"> - <input type="image" data-action="checkout-form-submit" data-checkout-url="<?php /* @escapeNotVerified */ echo $block->getCheckoutUrl() ?>" - src="<?php /* @escapeNotVerified */ echo $block->getImageUrl() ?>" - alt="<?php /* @escapeNotVerified */ echo __('Checkout with PayPal'); ?>" - title="<?php /* @escapeNotVerified */ echo __('Checkout with PayPal'); ?>"/> - <?php if ($block->getConfirmationUrl() || $block->getIsInCatalogProduct()): ?> - <?php - $confirmationUrl = $block->getConfirmationUrl(); - $isInCatalogProduct = $block->getIsInCatalogProduct(); - endif; ?> + class="paypal checkout <?php /* @noEscape */ echo $labelPosition; ?> paypal-logo + <?php /* @noEscape */ echo $shortcutHtmlId; ?>" + > + <input type="image" data-action="checkout-form-submit" + data-checkout-url="<?php echo $block->escapeUrl($block->getCheckoutUrl()); ?>" + src="<?php echo $block->escapeUrl($block->getImageUrl()); ?>" + alt="<?php echo $block->escapeHtml(__('Checkout with PayPal')); ?>" + title="<?php echo $block->escapeHtml(__('Checkout with PayPal')); ?>"/> <?php if ($block->getAdditionalLinkImage()): ?> - <?php $linkImage = $block->getAdditionalLinkImage() ?> - <a href="<?php /* @escapeNotVerified */ echo $linkImage['href']?>"><img src="<?php /* @escapeNotVerified */ echo $linkImage['src']?>" /></a> + <?php $linkImage = $block->getAdditionalLinkImage(); ?> + <a href="<?php echo $block->escapeUrl($linkImage['href']);?>"> + <img src="<?php echo $block->escapeHtml($linkImage['src']);?>" /> + </a> <?php endif; ?> <script type="text/x-magento-init"> { - ".paypal-logo.<?php /* @escapeNotVerified */ echo $shortcutHtmlId ?>": { + ".paypal-logo.<?php /* @noEscape */ echo $shortcutHtmlId; ?>": { "paypalCheckout": { - "confirmMessage": "<?php /* @escapeNotVerified */ echo $block->escapeJsQuote($block->getConfirmationMessage())?>", - "confirmUrl": "<?php /* @escapeNotVerified */ echo !empty($confirmationUrl) ? $confirmationUrl : false ?>", - "isCatalogProduct": "<?php /* @escapeNotVerified */ echo !empty($isInCatalogProduct) ? $isInCatalogProduct : false ?>", + "confirmMessage": "<?php /* @noEscape */ echo $block->escapeJsQuote( + $block->getConfirmationMessage() + ); ?>", + "confirmUrl": "<?php /* @noEscape */ echo !empty($confirmationUrl) ? $confirmationUrl : false; ?>", + "isCatalogProduct": "<?php /* @noEscape */ echo !empty($isInCatalogProduct) ? + (bool)$isInCatalogProduct : false; + ?>", "paypalCheckoutSelector": "#pp-checkout-url", - "shortcutContainerClass": "<?php /* @escapeNotVerified */ echo "." . $shortcutHtmlId ?>" + "shortcutContainerClass": "<?php /* @noEscape */ echo "." . $shortcutHtmlId; ?>" } } } diff --git a/app/code/Magento/Paypal/view/frontend/templates/express/shortcut/container.phtml b/app/code/Magento/Paypal/view/frontend/templates/express/shortcut/container.phtml index 6f053dd9c8e9afc181dfcbf3d63aa2cfa99ccbde..0556876235d44dd7fd0667d416ecca1c805b874c 100644 --- a/app/code/Magento/Paypal/view/frontend/templates/express/shortcut/container.phtml +++ b/app/code/Magento/Paypal/view/frontend/templates/express/shortcut/container.phtml @@ -5,9 +5,6 @@ */ // @codingStandardsIgnoreFile - -?> -<?php /** * @var $block Magento\Paypal\Block\Express\Shortcut */ diff --git a/app/code/Magento/Paypal/view/frontend/templates/hss/form.phtml b/app/code/Magento/Paypal/view/frontend/templates/hss/form.phtml index 3cb8fd28a598a3941806ef8b940d2815d1a94a62..641ead21be343860b9902c587ccee16c6f3fb04f 100644 --- a/app/code/Magento/Paypal/view/frontend/templates/hss/form.phtml +++ b/app/code/Magento/Paypal/view/frontend/templates/hss/form.phtml @@ -4,9 +4,10 @@ * See COPYING.txt for license details. */ -// @codingStandardsIgnoreFile + /** + * @var \Magento\Paypal\Block\Payflow\Link\Iframe $block * @see \Magento\Paypal\Block\Payflow\Link\Iframe */ ?> @@ -14,10 +15,10 @@ <head> </head> <body> -<form id="token_form" method="POST" action="<?php /* @escapeNotVerified */ echo $block->getTransactionUrl() ?>"> - <input type="hidden" name="SECURETOKEN" value="<?php /* @escapeNotVerified */ echo $block->getSecureToken(); ?>"/> - <input type="hidden" name="SECURETOKENID" value="<?php /* @escapeNotVerified */ echo $block->getSecureTokenId(); ?>"/> - <input type="hidden" name="MODE" value="<?php /* @escapeNotVerified */ echo $block->isTestMode() ? 'TEST' : 'LIVE'; ?>"/> +<form id="token_form" method="POST" action="<?php echo $block->escapeUrl($block->getTransactionUrl()); ?>"> + <input type="hidden" name="SECURETOKEN" value="<?php echo $block->escapeHtml($block->getSecureToken()); ?>"/> + <input type="hidden" name="SECURETOKENID" value="<?php echo $block->escapeHtml($block->getSecureTokenId()); ?>"/> + <input type="hidden" name="MODE" value="<?php /* @noEscape */ echo $block->isTestMode() ? 'TEST' : 'LIVE'; ?>"/> </form> <script> document.getElementById('token_form').submit(); diff --git a/app/code/Magento/Paypal/view/frontend/templates/hss/iframe.phtml b/app/code/Magento/Paypal/view/frontend/templates/hss/iframe.phtml index b69d3964c3098f989ebd1f1914b7a55ddd066f38..06f7bbe5ce888fa1e93a81c0013401899a8fb409 100644 --- a/app/code/Magento/Paypal/view/frontend/templates/hss/iframe.phtml +++ b/app/code/Magento/Paypal/view/frontend/templates/hss/iframe.phtml @@ -4,9 +4,12 @@ * See COPYING.txt for license details. */ +/** + * @var \Magento\Paypal\Block\Payflow\Link\Iframe $block + */ ?> <div id="iframe-warning" class="message notice"> - <div><?php /* @escapeNotVerified */ echo __('Please do not refresh the page until you complete payment.') ?></div> + <div><?php echo $block->escapeHtml(__('Please do not refresh the page until you complete payment.')); ?></div> </div> <iframe id="hss-iframe" data-container="paypal-iframe" class="paypal iframe" scrolling="no" frameborder="0" border="0" - src="<?php /* @escapeNotVerified */ echo $block->getFrameActionUrl() ?>" height="610" width="100%"></iframe> + src="<?php echo $block->escapeUrl($block->getFrameActionUrl()); ?>" height="610" width="100%"></iframe> diff --git a/app/code/Magento/Paypal/view/frontend/templates/hss/info.phtml b/app/code/Magento/Paypal/view/frontend/templates/hss/info.phtml index cf48aff175ea6d72833327e23049948d131ff2ed..69bf40f9314e3efe35056fa5b0b1bc1915f61c33 100644 --- a/app/code/Magento/Paypal/view/frontend/templates/hss/info.phtml +++ b/app/code/Magento/Paypal/view/frontend/templates/hss/info.phtml @@ -4,12 +4,15 @@ * See COPYING.txt for license details. */ -// @codingStandardsIgnoreFile + /** + * @var \Magento\Paypal\Block\Payflow\Link\Info $block * @see \Magento\Paypal\Block\Payflow\Link\Info */ ?> -<div id="payment_form_<?php /* @escapeNotVerified */ echo $block->getMethodCode() ?>" style="display:none" class="hss items"> - <?php /* @escapeNotVerified */ echo __('You will be required to enter your payment details after you place an order.') ?> +<div id="payment_form_<?php /* @noEscape */ echo $block->getMethodCode(); ?>" style="display:none" class="hss items"> + <?php echo $block->escapeHtml(__( + 'You will be required to enter your payment details after you place an order.' + )); ?> </div> diff --git a/app/code/Magento/Paypal/view/frontend/templates/hss/redirect.phtml b/app/code/Magento/Paypal/view/frontend/templates/hss/redirect.phtml index 8c3578989ae3b4e36b6ca52266063eb5dc4431a0..9e60b5f8365826941cca57524aa33f2021f29b10 100644 --- a/app/code/Magento/Paypal/view/frontend/templates/hss/redirect.phtml +++ b/app/code/Magento/Paypal/view/frontend/templates/hss/redirect.phtml @@ -4,9 +4,10 @@ * See COPYING.txt for license details. */ -// @codingStandardsIgnoreFile + /** + * @var \Magento\Paypal\Block\Iframe $block * @see \Magento\Paypal\Block\Iframe */ ?> @@ -18,13 +19,13 @@ (function() { 'use strict'; - var cartUrl = '<?php /* @escapeNotVerified */ echo $block->getUrl('checkout/cart') ?>', - successUrl = '<?php /* @escapeNotVerified */ echo $block->getUrl('checkout/onepage/success') ?>', - goToSuccessPage = '<?php /* @escapeNotVerified */ echo $block->getGotoSuccessPage() ?>', + var cartUrl = '<?php echo $block->escapeUrl($block->getUrl('checkout/cart')); ?>', + successUrl = '<?php echo $block->escapeUrl($block->getUrl('checkout/onepage/success')); ?>', + goToSuccessPage = '<?php echo $block->escapeUrl($block->getGotoSuccessPage()); ?>', require = window.top.require, windowContext = window, errorMessage = { - message: '<?php /* @escapeNotVerified */ echo $block->getErrorMsg() ?>' + message: '<?php echo $block->escapeHtml($block->getErrorMsg()); ?>' }; require([ diff --git a/app/code/Magento/Paypal/view/frontend/templates/hss/review/button.phtml b/app/code/Magento/Paypal/view/frontend/templates/hss/review/button.phtml index a2dd9d8a680bb434724255de36f549ed3783dfb8..8b61ba63e7f5b0f4605443f8b409c0b90fc66852 100644 --- a/app/code/Magento/Paypal/view/frontend/templates/hss/review/button.phtml +++ b/app/code/Magento/Paypal/view/frontend/templates/hss/review/button.phtml @@ -4,8 +4,10 @@ * See COPYING.txt for license details. */ -// @codingStandardsIgnoreFile + ?> -<button type="submit" data-role="review-save" title="<?php /* @escapeNotVerified */ echo __('Continue') ?>" class="button action checkout primary"> - <span><?php /* @escapeNotVerified */ echo __('Continue') ?></span></button> +<button type="submit" data-role="review-save" title="<?php echo $block->escapeHtml(__('Continue')); ?>" + class="button action checkout primary"> + <span><?php echo $block->escapeHtml(__('Continue')); ?></span> +</button> diff --git a/app/code/Magento/Paypal/view/frontend/templates/js/components.phtml b/app/code/Magento/Paypal/view/frontend/templates/js/components.phtml index 3d85172583ed01a859285d5cae364689ac4eb01d..12a3b0ed4c478512b7f44378a5d5f0163b3285ee 100644 --- a/app/code/Magento/Paypal/view/frontend/templates/js/components.phtml +++ b/app/code/Magento/Paypal/view/frontend/templates/js/components.phtml @@ -5,6 +5,5 @@ */ // @codingStandardsIgnoreFile - ?> -<?php echo $block->getChildHtml() ?> +<?php echo $block->getChildHtml(); ?> \ No newline at end of file diff --git a/app/code/Magento/Paypal/view/frontend/templates/partner/logo.phtml b/app/code/Magento/Paypal/view/frontend/templates/partner/logo.phtml index 3d0f12c4a51ace696c2f39c748668701a82a1096..eaa5e9284f9dfa3be93450e102ec7ca98aac52c3 100644 --- a/app/code/Magento/Paypal/view/frontend/templates/partner/logo.phtml +++ b/app/code/Magento/Paypal/view/frontend/templates/partner/logo.phtml @@ -4,23 +4,25 @@ * See COPYING.txt for license details. */ -// @codingStandardsIgnoreFile -?> -<?php /** + * @var \Magento\Paypal\Block\Logo $block * @see \Magento\Paypal\Block\Logo */ ?> <div class="block paypal acceptance"> <div class="block-content"> - <a href="#" title="<?php /* @escapeNotVerified */ echo __('Additional Options') ?>" - onclick="javascript:window.open('<?php /* @escapeNotVerified */ echo $block->getAboutPaypalPageUrl() ?>','paypal','width=600,height=350,left=0,top=0,location=no,status=yes,scrollbars=yes,resizable=yes'); return false;" + <a href="#" title="<?php echo $block->escapeHtml(__('Additional Options')); ?>" + onclick="javascript:window.open( + '<?php echo $block->escapeUrl($block->getAboutPaypalPageUrl()); ?>', + 'paypal', + 'width=600,height=350,left=0,top=0,location=no,status=yes,scrollbars=yes,resizable=yes' + ); return false;" class="action paypal additional"> - <img src="<?php echo $block->escapeHtml($block->getLogoImageUrl()) ?>" - alt="<?php echo $block->escapeHtml(__('Additional Options')) ?>" - title="<?php echo $block->escapeHtml(__('Additional Options')) ?>" /> + <img src="<?php echo $block->escapeUrl($block->getLogoImageUrl()); ?>" + alt="<?php echo $block->escapeHtml(__('Additional Options')); ?>" + title="<?php echo $block->escapeHtml(__('Additional Options')); ?>" /> </a> </div> </div> diff --git a/app/code/Magento/Paypal/view/frontend/templates/payflowadvanced/form.phtml b/app/code/Magento/Paypal/view/frontend/templates/payflowadvanced/form.phtml index 479b7e4f875d571c1b6b9e63efac7f385b235ee4..40617ec10f6365f8d7f3915ce9ddda73078a526e 100644 --- a/app/code/Magento/Paypal/view/frontend/templates/payflowadvanced/form.phtml +++ b/app/code/Magento/Paypal/view/frontend/templates/payflowadvanced/form.phtml @@ -4,20 +4,18 @@ * See COPYING.txt for license details. */ -// @codingStandardsIgnoreFile - /** - * @var $block \Magento\Paypal\Block\Payflow\Advanced\Iframe + * @var \Magento\Paypal\Block\Payflow\Advanced\Iframe $block */ ?> <html> <head> </head> <body> -<form id="token_form" method="GET" action="<?php /* @escapeNotVerified */ echo $block->getTransactionUrl() ?>"> - <input type="hidden" name="SECURETOKEN" value="<?php /* @escapeNotVerified */ echo $block->getSecureToken(); ?>"/> - <input type="hidden" name="SECURETOKENID" value="<?php /* @escapeNotVerified */ echo $block->getSecureTokenId(); ?>"/> - <input type="hidden" name="MODE" value="<?php /* @escapeNotVerified */ echo $block->isTestMode() ? 'TEST' : 'LIVE'; ?>"/> +<form id="token_form" method="GET" action="<?php echo $block->escapeUrl($block->getTransactionUrl()); ?>"> + <input type="hidden" name="SECURETOKEN" value="<?php echo $block->escapeHtml($block->getSecureToken()); ?>"/> + <input type="hidden" name="SECURETOKENID" value="<?php echo $block->escapeHtml($block->getSecureTokenId()); ?>"/> + <input type="hidden" name="MODE" value="<?php /* @noEscape */ echo $block->isTestMode() ? 'TEST' : 'LIVE'; ?>"/> </form> <script> document.getElementById('token_form').submit(); diff --git a/app/code/Magento/Paypal/view/frontend/templates/payflowadvanced/info.phtml b/app/code/Magento/Paypal/view/frontend/templates/payflowadvanced/info.phtml index 9d1ca69c34cb600f889665ed757550b62200827d..a11a3786c2c2d9f40e13dddb8b5546c6d546016c 100644 --- a/app/code/Magento/Paypal/view/frontend/templates/payflowadvanced/info.phtml +++ b/app/code/Magento/Paypal/view/frontend/templates/payflowadvanced/info.phtml @@ -5,11 +5,13 @@ */ // @codingStandardsIgnoreFile - /** - * @var $block \Magento\Paypal\Block\Payflow\Advanced\Form + * @var \Magento\Paypal\Block\Payflow\Advanced\Form $block */ ?> -<fieldset id="payment_form_<?php /* @escapeNotVerified */ echo $block->getMethodCode() ?>" style="display:none" class="fieldset payflowadvanced items redirect"> - <div><?php /* @escapeNotVerified */ echo __('You will be required to enter your payment details after you place an order.') ?></div> +<fieldset id="payment_form_<?php /* @noEscape */ echo $block->getMethodCode(); ?>" style="display:none" + class="fieldset payflowadvanced items redirect"> + <div> + <?php echo $block->escapeHtml(__('You will be required to enter your payment details after you place an order.')); ?> + </div> </fieldset> diff --git a/app/code/Magento/Paypal/view/frontend/templates/payflowlink/form.phtml b/app/code/Magento/Paypal/view/frontend/templates/payflowlink/form.phtml index cf8431c60bcd9430ac9d9557e699caaba60a9a0e..f4f882e1835f3f0c7920fa0819e7ed9e35aff3cd 100644 --- a/app/code/Magento/Paypal/view/frontend/templates/payflowlink/form.phtml +++ b/app/code/Magento/Paypal/view/frontend/templates/payflowlink/form.phtml @@ -4,9 +4,10 @@ * See COPYING.txt for license details. */ -// @codingStandardsIgnoreFile + /** + * @var \Magento\Paypal\Block\Payflow\Link\Iframe $block * @see \Magento\Paypal\Block\Payflow\Link\Iframe */ ?> @@ -14,10 +15,10 @@ <head> </head> <body> -<form id="token_form" method="GET" action="<?php /* @escapeNotVerified */ echo $block->getTransactionUrl()?>"> - <input type="hidden" name="SECURETOKEN" value="<?php /* @escapeNotVerified */ echo $block->getSecureToken(); ?>"/> - <input type="hidden" name="SECURETOKENID" value="<?php /* @escapeNotVerified */ echo $block->getSecureTokenId(); ?>"/> - <input type="hidden" name="MODE" value="<?php /* @escapeNotVerified */ echo $block->isTestMode() ? 'TEST' : 'LIVE'; ?>"/> +<form id="token_form" method="GET" action="<?php echo $block->escapeUrl($block->getTransactionUrl()); ?>"> + <input type="hidden" name="SECURETOKEN" value="<?php echo $block->escapeHtml($block->getSecureToken()); ?>"/> + <input type="hidden" name="SECURETOKENID" value="<?php echo $block->escapeHtml($block->getSecureTokenId()); ?>"/> + <input type="hidden" name="MODE" value="<?php /* @noEscape */ echo $block->isTestMode() ? 'TEST' : 'LIVE'; ?>"/> </form> <script> document.getElementById('token_form').submit(); diff --git a/app/code/Magento/Paypal/view/frontend/templates/payflowlink/info.phtml b/app/code/Magento/Paypal/view/frontend/templates/payflowlink/info.phtml index 74b5a1c7099173b1fce1770340e25ab58342f122..629141539e2aacd9865c42e85ec04396fc77a999 100644 --- a/app/code/Magento/Paypal/view/frontend/templates/payflowlink/info.phtml +++ b/app/code/Magento/Paypal/view/frontend/templates/payflowlink/info.phtml @@ -4,12 +4,11 @@ * See COPYING.txt for license details. */ -// @codingStandardsIgnoreFile - /** - * @var $block \Magento\Paypal\Block\Payflow\Link\Form + * @var \Magento\Paypal\Block\Payflow\Link\Form $block */ ?> -<div class="payflowlink items" id="payment_form_<?php /* @escapeNotVerified */ echo $block->getMethodCode() ?>" style="display:none"> - <?php /* @escapeNotVerified */ echo __('You will be required to enter your payment details after you place an order.') ?> +<div class="payflowlink items" id="payment_form_<?php /* @noEscape */ echo $block->getMethodCode(); ?>" + style="display:none"> + <?php echo $block->escapeHtml(__('You will be required to enter your payment details after you place an order.'));?> </div> diff --git a/app/code/Magento/Paypal/view/frontend/templates/payflowlink/redirect.phtml b/app/code/Magento/Paypal/view/frontend/templates/payflowlink/redirect.phtml index ee6a1b4ba5d5fd1202d43243853865e1c808fb08..1c0981a023ada3c451a51a4b53628ad93b433a8c 100644 --- a/app/code/Magento/Paypal/view/frontend/templates/payflowlink/redirect.phtml +++ b/app/code/Magento/Paypal/view/frontend/templates/payflowlink/redirect.phtml @@ -4,10 +4,10 @@ * See COPYING.txt for license details. */ -// @codingStandardsIgnoreFile + /** - * @var $block \Magento\Paypal\Block\Payflow\Link\Iframe + * @var \Magento\Paypal\Block\Payflow\Link\Iframe $block */ ?> <html> @@ -29,13 +29,13 @@ } } - var cartUrl = '<?php /* @escapeNotVerified */ echo $block->getUrl('checkout/cart') ?>', - successUrl = '<?php /* @escapeNotVerified */ echo $block->getUrl('checkout/onepage/success') ?>', - goToSuccessPage = '<?php /* @escapeNotVerified */ echo $block->getGotoSuccessPage() ?>', + var cartUrl = '<?php echo $block->escapeUrl($block->getUrl('checkout/cart')); ?>', + successUrl = '<?php echo $block->escapeUrl($block->getUrl('checkout/onepage/success')); ?>', + goToSuccessPage = '<?php echo $block->escapeUrl($block->getGotoSuccessPage()); ?>', require = window.top.require, windowContext = window, errorMessage = { - message: '<?php /* @escapeNotVerified */ echo $block->getErrorMsg() ?>' + message: '<?php echo $block->escapeHtml($block->getErrorMsg()); ?>' }; if(typeof(require) == "undefined") { diff --git a/app/code/Magento/Paypal/view/frontend/templates/payment/form/billing/agreement.phtml b/app/code/Magento/Paypal/view/frontend/templates/payment/form/billing/agreement.phtml index 9e13c69f0d7be28c11acc870a5f3c02ad6bb07be..834a623d65b3f0b59a37ae59e2cab5e67e3e0695 100644 --- a/app/code/Magento/Paypal/view/frontend/templates/payment/form/billing/agreement.phtml +++ b/app/code/Magento/Paypal/view/frontend/templates/payment/form/billing/agreement.phtml @@ -5,18 +5,24 @@ */ // @codingStandardsIgnoreFile - +/** + * @var \Magento\Paypal\Block\Payment\Form\Billing\Agreement $block + */ +$code = $block->getMethodCode(); ?> -<?php /* @var $block \Magento\Paypal\Block\Payment\Form\Billing\Agreement */?> -<?php $_code = $block->getMethodCode() ?> -<div class="field items required" id="payment_form_<?php /* @escapeNotVerified */ echo $_code ?>" style="display:none;"> - <label for="<?php /* @escapeNotVerified */ echo $_code ?>_ba_agreement_id" class="label"><span><?php /* @escapeNotVerified */ echo __('Billing Agreement') ?></span></label> +<div class="field items required" id="payment_form_<?php /* @noEscape */ echo $code; ?>" style="display:none;"> + <label for="<?php /* @noEscape */ echo $code; ?>_ba_agreement_id" class="label"> + <span><?php echo $block->escapeHtml(__('Billing Agreement')); ?></span> + </label> <div class="control"> - <select id="<?php /* @escapeNotVerified */ echo $_code ?>_ba_agreement_id" name="payment[<?php /* @escapeNotVerified */ echo $block->getTransportName(); ?>]" class="select"> - <option value=""><?php /* @escapeNotVerified */ echo __('-- Please Select Billing Agreement--') ?></option> - <?php foreach ($block->getBillingAgreements() as $id => $referenceId): ?> - <option value="<?php /* @escapeNotVerified */ echo $id ?>"><?php echo $block->escapeHtml($referenceId) ?></option> - <?php endforeach ?> + <select id="<?php /* @noEscape */ echo $code; ?>_ba_agreement_id" + name="payment[<?php echo $block->escapeHtml($block->getTransportName()); ?>]" class="select"> + <option value=""><?php echo $block->escapeHtml(__('-- Please Select Billing Agreement--')); ?></option> + <?php foreach ($block->getBillingAgreements() as $id => $referenceId): ?> + <option value="<?php echo $block->escapeHtml($id); ?>"> + <?php echo $block->escapeHtml($referenceId); ?> + </option> + <?php endforeach; ?> </select> </div> </div> diff --git a/app/code/Magento/Paypal/view/frontend/templates/payment/mark.phtml b/app/code/Magento/Paypal/view/frontend/templates/payment/mark.phtml index e6d1eda536e21235aa86571acb29e4753244ead6..89134f7a171b9a860ac8415c452c1ff4c5b388f2 100644 --- a/app/code/Magento/Paypal/view/frontend/templates/payment/mark.phtml +++ b/app/code/Magento/Paypal/view/frontend/templates/payment/mark.phtml @@ -5,24 +5,28 @@ */ // @codingStandardsIgnoreFile - -?> -<?php /** * Note: This mark is a requirement of PayPal + * @var \Magento\Paypal\Block\Express\Form $block * @see \Magento\Paypal\Block\Express\Form */ +$url = $block->escapeUrl($block->getPaymentAcceptanceMarkHref()); ?> <!-- PayPal Logo --> -<img src="<?php echo $block->escapeHtml($block->getPaymentAcceptanceMarkSrc()) ?>" - alt="<?php /* @escapeNotVerified */ echo __('Acceptance Mark') ?>" class="paypal icon"/> -<a href="<?php /* @escapeNotVerified */ echo $block->getPaymentAcceptanceMarkHref() ?>" - onclick="javascript:window.open('<?php /* @escapeNotVerified */ echo $block->getPaymentAcceptanceMarkHref() ?>','olcwhatispaypal','toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, ,left=0, top=0, width=400, height=350'); return false;" +<img src="<?php echo $block->escapeUrl($block->getPaymentAcceptanceMarkSrc()) ?>" + alt="<?php echo $block->escapeHtml(__('Acceptance Mark')); ?>" class="paypal icon"/> +<a href="<?php /* @noEscape */ echo $url; ?>" + onclick="javascript:window.open( + '<?php /* @noEscape */ echo $url; ?>', + 'olcwhatispaypal', + 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, ,' + + 'left=0, top=0, width=400, height=350' + ); return false;" class="action paypal about"> <?php if ($block->getPaymentWhatIs()) { - /* @escapeNotVerified */ echo __($block->getPaymentWhatIs()); + echo $block->escapeHtml(__($block->getPaymentWhatIs())); } else { - /* @escapeNotVerified */ echo __('What is PayPal?'); + echo $block->escapeHtml(__('What is PayPal?')); } ?> </a> <!-- PayPal Logo --> diff --git a/app/code/Magento/Paypal/view/frontend/templates/payment/redirect.phtml b/app/code/Magento/Paypal/view/frontend/templates/payment/redirect.phtml index 32879e4575f322ad9b07d7e2b4375662b4e39d6a..5397d9aba46151905be8f46ee6da030f2567c5eb 100644 --- a/app/code/Magento/Paypal/view/frontend/templates/payment/redirect.phtml +++ b/app/code/Magento/Paypal/view/frontend/templates/payment/redirect.phtml @@ -5,20 +5,23 @@ */ // @codingStandardsIgnoreFile - -?> -<?php /** + * @var \Magento\PayPal\Block\Express\Form $block * @see \Magento\PayPal\Block\Express\Form */ +$code = $block->escapeHtml($block->getBillingAgreementCode()); ?> -<fieldset class="fieldset paypal items redirect" id="payment_form_<?php /* @escapeNotVerified */ echo $block->getMethodCode() ?>" style="display:none;"> - <div><?php /* @escapeNotVerified */ echo $block->getRedirectMessage(); ?></div> - <?php $code = $block->getBillingAgreementCode(); ?> +<fieldset class="fieldset paypal items redirect" style="display:none;" + id="payment_form_<?php /* @noEscape */ echo $block->getMethodCode(); ?>"> + <div><?php echo $block->escapeHtml($block->getRedirectMessage()); ?></div> + <?php ?> <?php if ($code): ?> - <input type="checkbox" id="<?php /* @escapeNotVerified */ echo $code ?>" value="1" name="payment[<?php /* @escapeNotVerified */ echo $code ?>]" class="checkbox"> - <label for="<?php /* @escapeNotVerified */ echo $code ?>" class="label"> - <span><?php /* @escapeNotVerified */ echo __('Sign a billing agreement to streamline further purchases with PayPal.') ?></span> + <input type="checkbox" id="<?php /* @noEscape */ echo $code; ?>" value="1" class="checkbox" + name="payment[<?php /* @noEscape */ echo $code; ?>]"> + <label for="<?php /* @noEscape */ echo $code; ?>" class="label"> + <span> + <?php echo $block->escapeHtml(__('Sign a billing agreement to streamline further purchases with PayPal.')); ?> + </span> </label> <?php endif; ?> </fieldset> diff --git a/app/code/Magento/Paypal/view/frontend/web/js/paypal-checkout.js b/app/code/Magento/Paypal/view/frontend/web/js/paypal-checkout.js index bd0111de817d5c680de491e0a50b5aafbb5f472b..bc474987c897f42f28e40d6a651d68ce6009869d 100644 --- a/app/code/Magento/Paypal/view/frontend/web/js/paypal-checkout.js +++ b/app/code/Magento/Paypal/view/frontend/web/js/paypal-checkout.js @@ -5,9 +5,10 @@ /*jshint browser:true jquery:true*/ define([ 'jquery', + 'Magento_Ui/js/modal/confirm', 'jquery/ui', 'mage/mage' -], function ($) { +], function ($, confirm) { 'use strict'; $.widget('mage.paypalCheckout', { @@ -18,26 +19,43 @@ define([ _create: function () { this.element.on('click', '[data-action="checkout-form-submit"]', $.proxy(function (e) { var returnUrl = $(e.target).data('checkout-url'), - form; + self = this; e.preventDefault(); if (this.options.confirmUrl && this.options.confirmMessage) { - if (window.confirm(this.options.confirmMessage)) { - returnUrl = this.options.confirmUrl; - } + confirm({ + content: this.options.confirmMessage, + actions: { + confirm: function() { + returnUrl = self.options.confirmUrl; + self._redirect(returnUrl); + }, + cancel: function() { + self.redirect(returnUrl); + } + } + }); + + return false; } - if (this.options.isCatalogProduct) { - // find the form from which the button was clicked - form = $(this.options.shortcutContainerClass).closest('form'); + this._redirect(returnUrl); - $(form).find(this.options.paypalCheckoutSelector).val(returnUrl); - $(form).submit(); - } else { - $.mage.redirect(returnUrl); - } }, this)); + }, + _redirect: function(returnUrl) { + var form; + + if (this.options.isCatalogProduct) { + // find the form from which the button was clicked + form = $(this.options.shortcutContainerClass).closest('form'); + + $(form).find(this.options.paypalCheckoutSelector).val(returnUrl); + $(form).submit(); + } else { + $.mage.redirect(returnUrl); + } } }); diff --git a/app/code/Magento/Paypal/view/frontend/web/js/view/payment/method-renderer/payflowpro-method.js b/app/code/Magento/Paypal/view/frontend/web/js/view/payment/method-renderer/payflowpro-method.js index a7a031848124e90d904a433912a4cdc722a27ed6..f0095877bbc9cb3a3831de67668c3234a287ec75 100644 --- a/app/code/Magento/Paypal/view/frontend/web/js/view/payment/method-renderer/payflowpro-method.js +++ b/app/code/Magento/Paypal/view/frontend/web/js/view/payment/method-renderer/payflowpro-method.js @@ -51,9 +51,8 @@ define( placeOrder: function () { var self = this; - fullScreenLoader.startLoader(); - if (this.validateHandler() && additionalValidators.validate()) { + fullScreenLoader.startLoader(); this.isPlaceOrderActionAllowed(false); $.when(setPaymentInformationAction(this.messageContainer, { 'method': self.getCode() diff --git a/app/code/Magento/Paypal/view/frontend/web/order-review.js b/app/code/Magento/Paypal/view/frontend/web/order-review.js index 56514f9164c8f8acb9db20d12f4f97ca7fda6efc..b1a072d8e98e87815de24ac306f4673e8fec7c38 100644 --- a/app/code/Magento/Paypal/view/frontend/web/order-review.js +++ b/app/code/Magento/Paypal/view/frontend/web/order-review.js @@ -6,11 +6,12 @@ /*global alert*/ define([ "jquery", + 'Magento_Ui/js/modal/alert', "jquery/ui", "mage/translate", "mage/mage", "mage/validation" -], function($){ +], function($, alert){ "use strict"; $.widget('mage.orderReview', { @@ -129,7 +130,9 @@ define([ msg = msg.join("\n"); } } - alert($.mage.__(msg)); + alert({ + content: $.mage.__(msg) + }); return false; } if (response.redirect) { @@ -141,11 +144,15 @@ define([ return false; } this._ajaxComplete(); - alert($.mage.__('Sorry, something went wrong.')); + alert({ + content: $.mage.__('Sorry, something went wrong.') + }); } }, error: function () { - alert($.mage.__('Sorry, something went wrong. Please try again later.')); + alert({ + content: $.mage.__('Sorry, something went wrong. Please try again later.') + }); this._ajaxComplete(); } }); diff --git a/app/code/Magento/Persistent/Model/ResourceModel/Session.php b/app/code/Magento/Persistent/Model/ResourceModel/Session.php index 32f591b67798ba5a082e4e787808f8555578ba7b..a858573f4f79d2754e9134e1eadecbcd8ad1f278 100644 --- a/app/code/Magento/Persistent/Model/ResourceModel/Session.php +++ b/app/code/Magento/Persistent/Model/ResourceModel/Session.php @@ -8,7 +8,7 @@ namespace Magento\Persistent\Model\ResourceModel; /** * Persistent Session Resource Model */ -class Session extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Session extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Use is object new method for object saving @@ -27,12 +27,12 @@ class Session extends \Magento\Framework\Model\ModelResource\Db\AbstractDb /** * Class constructor * - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Persistent\Model\SessionFactory $sessionFactory * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Persistent\Model\SessionFactory $sessionFactory, $connectionName = null ) { diff --git a/app/code/Magento/Persistent/Model/Session.php b/app/code/Magento/Persistent/Model/Session.php index 018ab10d5c4032d9991ec5e5959e4db98f64e55b..70c4faaa3dd31460c2c904f9c7582dd24ed0e57d 100644 --- a/app/code/Magento/Persistent/Model/Session.php +++ b/app/code/Magento/Persistent/Model/Session.php @@ -107,7 +107,7 @@ class Session extends \Magento\Framework\Model\AbstractModel * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param \Magento\Framework\Math\Random $mathRandom * @param \Magento\Framework\Session\Config\ConfigInterface $sessionConfig - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -123,7 +123,7 @@ class Session extends \Magento\Framework\Model\AbstractModel \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Framework\Math\Random $mathRandom, \Magento\Framework\Session\Config\ConfigInterface $sessionConfig, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Persistent/Test/Unit/Model/SessionTest.php b/app/code/Magento/Persistent/Test/Unit/Model/SessionTest.php index 198bcd5909b989ba013bd19eedea81158dec42cd..c177a912bc2b748485d4bf1e9845b7e9d74b2030 100644 --- a/app/code/Magento/Persistent/Test/Unit/Model/SessionTest.php +++ b/app/code/Magento/Persistent/Test/Unit/Model/SessionTest.php @@ -38,7 +38,7 @@ class SessionTest extends \PHPUnit_Framework_TestCase ->getMock(); $resourceMock = $this->getMockForAbstractClass( - 'Magento\Framework\Model\ModelResource\Db\AbstractDb', + 'Magento\Framework\Model\ResourceModel\Db\AbstractDb', [], '', false, diff --git a/app/code/Magento/Persistent/etc/frontend/events.xml b/app/code/Magento/Persistent/etc/frontend/events.xml index 2da8dbc820e37bffca15518224386c8d0f7fbbe0..eb7cc51d9065d43ab745331096e89d6d9262f03d 100644 --- a/app/code/Magento/Persistent/etc/frontend/events.xml +++ b/app/code/Magento/Persistent/etc/frontend/events.xml @@ -7,62 +7,62 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="customer_data_object_login"> - <observer name="persistent" instance="Magento\Persistent\Observer\SynchronizePersistentOnLoginObserver" method="execute" /> + <observer name="persistent" instance="Magento\Persistent\Observer\SynchronizePersistentOnLoginObserver" /> </event> <event name="customer_logout"> - <observer name="persistent" instance="Magento\Persistent\Observer\SynchronizePersistentOnLogoutObserver" method="execute" /> + <observer name="persistent" instance="Magento\Persistent\Observer\SynchronizePersistentOnLogoutObserver" /> </event> <event name="controller_front_send_response_after"> - <observer name="persistent" instance="Magento\Persistent\Observer\SynchronizePersistentInfoObserver" method="execute" /> + <observer name="persistent" instance="Magento\Persistent\Observer\SynchronizePersistentInfoObserver" /> </event> <event name="controller_action_predispatch_customer_account_loginPost"> - <observer name="persistent" instance="Magento\Persistent\Observer\SetRememberMeCheckedStatusObserver" method="execute" /> + <observer name="persistent" instance="Magento\Persistent\Observer\SetRememberMeCheckedStatusObserver" /> </event> <event name="controller_action_predispatch_customer_ajax_login"> - <observer name="persistent" instance="Magento\Persistent\Observer\SetRememberMeStatusForAjaxLoginObserver" method="execute" /> + <observer name="persistent" instance="Magento\Persistent\Observer\SetRememberMeStatusForAjaxLoginObserver" /> </event> <event name="controller_action_predispatch_customer_account_createpost"> - <observer name="persistent" instance="Magento\Persistent\Observer\SetRememberMeCheckedStatusObserver" method="execute" /> - <observer name="persistent_authenticate" instance="Magento\Persistent\Observer\CustomerAuthenticatedEventObserver" method="execute" /> + <observer name="persistent" instance="Magento\Persistent\Observer\SetRememberMeCheckedStatusObserver" /> + <observer name="persistent_authenticate" instance="Magento\Persistent\Observer\CustomerAuthenticatedEventObserver" /> </event> <event name="controller_action_postdispatch_checkout_onepage_saveBilling"> - <observer name="persistent" instance="Magento\Persistent\Observer\SetRememberMeCheckedStatusObserver" method="execute" /> + <observer name="persistent" instance="Magento\Persistent\Observer\SetRememberMeCheckedStatusObserver" /> </event> <event name="layout_generate_blocks_after"> - <observer name="persistent" instance="Magento\Persistent\Observer\ApplyPersistentDataObserver" method="execute" /> + <observer name="persistent" instance="Magento\Persistent\Observer\ApplyPersistentDataObserver" /> </event> <event name="controller_action_predispatch"> - <observer name="persistent" instance="Magento\Persistent\Observer\EmulateQuoteObserver" method="execute" /> - <observer name="persistent_session" instance="Magento\Persistent\Observer\RenewCookieObserver" method="execute" /> - <observer name="persistent_quote" instance="Magento\Persistent\Observer\CheckExpirePersistentQuoteObserver" method="execute" /> - <observer name="persistent_customer" instance="Magento\Persistent\Observer\EmulateCustomerObserver" method="execute" /> - <observer name="persistent_checkout" instance="Magento\Persistent\Observer\PreventExpressCheckoutObserver" method="execute" /> + <observer name="persistent" instance="Magento\Persistent\Observer\EmulateQuoteObserver" /> + <observer name="persistent_session" instance="Magento\Persistent\Observer\RenewCookieObserver" /> + <observer name="persistent_quote" instance="Magento\Persistent\Observer\CheckExpirePersistentQuoteObserver" /> + <observer name="persistent_customer" instance="Magento\Persistent\Observer\EmulateCustomerObserver" /> + <observer name="persistent_checkout" instance="Magento\Persistent\Observer\PreventExpressCheckoutObserver" /> </event> <event name="checkout_allow_guest"> - <observer name="persistent" instance="Magento\Persistent\Observer\DisableGuestCheckoutObserver" method="execute" /> + <observer name="persistent" instance="Magento\Persistent\Observer\DisableGuestCheckoutObserver" /> </event> <event name="customer_customer_authenticated"> - <observer name="persistent" instance="Magento\Persistent\Observer\CustomerAuthenticatedEventObserver" method="execute" /> + <observer name="persistent" instance="Magento\Persistent\Observer\CustomerAuthenticatedEventObserver" /> </event> <event name="controller_action_predispatch_persistent_index_unsetCookie"> - <observer name="persistent" instance="Magento\Persistent\Observer\PreventClearCheckoutSessionObserver" method="execute" /> + <observer name="persistent" instance="Magento\Persistent\Observer\PreventClearCheckoutSessionObserver" /> </event> <event name="controller_action_postdispatch_persistent_index_unsetCookie"> - <observer name="persistent" instance="Magento\Persistent\Observer\MakePersistentQuoteGuestObserver" method="execute" /> + <observer name="persistent" instance="Magento\Persistent\Observer\MakePersistentQuoteGuestObserver" /> </event> <event name="sales_quote_save_before"> - <observer name="persistent" instance="Magento\Persistent\Observer\SetQuotePersistentDataObserver" method="execute" /> + <observer name="persistent" instance="Magento\Persistent\Observer\SetQuotePersistentDataObserver" /> </event> <event name="custom_quote_process"> - <observer name="persistent" instance="Magento\Persistent\Observer\SetLoadPersistentQuoteObserver" method="execute" /> + <observer name="persistent" instance="Magento\Persistent\Observer\SetLoadPersistentQuoteObserver" /> </event> <event name="customer_register_success"> - <observer name="persistent" instance="Magento\Persistent\Observer\RemovePersistentCookieObserver" method="execute" /> + <observer name="persistent" instance="Magento\Persistent\Observer\RemovePersistentCookieObserver" /> </event> <event name="render_block"> - <observer name="persistent" instance="Magento\Persistent\Observer\ApplyBlockPersistentDataObserver" method="execute" /> + <observer name="persistent" instance="Magento\Persistent\Observer\ApplyBlockPersistentDataObserver" /> </event> <event name="update_customer_cookies"> - <observer name="persistent" instance="Magento\Persistent\Observer\UpdateCustomerCookiesObserver" method="execute" /> + <observer name="persistent" instance="Magento\Persistent\Observer\UpdateCustomerCookiesObserver" /> </event> </config> diff --git a/app/code/Magento/Persistent/etc/webapi_rest/events.xml b/app/code/Magento/Persistent/etc/webapi_rest/events.xml index c11bdcb0faa3666e01a7ef27eec16d296cce6eb6..2c2205ae49eddf51f38842037f84271b06574c65 100644 --- a/app/code/Magento/Persistent/etc/webapi_rest/events.xml +++ b/app/code/Magento/Persistent/etc/webapi_rest/events.xml @@ -7,33 +7,33 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="customer_data_object_login"> - <observer name="persistent" instance="Magento\Persistent\Observer\SynchronizePersistentOnLoginObserver" method="execute" /> + <observer name="persistent" instance="Magento\Persistent\Observer\SynchronizePersistentOnLoginObserver" /> </event> <event name="customer_logout"> - <observer name="persistent" instance="Magento\Persistent\Observer\SynchronizePersistentOnLogoutObserver" method="execute" /> + <observer name="persistent" instance="Magento\Persistent\Observer\SynchronizePersistentOnLogoutObserver" /> </event> <event name="layout_generate_blocks_after"> - <observer name="persistent" instance="Magento\Persistent\Observer\ApplyPersistentDataObserver" method="execute" /> + <observer name="persistent" instance="Magento\Persistent\Observer\ApplyPersistentDataObserver" /> </event> <event name="checkout_allow_guest"> - <observer name="persistent" instance="Magento\Persistent\Observer\DisableGuestCheckoutObserver" method="execute" /> + <observer name="persistent" instance="Magento\Persistent\Observer\DisableGuestCheckoutObserver" /> </event> <event name="customer_customer_authenticated"> - <observer name="persistent" instance="Magento\Persistent\Observer\CustomerAuthenticatedEventObserver" method="execute" /> + <observer name="persistent" instance="Magento\Persistent\Observer\CustomerAuthenticatedEventObserver" /> </event> <event name="sales_quote_save_before"> - <observer name="persistent" instance="Magento\Persistent\Observer\SetQuotePersistentDataObserver" method="execute" /> + <observer name="persistent" instance="Magento\Persistent\Observer\SetQuotePersistentDataObserver" /> </event> <event name="custom_quote_process"> - <observer name="persistent" instance="Magento\Persistent\Observer\SetLoadPersistentQuoteObserver" method="execute" /> + <observer name="persistent" instance="Magento\Persistent\Observer\SetLoadPersistentQuoteObserver" /> </event> <event name="customer_register_success"> - <observer name="persistent" instance="Magento\Persistent\Observer\RemovePersistentCookieObserver" method="execute" /> + <observer name="persistent" instance="Magento\Persistent\Observer\RemovePersistentCookieObserver" /> </event> <event name="render_block"> - <observer name="persistent" instance="Magento\Persistent\Observer\ApplyBlockPersistentDataObserver" method="execute" /> + <observer name="persistent" instance="Magento\Persistent\Observer\ApplyBlockPersistentDataObserver" /> </event> <event name="update_customer_cookies"> - <observer name="persistent" instance="Magento\Persistent\Observer\UpdateCustomerCookiesObserver" method="execute" /> + <observer name="persistent" instance="Magento\Persistent\Observer\UpdateCustomerCookiesObserver" /> </event> </config> diff --git a/app/code/Magento/Persistent/etc/webapi_soap/events.xml b/app/code/Magento/Persistent/etc/webapi_soap/events.xml index c11bdcb0faa3666e01a7ef27eec16d296cce6eb6..2c2205ae49eddf51f38842037f84271b06574c65 100644 --- a/app/code/Magento/Persistent/etc/webapi_soap/events.xml +++ b/app/code/Magento/Persistent/etc/webapi_soap/events.xml @@ -7,33 +7,33 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="customer_data_object_login"> - <observer name="persistent" instance="Magento\Persistent\Observer\SynchronizePersistentOnLoginObserver" method="execute" /> + <observer name="persistent" instance="Magento\Persistent\Observer\SynchronizePersistentOnLoginObserver" /> </event> <event name="customer_logout"> - <observer name="persistent" instance="Magento\Persistent\Observer\SynchronizePersistentOnLogoutObserver" method="execute" /> + <observer name="persistent" instance="Magento\Persistent\Observer\SynchronizePersistentOnLogoutObserver" /> </event> <event name="layout_generate_blocks_after"> - <observer name="persistent" instance="Magento\Persistent\Observer\ApplyPersistentDataObserver" method="execute" /> + <observer name="persistent" instance="Magento\Persistent\Observer\ApplyPersistentDataObserver" /> </event> <event name="checkout_allow_guest"> - <observer name="persistent" instance="Magento\Persistent\Observer\DisableGuestCheckoutObserver" method="execute" /> + <observer name="persistent" instance="Magento\Persistent\Observer\DisableGuestCheckoutObserver" /> </event> <event name="customer_customer_authenticated"> - <observer name="persistent" instance="Magento\Persistent\Observer\CustomerAuthenticatedEventObserver" method="execute" /> + <observer name="persistent" instance="Magento\Persistent\Observer\CustomerAuthenticatedEventObserver" /> </event> <event name="sales_quote_save_before"> - <observer name="persistent" instance="Magento\Persistent\Observer\SetQuotePersistentDataObserver" method="execute" /> + <observer name="persistent" instance="Magento\Persistent\Observer\SetQuotePersistentDataObserver" /> </event> <event name="custom_quote_process"> - <observer name="persistent" instance="Magento\Persistent\Observer\SetLoadPersistentQuoteObserver" method="execute" /> + <observer name="persistent" instance="Magento\Persistent\Observer\SetLoadPersistentQuoteObserver" /> </event> <event name="customer_register_success"> - <observer name="persistent" instance="Magento\Persistent\Observer\RemovePersistentCookieObserver" method="execute" /> + <observer name="persistent" instance="Magento\Persistent\Observer\RemovePersistentCookieObserver" /> </event> <event name="render_block"> - <observer name="persistent" instance="Magento\Persistent\Observer\ApplyBlockPersistentDataObserver" method="execute" /> + <observer name="persistent" instance="Magento\Persistent\Observer\ApplyBlockPersistentDataObserver" /> </event> <event name="update_customer_cookies"> - <observer name="persistent" instance="Magento\Persistent\Observer\UpdateCustomerCookiesObserver" method="execute" /> + <observer name="persistent" instance="Magento\Persistent\Observer\UpdateCustomerCookiesObserver" /> </event> </config> diff --git a/app/code/Magento/ProductAlert/Model/Email.php b/app/code/Magento/ProductAlert/Model/Email.php index bb474f7080a0e6e551e6fbbc9f038ca6809493b4..c8f8bd6c5301436391f80e9874566b0b2087c548 100644 --- a/app/code/Magento/ProductAlert/Model/Email.php +++ b/app/code/Magento/ProductAlert/Model/Email.php @@ -117,7 +117,7 @@ class Email extends \Magento\Framework\Model\AbstractModel * @param \Magento\Customer\Helper\View $customerHelper * @param \Magento\Store\Model\App\Emulation $appEmulation * @param \Magento\Framework\Mail\Template\TransportBuilder $transportBuilder - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -132,7 +132,7 @@ class Email extends \Magento\Framework\Model\AbstractModel \Magento\Customer\Helper\View $customerHelper, \Magento\Store\Model\App\Emulation $appEmulation, \Magento\Framework\Mail\Template\TransportBuilder $transportBuilder, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/ProductAlert/Model/Price.php b/app/code/Magento/ProductAlert/Model/Price.php index e3abeb881be4b1c88baaab70629e879a4c79c477..2d6e3535d7004e9f82767db103e6b72e7e696ee9 100644 --- a/app/code/Magento/ProductAlert/Model/Price.php +++ b/app/code/Magento/ProductAlert/Model/Price.php @@ -42,7 +42,7 @@ class Price extends \Magento\Framework\Model\AbstractModel * @param \Magento\Framework\Model\Context $context * @param \Magento\Framework\Registry $registry * @param \Magento\ProductAlert\Model\ResourceModel\Price\Customer\CollectionFactory $customerColFactory - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -50,7 +50,7 @@ class Price extends \Magento\Framework\Model\AbstractModel \Magento\Framework\Model\Context $context, \Magento\Framework\Registry $registry, \Magento\ProductAlert\Model\ResourceModel\Price\Customer\CollectionFactory $customerColFactory, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/ProductAlert/Model/ResourceModel/AbstractResource.php b/app/code/Magento/ProductAlert/Model/ResourceModel/AbstractResource.php index ed029f001f6e6e23dfe9b026f14567bdcc4d067d..3d12079b84c8b9a883a1a444c2ac58009b27a976 100644 --- a/app/code/Magento/ProductAlert/Model/ResourceModel/AbstractResource.php +++ b/app/code/Magento/ProductAlert/Model/ResourceModel/AbstractResource.php @@ -10,7 +10,7 @@ namespace Magento\ProductAlert\Model\ResourceModel; * * @author Magento Core Team <core@magentocommerce.com> */ -abstract class AbstractResource extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +abstract class AbstractResource extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Retrieve alert row by object parameters diff --git a/app/code/Magento/ProductAlert/Model/ResourceModel/Price.php b/app/code/Magento/ProductAlert/Model/ResourceModel/Price.php index f547c2c6175413f16b2ad23e52fad5fedeb39cba..e070ec58bfad2e59de7c00205f9f83e7459aaa25 100644 --- a/app/code/Magento/ProductAlert/Model/ResourceModel/Price.php +++ b/app/code/Magento/ProductAlert/Model/ResourceModel/Price.php @@ -19,12 +19,12 @@ class Price extends \Magento\ProductAlert\Model\ResourceModel\AbstractResource protected $_dateFactory; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Framework\Stdlib\DateTime\DateTimeFactory $dateFactory * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Framework\Stdlib\DateTime\DateTimeFactory $dateFactory, $connectionName = null ) { diff --git a/app/code/Magento/ProductAlert/Model/ResourceModel/Price/Collection.php b/app/code/Magento/ProductAlert/Model/ResourceModel/Price/Collection.php index 03ec7819ce791ce7148b335ddd949901b3b6ec3a..4960fda5758c2246eb0fa3d098657f223bf5ff73 100644 --- a/app/code/Magento/ProductAlert/Model/ResourceModel/Price/Collection.php +++ b/app/code/Magento/ProductAlert/Model/ResourceModel/Price/Collection.php @@ -10,7 +10,7 @@ namespace Magento\ProductAlert\Model\ResourceModel\Price; * * @author Magento Core Team <core@magentocommerce.com> */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Define price collection diff --git a/app/code/Magento/ProductAlert/Model/ResourceModel/Stock.php b/app/code/Magento/ProductAlert/Model/ResourceModel/Stock.php index 944f722ea5e8944e4848a36fc6b9c43dc6aea986..bba6ee1eed2d0b0ff21acdb44f0ad9ed013e6b1a 100644 --- a/app/code/Magento/ProductAlert/Model/ResourceModel/Stock.php +++ b/app/code/Magento/ProductAlert/Model/ResourceModel/Stock.php @@ -19,12 +19,12 @@ class Stock extends \Magento\ProductAlert\Model\ResourceModel\AbstractResource protected $_dateFactory; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Framework\Stdlib\DateTime\DateTimeFactory $dateFactory * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Framework\Stdlib\DateTime\DateTimeFactory $dateFactory, $connectionName = null ) { diff --git a/app/code/Magento/ProductAlert/Model/ResourceModel/Stock/Collection.php b/app/code/Magento/ProductAlert/Model/ResourceModel/Stock/Collection.php index 782c36ca421fc3eb48972b6312ca1dd730aa987e..3a31c14a640ef817a4ac933775e18efe31745b11 100644 --- a/app/code/Magento/ProductAlert/Model/ResourceModel/Stock/Collection.php +++ b/app/code/Magento/ProductAlert/Model/ResourceModel/Stock/Collection.php @@ -10,7 +10,7 @@ namespace Magento\ProductAlert\Model\ResourceModel\Stock; * * @author Magento Core Team <core@magentocommerce.com> */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Define stock collection diff --git a/app/code/Magento/ProductAlert/Model/Stock.php b/app/code/Magento/ProductAlert/Model/Stock.php index 07efb59ecfbe1b63136315afb6d9344fe2fbc504..54fbedf89839ed755bccd6e3b1aa53c955bdfc43 100644 --- a/app/code/Magento/ProductAlert/Model/Stock.php +++ b/app/code/Magento/ProductAlert/Model/Stock.php @@ -40,7 +40,7 @@ class Stock extends \Magento\Framework\Model\AbstractModel * @param \Magento\Framework\Model\Context $context * @param \Magento\Framework\Registry $registry * @param \Magento\ProductAlert\Model\ResourceModel\Stock\Customer\CollectionFactory $customerColFactory - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -48,7 +48,7 @@ class Stock extends \Magento\Framework\Model\AbstractModel \Magento\Framework\Model\Context $context, \Magento\Framework\Registry $registry, \Magento\ProductAlert\Model\ResourceModel\Stock\Customer\CollectionFactory $customerColFactory, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/ProductVideo/Block/Adminhtml/Product/Edit/NewVideo.php b/app/code/Magento/ProductVideo/Block/Adminhtml/Product/Edit/NewVideo.php index 6be990b549ceaed78dd80e8a6078d97167e16c5f..fbc2132db4999b1ee5993bb86656f4f43142f606 100644 --- a/app/code/Magento/ProductVideo/Block/Adminhtml/Product/Edit/NewVideo.php +++ b/app/code/Magento/ProductVideo/Block/Adminhtml/Product/Edit/NewVideo.php @@ -12,6 +12,11 @@ use Magento\Framework\Data\Form\Element\Fieldset; */ class NewVideo extends \Magento\Backend\Block\Widget\Form\Generic { + /** + * @var \Magento\ProductVideo\Helper\Media + */ + protected $mediaHelper; + /** * @var \Magento\Framework\Json\EncoderInterface */ @@ -19,6 +24,7 @@ class NewVideo extends \Magento\Backend\Block\Widget\Form\Generic /** * @param \Magento\Backend\Block\Template\Context $context + * @param \Magento\ProductVideo\Helper\Media $mediaHelper * @param \Magento\Framework\Json\EncoderInterface $jsonEncoder * @param \Magento\Framework\Registry $registry * @param \Magento\Framework\Data\FormFactory $formFactory @@ -29,9 +35,11 @@ class NewVideo extends \Magento\Backend\Block\Widget\Form\Generic \Magento\Framework\Registry $registry, \Magento\Framework\Data\FormFactory $formFactory, \Magento\Framework\Json\EncoderInterface $jsonEncoder, + \Magento\ProductVideo\Helper\Media $mediaHelper, array $data = [] ) { parent::__construct($context, $registry, $formFactory, $data); + $this->mediaHelper = $mediaHelper; $this->jsonEncoder = $jsonEncoder; $this->setUseContainer(true); } @@ -171,6 +179,11 @@ class NewVideo extends \Magento\Backend\Block\Widget\Form\Generic $this->setForm($form); } + /** + * Get html id + * + * @return mixed + */ public function getHtmlId() { if (null === $this->getData('id')) { @@ -180,6 +193,8 @@ class NewVideo extends \Magento\Backend\Block\Widget\Form\Generic } /** + * Get widget options + * * @return string */ public function getWidgetOptions() @@ -189,6 +204,7 @@ class NewVideo extends \Magento\Backend\Block\Widget\Form\Generic 'saveVideoUrl' => $this->getUrl('catalog/product_gallery/upload'), 'saveRemoteVideoUrl' => $this->getUrl('product_video/product_gallery/retrieveImage'), 'htmlId' => $this->getHtmlId(), + 'youTubeApiKey' => $this->mediaHelper->getYouTubeApiKey() ] ); } @@ -214,8 +230,9 @@ class NewVideo extends \Magento\Backend\Block\Widget\Form\Generic */ protected function addMediaRoleAttributes(Fieldset $fieldset) { + $fieldset->addField('roleLabel', 'note', ['text' => __('Role')]); $mediaRoles = $this->getProduct()->getMediaAttributes(); - asort($mediaRoles); + ksort($mediaRoles); foreach ($mediaRoles as $mediaRole) { $fieldset->addField( 'video_' . $mediaRole->getAttributeCode(), diff --git a/app/code/Magento/ProductVideo/Block/Product/View/Gallery.php b/app/code/Magento/ProductVideo/Block/Product/View/Gallery.php index ce93d93700a5df5dd4713c9c692a8d156e6cc412..8643a8bec34b280fca3e2976d103b849e0ba3f63 100644 --- a/app/code/Magento/ProductVideo/Block/Product/View/Gallery.php +++ b/app/code/Magento/ProductVideo/Block/Product/View/Gallery.php @@ -18,11 +18,6 @@ class Gallery extends \Magento\Catalog\Block\Product\View\Gallery */ protected $mediaHelper; - /** - * @var \Magento\Framework\Json\EncoderInterface - */ - private $jsonEncoder; - /** * @param \Magento\Catalog\Block\Product\Context $context * @param \Magento\Framework\Stdlib\ArrayUtils $arrayUtils @@ -33,17 +28,17 @@ class Gallery extends \Magento\Catalog\Block\Product\View\Gallery public function __construct( \Magento\Catalog\Block\Product\Context $context, \Magento\Framework\Stdlib\ArrayUtils $arrayUtils, - \Magento\ProductVideo\Helper\Media $mediaHelper, \Magento\Framework\Json\EncoderInterface $jsonEncoder, + \Magento\ProductVideo\Helper\Media $mediaHelper, array $data = [] ) { parent::__construct( $context, $arrayUtils, + $jsonEncoder, $data ); $this->mediaHelper = $mediaHelper; - $this->jsonEncoder = $jsonEncoder; } /** diff --git a/app/code/Magento/ProductVideo/Helper/Media.php b/app/code/Magento/ProductVideo/Helper/Media.php index 5d7abc74aedc180cdd055c6571564fcefe39a012..657c81f3aaedeac0506cdf976f216b610a318f4a 100644 --- a/app/code/Magento/ProductVideo/Helper/Media.php +++ b/app/code/Magento/ProductVideo/Helper/Media.php @@ -7,6 +7,7 @@ namespace Magento\ProductVideo\Helper; use Magento\Framework\App\Area; +use Magento\Framework\App\Helper\Context; use Magento\Framework\View\ConfigInterface; use Magento\Framework\View\DesignInterface; @@ -40,6 +41,11 @@ class Media extends \Magento\Framework\App\Helper\AbstractHelper */ const MEDIA_TYPE_CONFIG_NODE = 'videos'; + /** + * Configuration path + */ + const XML_PATH_YOUTUBE_API_KEY = 'catalog/product_video/youtube_api_key'; + /** * @var ConfigInterface */ @@ -60,11 +66,14 @@ class Media extends \Magento\Framework\App\Helper\AbstractHelper /** * @param ConfigInterface $configInterface * @param DesignInterface $designInterface + * @param Context $context */ public function __construct( ConfigInterface $configInterface, - DesignInterface $designInterface + DesignInterface $designInterface, + Context $context ) { + parent::__construct($context); $this->viewConfig = $configInterface; $this->currentTheme = $designInterface->getDesignTheme(); $this->initConfig(); @@ -139,4 +148,14 @@ class Media extends \Magento\Framework\App\Helper\AbstractHelper return $videoAttributes[self::NODE_CONFIG_VIDEO_AUTO_RESTART]; } } + + /** + * Retrieve YouTube API key + * + * @return string + */ + public function getYouTubeApiKey() + { + return $this->scopeConfig->getValue(self::XML_PATH_YOUTUBE_API_KEY); + } } diff --git a/app/code/Magento/ProductVideo/Model/Observer.php b/app/code/Magento/ProductVideo/Observer/ChangeTemplateObserver.php similarity index 50% rename from app/code/Magento/ProductVideo/Model/Observer.php rename to app/code/Magento/ProductVideo/Observer/ChangeTemplateObserver.php index 286b77edc914eec938e483e8e575b1797f0b2374..9e6ea919d6a0bc3ad286a77ccb7a32d3c7452e87 100644 --- a/app/code/Magento/ProductVideo/Model/Observer.php +++ b/app/code/Magento/ProductVideo/Observer/ChangeTemplateObserver.php @@ -4,16 +4,18 @@ * See COPYING.txt for license details. */ -namespace Magento\ProductVideo\Model; +namespace Magento\ProductVideo\Observer; +use Magento\Framework\Event\ObserverInterface; -class Observer +class ChangeTemplateObserver implements ObserverInterface { /** * @param mixed $observer + * @SuppressWarnings(PHPMD.UnusedFormalParameter) * @return void */ - public function changeTemplate($observer) + public function execute(\Magento\Framework\Event\Observer $observer) { $observer->getBlock()->setTemplate('Magento_ProductVideo::helper/gallery.phtml'); } diff --git a/app/code/Magento/ProductVideo/Test/Unit/Block/Adminhtml/Product/Edit/NewVideoTest.php b/app/code/Magento/ProductVideo/Test/Unit/Block/Adminhtml/Product/Edit/NewVideoTest.php index 55fe3af0f92a436b1757a96005a84a3992cd1e14..e07d3144baa89d6cdb5c93e99f18b71e32980042 100644 --- a/app/code/Magento/ProductVideo/Test/Unit/Block/Adminhtml/Product/Edit/NewVideoTest.php +++ b/app/code/Magento/ProductVideo/Test/Unit/Block/Adminhtml/Product/Edit/NewVideoTest.php @@ -86,7 +86,8 @@ class NewVideoTest extends \PHPUnit_Framework_TestCase $value = [ 'saveVideoUrl' => $saveVideoUrl, 'saveRemoteVideoUrl' => $saveRemoteVideoUrl, - 'htmlId' => 'id_' . $rand + 'htmlId' => 'id_' . $rand, + 'youTubeApiKey' => null ]; $this->jsonEncoderMock->expects($this->once())->method('encode')->with( $value diff --git a/app/code/Magento/ProductVideo/Test/Unit/Model/ObserverTest.php b/app/code/Magento/ProductVideo/Test/Unit/Observer/ChangeTemplateObserverTest.php similarity index 64% rename from app/code/Magento/ProductVideo/Test/Unit/Model/ObserverTest.php rename to app/code/Magento/ProductVideo/Test/Unit/Observer/ChangeTemplateObserverTest.php index c1d60d275205cb6f77f5b7ca0567c43e04357b84..8ab0900fc9d1d1b33f1a0ba0396071886f4a8426 100644 --- a/app/code/Magento/ProductVideo/Test/Unit/Model/ObserverTest.php +++ b/app/code/Magento/ProductVideo/Test/Unit/Observer/ChangeTemplateObserverTest.php @@ -4,10 +4,9 @@ * See COPYING.txt for license details. */ -namespace Magento\ProductVideo\Test\Unit\Model; +namespace Magento\ProductVideo\Test\Unit\Observer; - -class ObserverTest extends \PHPUnit_Framework_TestCase +class ChangeTemplateObserverTest extends \PHPUnit_Framework_TestCase { public function testChangeTemplate() { @@ -20,13 +19,13 @@ class ObserverTest extends \PHPUnit_Framework_TestCase */ $block = $this->getMock('\Magento\ProductVideo\Block\Adminhtml\Product\Edit\NewVideo', [], [], '', false); $block->expects($this->once()) - ->method('setTemplate') - ->with('Magento_ProductVideo::helper/gallery.phtml') - ->willReturnSelf(); + ->method('setTemplate') + ->with('Magento_ProductVideo::helper/gallery.phtml') + ->willReturnSelf(); $observer->expects($this->once())->method('__call')->with('getBlock')->willReturn($block); - /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\ProductVideo\Model\Observer $model */ - $model = $this->getMock('\Magento\ProductVideo\Model\Observer', null, [], '', false); - $model->changeTemplate($observer); + /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\ProductVideo\Observer\ChangeTemplateObserver $unit */ + $unit = $this->getMock('Magento\ProductVideo\Observer\ChangeTemplateObserver', null, [], '', false); + $unit->execute($observer); } } diff --git a/app/code/Magento/ProductVideo/etc/adminhtml/events.xml b/app/code/Magento/ProductVideo/etc/adminhtml/events.xml index f543abe50d25df24061b7298bfab092d89643dd6..70b28eefce90e40b92f667248a7ac68f65658ed3 100644 --- a/app/code/Magento/ProductVideo/etc/adminhtml/events.xml +++ b/app/code/Magento/ProductVideo/etc/adminhtml/events.xml @@ -7,6 +7,6 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="catalog_product_gallery_prepare_layout"> - <observer name="change_template" instance="Magento\ProductVideo\Model\Observer" method="changeTemplate" /> + <observer name="change_template" instance="Magento\ProductVideo\Observer\ChangeTemplateObserver" /> </event> </config> diff --git a/app/code/Magento/ProductVideo/etc/adminhtml/system.xml b/app/code/Magento/ProductVideo/etc/adminhtml/system.xml new file mode 100644 index 0000000000000000000000000000000000000000..f475ab5b70d54cb2a671e5cf41c0b1b1116f7d4b --- /dev/null +++ b/app/code/Magento/ProductVideo/etc/adminhtml/system.xml @@ -0,0 +1,19 @@ +<?xml version="1.0"?> +<!-- +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +--> +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Config:etc/system_file.xsd"> + <system> + <section id="catalog"> + <group id="product_video" translate="label" type="text" sortOrder="350" showInDefault="1" showInWebsite="1" showInStore="1"> + <label>Product Video</label> + <field id="youtube_api_key" translate="label" type="text" sortOrder="20" showInDefault="1" showInWebsite="1" showInStore="1"> + <label>YouTube API key</label> + </field> + </group> + </section> + </system> +</config> diff --git a/app/code/Magento/ProductVideo/view/adminhtml/layout/catalog_product_new.xml b/app/code/Magento/ProductVideo/view/adminhtml/layout/catalog_product_new.xml index eff4727524c00cbcde913abfb8ca5395199165e7..000134b212f98a4452f89a9efb848d9797a06486 100755 --- a/app/code/Magento/ProductVideo/view/adminhtml/layout/catalog_product_new.xml +++ b/app/code/Magento/ProductVideo/view/adminhtml/layout/catalog_product_new.xml @@ -7,7 +7,6 @@ --> <page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="admin-2columns-left" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"> <head> - <css src="Magento_ProductVideo::css/productvideo.css"/> <link src="Magento_ProductVideo::js/get-video-information.js"/> </head> <body> diff --git a/app/code/Magento/ProductVideo/view/adminhtml/templates/product/edit/slideout/form.phtml b/app/code/Magento/ProductVideo/view/adminhtml/templates/product/edit/slideout/form.phtml index 6e2418f119622fbf9f5d352bca0afea590eae6c0..50d5324fc43e6b5fadb082b61c5dceee79bed424 100644 --- a/app/code/Magento/ProductVideo/view/adminhtml/templates/product/edit/slideout/form.phtml +++ b/app/code/Magento/ProductVideo/view/adminhtml/templates/product/edit/slideout/form.phtml @@ -17,7 +17,7 @@ }); }); </script> - <div id="video-player-preview-location"> + <div id="video-player-preview-location" class="video-player-sidebar"> <div class="video-player-container"></div> <div class="video-information title"> <label><?php /* @escapeNotVerified */ echo __('Title:') ?> </label><span></span> diff --git a/app/code/Magento/ProductVideo/view/adminhtml/web/css/productvideo.css b/app/code/Magento/ProductVideo/view/adminhtml/web/css/productvideo.css deleted file mode 100755 index e2aa3047a68925dd1d7bd50909d12024ac67abc8..0000000000000000000000000000000000000000 --- a/app/code/Magento/ProductVideo/view/adminhtml/web/css/productvideo.css +++ /dev/null @@ -1,261 +0,0 @@ - /** - * Copyright © 2015 Magento. All rights reserved. - * See COPYING.txt for license details. - */ -.image.video-placeholder { - position: relative; - display: inline-block; - text-decoration: none; -} - -.image.video-placeholder:before { - background: url(../images/gallery-sprite.png) no-repeat left bottom; - content: ''; - position: absolute; - height: 49px; - width: 49px; - left: 50%; - top: 18px; - margin-left: -24px; - opacity: 0.7; - z-index: 1; -} - -.video-placeholder .image-placeholder-text { - font-weight: 400; -} - -.admin__field.field-video_image .admin__field-control, -.admin__field.field-video_small_image .admin__field-control, -.admin__field.field-video_thumbnail .admin__field-control, -.admin__field.field-video_swatch_image .admin__field-control, -.admin__field.field-new_video_disabled .admin__field-control { - width: 82px; - margin-left: calc((100%) * .33333333 - 30px); -} - -.admin__field.field-video_image .admin__field-control input, -.admin__field.field-video_small_image .admin__field-control input, -.admin__field.field-video_thumbnail .admin__field-control input, -.admin__field.field-video_swatch_image .admin__field-control input, -.admin__field.field-new_video_disabled .admin__field-control input { - float: right; -} - -.admin__field.field-video_image .admin__field-label, -.admin__field.field-video_small_image .admin__field-label, -.admin__field.field-video_thumbnail .admin__field-label, -.admin__field.field-video_swatch_image .admin__field-label, -.admin__field.field-new_video_disabled .admin__field-label { - width: 200px; - position: absolute; - margin-left: calc((100%) * .33333333 - 30px + 90px); - left: 0px; -} - -.admin__field.field-video_image .admin__field-label:before, -.admin__field.field-video_small_image .admin__field-label:before, -.admin__field.field-video_thumbnail .admin__field-label:before, -.admin__field.field-video_swatch_image .admin__field-label:before, -.admin__field.field-new_video_disabled .admin__field-label:before { - content: none; -} - -.admin__field.field-video_image .admin__field-label span, -.admin__field.field-video_small_image .admin__field-label span, -.admin__field.field-video_thumbnail .admin__field-label span, -.admin__field.field-video_swatch_image .admin__field-label span, -.admin__field.field-new_video_disabled .admin__field-label span { - float: left; -} - -.admin__field.field-video_image, -.admin__field.field-video_small_image, -.admin__field.field-video_thumbnail, -.admin__field.field-video_swatch_image { - margin-bottom: 20px !important; -} - -.admin__field.field-new_video_disabled { - margin-top: 32px !important; -} - -.admin__field.field-video_image .admin__field-control { - position: relative; -} - -.admin__field.field-video_image .admin__field-control:after { - content: 'Role'; - position: absolute; - color: #000; - width: 34px; - height: 20px; - left: 1px; - top: -2px; - font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; - font-size: 1.4rem; - font-weight: 600; -} - -.preview_hidden_image_input_button { - display: none; -} - -.video-item { - position: relative; -} - -.video-item:after { - content: ''; - position: absolute; - bottom: 0; - right: 0; - background: url(../images/gallery-sprite.png) bottom left; - width: 49px; - height: 40px; - z-index: 3; - left: 0; - top: 10px; - margin: auto; -} - -.mage-new-video-dialog #new_video_form { - width: 65%; - float: left; -} - -.mage-new-video-dialog #video-player-preview-location { - width: 34.99999%; - float: left; -} - -.video-player-container { - width: 100%; - height: 20vw; - margin-bottom: 30px; - border: 1px solid #e3e3e3; - position: relative; -} - -.video-player-container:after { - content: ''; - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - margin: auto; - width: 93px; - height: 60px; - background: url(../images/camera.png) no-repeat center; - z-index: 1; -} - -.video-information { - margin-bottom: 7px; - display: none; -} - -.video-information:after { - content: " "; /* Older browser do not support empty content */ - visibility: hidden; - display: block; - height: 0; - clear: both; -} - -.video-information label { - font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; - font-size: 1.4rem; - font-weight: 600; - display: block; - width: 25%; - float: left; - text-align: right; -} - -.video-information span { - font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; - font-size: 1.4rem; - font-weight: 300; - display: block; - width: 74.9999%; - float: left; - padding-left: 20px; -} - -.product-video { - width: 100%; - z-index: 20; - height: 100%; - position: relative; -} - -.image.video-placeholder > button[data-role="add-video-button"], -.image.video-placeholder > button { - width: 100%; - height: 100%; - border: 0; - background: transparent; - z-index: 10; - position: relative; -} - -.add-video-button-container { - float: right; - margin-bottom: 10px; -} - -.admin__field.field.field-new_video_screenshot { - margin-bottom: 5px; -} - -.admin__field.field.field-new_video_screenshot_preview { - margin-bottom: 50px; -} - -.image .action-make-base:after { - -webkit-font-smoothing: antialiased; - font-size: 1.8rem; - line-height: inherit; - color: #9e9e9e; - content: '\e63b'; - font-family: 'Admin Icons'; - vertical-align: middle; - display: inline-block; - font-weight: normal; - overflow: hidden; - speak: none; - text-align: center; - position: absolute; - top: -7px; - left: -4px; -} - -.image .action-make-base:hover:after { - color: #7d7d7d; -} - -.admin__scope-old .gallery .image .action-make-base { - border: 0; - width: 0; - height: 0; - position: absolute; - margin: 0; - bottom: 9px; - right: 9px; - left: auto; - background: transparent; -} - -.image .action-make-base span { - display: none; -} - -.admin__scope-old .base-image .image-label { - display: block; -} - -.image.base-image:hover .image-label { - display: none; -} diff --git a/app/code/Magento/ProductVideo/view/adminhtml/web/js/get-video-information.js b/app/code/Magento/ProductVideo/view/adminhtml/web/js/get-video-information.js index d692aaf4eccf6c56a26f9bbd3e0dea29a125f874..52171f1537a254ef6b19645419a8951bd0b39083 100644 --- a/app/code/Magento/ProductVideo/view/adminhtml/web/js/get-video-information.js +++ b/app/code/Magento/ProductVideo/view/adminhtml/web/js/get-video-information.js @@ -322,7 +322,10 @@ require([ $.widget('mage.videoData', { options: { - youtubeKey: 'AIzaSyDwqDWuw1lra-LnpJL2Mr02DYuFmkuRSns' //sample data, change later! + youtubeKey: '', + noKeyErrorTxt: 'You have not entered youtube API key. ' + + 'No information about youtube video will be retrieved.', + eventSource: '' //where is data going from - focus out or click on button }, _REQUEST_VIDEO_INFORMATION_TRIGGER: 'update_video_information', @@ -337,6 +340,11 @@ require([ * @private */ _init: function () { + if (!this.options.youtubeKey && this.options.eventSource === 'click') { + alert({ + content: this.options.noKeyErrorTxt + }); + } this._onRequestHandler(); }, @@ -365,18 +373,58 @@ require([ } /** + * + * @param {Object} data * @private */ function _onYouTubeLoaded(data) { var tmp, uploadedFormatted, - respData; + respData, + createErrorMessage; + + /** + * Create errors message + * + * @returns {String} + */ + createErrorMessage = function () { + var error = data.error, + errors = error.errors, + i, + errLength = errors.length, + tmpError, + errReason, + errorsMessage = []; + + for (i = 0; i < errLength; i++) { + tmpError = errors[i]; + errReason = tmpError.reason; + + if (['keyInvalid'].indexOf(errReason) !== -1) { + errorsMessage.push('Youtube API key is an invalid'); + + break; + } - if (data.items.length < 1) { + errorsMessage.push(tmpError.message); + } + + return 'Video can\'t be shown by reason: ' + $.unique(errorsMessage).join(', '); + }; + + if (data.error && data.error.code === 400) { + this._onRequestError(createErrorMessage()); + + return; + } + + if (!data.items || data.items.length < 1) { this._onRequestError('Video not found'); return; } + tmp = data.items[0]; uploadedFormatted = tmp.snippet.publishedAt.replace('T', ' ').replace(/\..+/g, ''); respData = { @@ -429,8 +477,17 @@ require([ googleapisUrl = 'https://www.googleapis.com/youtube/v3/videos?id=' + id + '&part=snippet,contentDetails,statistics,status&key=' + - this.options.youtubeKey; - $.get(googleapisUrl, $.proxy(_onYouTubeLoaded, this)); + this.options.youtubeKey + '&alt=json&callback=?'; + $.getJSON(googleapisUrl, + { + format: 'json' + }, + $.proxy(_onYouTubeLoaded, self) + ).fail( + function () { + self._onRequestError('Video not found'); + } + ); } else if (type === 'vimeo') { $.getJSON('http://www.vimeo.com/api/v2/video/' + id + '.json?callback=?', { @@ -493,7 +550,8 @@ require([ _validateURL: function (href, forceVideo) { var id, type, - ampersandPosition; + ampersandPosition, + vimeoRegex; if (typeof href !== 'string') { return href; @@ -518,7 +576,10 @@ require([ type = 'youtube'; } else if (href.host.match(/vimeo\.com/)) { type = 'vimeo'; - id = href.pathname.replace(/^\/(video\/)?/, '').replace(/\/.*/, ''); + vimeoRegex = new RegExp(['https?:\\/\\/(?:www\\.)?vimeo.com\\/(?:channels\\/(?:\\w+\\/)', + '?|groups\\/([^\\/]*)\\/videos\\/|album\\/(\\d+)\\/video\\/|)(\\d+)(?:$|\\/|\\?)' + ].join('')); + id = href.href.match(vimeoRegex)[3]; } if ((!id || !type) && forceVideo) { diff --git a/app/code/Magento/ProductVideo/view/adminhtml/web/js/new-video-dialog.js b/app/code/Magento/ProductVideo/view/adminhtml/web/js/new-video-dialog.js index 980ac3a2e4ddb814ba445a8e873d12a5846e7982..e5efb668b51e946a2ae44b0ef3c629b0ed8630e8 100644 --- a/app/code/Magento/ProductVideo/view/adminhtml/web/js/new-video-dialog.js +++ b/app/code/Magento/ProductVideo/view/adminhtml/web/js/new-video-dialog.js @@ -93,7 +93,7 @@ define([ $(this.options.metaData.DOM.uploader).html( '<a href="https://youtube.com/channel/' + this.options.metaData.data.uploaderUrl + - '">' + + '" target="_blank">' + this.options.metaData.data.uploader + '</a>' ); @@ -102,7 +102,7 @@ define([ $(this.options.metaData.DOM.uploader).html( '<a href="' + this.options.metaData.data.uploaderUrl + - '">' + this.options.metaData.data.uploader + + '" target="_blank">' + this.options.metaData.data.uploader + '</a>'); } $('.' + this.options.videoClass).productVideoLoader(); @@ -243,7 +243,10 @@ define([ this._on(events); - this._videoUrlWidget = $(this._videoUrlSelector).videoData(); + this._videoUrlWidget = $(this._videoUrlSelector).videoData({ + youtubeKey: this.options.youTubeApiKey, + eventSource: 'focusout' + }); this._videoInformationGetBtn = $(this._videoInformationBtnSelector); this._videoInformationGetUrlField = $(this._videoUrlSelector); this._videoInformationGetEditBtn = $(this._editVideoBtnSelector); @@ -262,7 +265,10 @@ define([ _onGetVideoInformationClick: function () { this._onlyVideoPlayer = false; this._isEditPage = false; - this._videoInformationGetUrlField.videoData(); + this._videoInformationGetUrlField.videoData({ + youtubeKey: this.options.youTubeApiKey, + eventSource: 'click' + }); this._videoUrlWidget.trigger('update_video_information'); }, @@ -271,7 +277,10 @@ define([ * @private */ _onGetVideoInformationFocusOut: function () { - this._videoInformationGetUrlField.videoData(); + this._videoInformationGetUrlField.videoData({ + youtubeKey: this.options.youTubeApiKey, + eventSource: 'focusout' + }); this._videoUrlWidget.trigger('update_video_information'); }, @@ -282,7 +291,10 @@ define([ _onGetVideoInformationEditClick: function () { this._onlyVideoPlayer = true; this._isEditPage = true; - this._videoInformationGetUrlField.videoData(); + this._videoInformationGetUrlField.videoData({ + youtubeKey: this.options.youTubeApiKey, + eventSource: 'click' + }); this._videoUrlWidget.trigger('update_video_information'); }, diff --git a/app/code/Magento/ProductVideo/view/frontend/layout/catalog_product_view.xml b/app/code/Magento/ProductVideo/view/frontend/layout/catalog_product_view.xml index 81d7989a521f2d0cb270ad9e0adcb07c9c2f99ce..18417e1619da5d56717ce8602c53bf6359d44ac5 100644 --- a/app/code/Magento/ProductVideo/view/frontend/layout/catalog_product_view.xml +++ b/app/code/Magento/ProductVideo/view/frontend/layout/catalog_product_view.xml @@ -7,13 +7,12 @@ --> <page layout="1column" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"> <head> - <css src="Magento_ProductVideo::css/product-video.css"/> <link src="Magento_ProductVideo::js/fotorama-add-video-events.js"/> <link src="Magento_ProductVideo::js/load-player.js"/> </head> <body> <referenceContainer name="product.info.media"> - <block class="Magento\ProductVideo\Block\Product\View\Gallery" name="product.info.media.image" template="product/view/gallery.phtml"/> + <block class="Magento\ProductVideo\Block\Product\View\Gallery" name="product.info.media.video" after="product.info.media.image" template="product/view/gallery.phtml"/> </referenceContainer> </body> </page> diff --git a/app/code/Magento/ProductVideo/view/frontend/requirejs-config.js b/app/code/Magento/ProductVideo/view/frontend/requirejs-config.js index 956dd40b89e3162e72e8ad857d7236aaf4ef16f1..e19b89135b44120160fb5002eb063c5c8bf6f951 100644 --- a/app/code/Magento/ProductVideo/view/frontend/requirejs-config.js +++ b/app/code/Magento/ProductVideo/view/frontend/requirejs-config.js @@ -6,7 +6,6 @@ var config = { map: { '*': { - fotoramaAddVideoEvents: 'Magento_ProductVideo/js/fotorama-add-video-events', loadPlayer: 'Magento_ProductVideo/js/load-player' } } diff --git a/app/code/Magento/ProductVideo/view/frontend/templates/product/view/gallery.phtml b/app/code/Magento/ProductVideo/view/frontend/templates/product/view/gallery.phtml index 192a3f18e2cc62ab1a31768541101187a62bce94..131b9f7e4ff338b345cee5cc92ab56c09cc9a992 100644 --- a/app/code/Magento/ProductVideo/view/frontend/templates/product/view/gallery.phtml +++ b/app/code/Magento/ProductVideo/view/frontend/templates/product/view/gallery.phtml @@ -10,69 +10,12 @@ * @var $block \Magento\ProductVideo\Block\Product\View\Gallery */ ?> -<div class="gallery-placeholder" - data-mage-init='{"fotoramaAddVideoEvents":{}}' - data-fotorama-video-data='<?php /* @escapeNotVerified */ echo $block->getMediaGalleryDataJson(); ?>' - data-fotorama-video-settings='<?php /* @escapeNotVerified */ echo $block->getVideoSettingsJson(); ?>'> -</div> <script type="text/x-magento-init"> { - ".gallery-placeholder": { - "mage/gallery/gallery": { - "mixins":["magnifier/magnify"], - "magnifierOpts": { - "enabled": <?php /* @escapeNotVerified */ - echo $block->getVar("magnifier:enabled", "Magento_Catalog"); ?>, - "eventType": "<?php /* @escapeNotVerified */ - echo $block->getVar("magnifier:action", "Magento_Catalog"); ?>", - "width": "<?php /* @escapeNotVerified */ - echo $block->getVar("magnifier:width", "Magento_Catalog"); ?>", - "height": "<?php /* @escapeNotVerified */ - echo $block->getVar("magnifier:height", "Magento_Catalog"); ?>", - "top": "<?php /* @escapeNotVerified */ - echo $block->getVar("magnifier:top", "Magento_Catalog"); ?>", - "left": "<?php /* @escapeNotVerified */ - echo $block->getVar("magnifier:left", "Magento_Catalog"); ?>" - }, - "data": <?php /* @escapeNotVerified */ - echo $block->getGalleryImagesJson(); ?>, - "options": { - "nav": "<?php /* @escapeNotVerified */ - echo $block->getVar("gallery:nav", "Magento_Catalog"); ?>", - "loop": <?php /* @escapeNotVerified */ - echo $block->getVar("gallery:loop", "Magento_Catalog"); ?>, - "keyboard": <?php /* @escapeNotVerified */ - echo $block->getVar("gallery:keyboard", "Magento_Catalog"); ?>, - "arrows": <?php /* @escapeNotVerified */ - echo $block->getVar("gallery:arrows", "Magento_Catalog"); ?>, - "showCaption": <?php /* @escapeNotVerified */ - echo $block->getVar("gallery:showCaption", "Magento_Catalog"); ?>, - "width": <?php /* @escapeNotVerified */ - echo $block->getImageAttribute('product_page_image_medium', 'width'); ?>, - "thumbwidth": <?php /* @escapeNotVerified */ - echo $block->getImageAttribute('product_page_image_small', 'width'); ?>, - "thumbheight": <?php /* @escapeNotVerified */ - echo $block->getImageAttribute('product_page_image_small', 'height') - ?: $block->getImageAttribute('product_page_image_small', 'width'); ?>, - "height": <?php /* @escapeNotVerified */ - echo $block->getImageAttribute('product_page_image_medium', 'height') - ?: $block->getImageAttribute('product_page_image_medium', 'width'); ?> - }, - "breakpoints": { - "mobile": { - "conditions": { - "max-width": "767px" - }, - "options": { - "options": { - "nav": "dots" - }, - "magnifierOpts": { - "enabled": false - } - } - } - } + "[data-gallery-role=gallery-placeholder]": { + "Magento_ProductVideo/js/fotorama-add-video-events": { + "fotoramaVideoData": <?php /* @escapeNotVerified */ echo $block->getMediaGalleryDataJson(); ?>, + "fotoramaVideoSettings": <?php /* @escapeNotVerified */ echo $block->getVideoSettingsJson(); ?> } } } diff --git a/app/code/Magento/ProductVideo/view/frontend/web/css/product-video.css b/app/code/Magento/ProductVideo/view/frontend/web/css/product-video.css deleted file mode 100644 index 0198f8c98ecb9fe70db81e8259a78cc554f4488f..0000000000000000000000000000000000000000 --- a/app/code/Magento/ProductVideo/view/frontend/web/css/product-video.css +++ /dev/null @@ -1,75 +0,0 @@ -/** - * Copyright © 2015 Magento. All rights reserved. - * See COPYING.txt for license details. - */ - -.fotorama-video-container.video-unplayed:after { - content: ''; - position: absolute; - bottom: 0; - right: 0; - background: url(../img/gallery-sprite.png) bottom right; - width: 100px; - height: 100px; - left: 0; - top: 12px; - margin: auto; -} -.fotorama-video-container .magnify-lens { - display: none !important; -} -.fotorama-video-container.video-unplayed:hover img { - opacity: 0.6; -} -.fotorama-video-container.video-unplayed:hover:after { - transform: scale(1.25); -} -.video-thumb-icon:after { - content: ''; - position: absolute; - bottom: 0; - right: 0; - background: url(../img/gallery-sprite.png) bottom left; - width: 49px; - height: 40px; - left: 0; - top: 10px; - margin: auto; -} -.video-timing { - width: auto; - height: 30px; - background: rgba(0, 0, 0, 0.75); - padding: 0 17px; - color: #fff; - position: absolute; - right: 0; - line-height: 2; - transition: 0.3s; - bottom: -30px; -} -.video-timing.fadeIn { - bottom: 0; -} -.product-video { - position: absolute; - top: 0; - width: 100%; - height: 85%; - margin-top: 15%; -} -.product-video iframe { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - z-index: 9999; -} -.fotorama__arr.hidden-video { - z-index: -1; -} -.fotorama__video-close { - bottom: 89%; - top: auto; -} diff --git a/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js b/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js index e19d635a72b36f5ba0742142ab901f93de57e2b9..3fa62c44903df5eb4163bd8ca9b0aceaccec1ac4 100644 --- a/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js +++ b/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js @@ -3,7 +3,12 @@ * See COPYING.txt for license details. */ -require(['jquery', 'jquery/ui', 'catalogGallery'], function ($) { +define([ + 'jquery', + 'jquery/ui', + 'catalogGallery', + 'Magento_ProductVideo/js/load-player' +], function ($) { 'use strict'; /** @@ -23,16 +28,15 @@ require(['jquery', 'jquery/ui', 'catalogGallery'], function ($) { function parseURL(href, forceVideo) { var id, type, - ampersandPosition; + ampersandPosition, + vimeoRegex; /** * Get youtube ID - * @param {String} srchref + * @param {String} srcid * @returns {{}} */ - function _getYoutubeId(srchref) { - var srcid = srchref.search.split('v=')[1]; - + function _getYoutubeId(srcid) { if (srcid) { ampersandPosition = srcid.indexOf('&'); @@ -64,7 +68,10 @@ require(['jquery', 'jquery/ui', 'catalogGallery'], function ($) { type = 'youtube'; } else if (href.host.match(/vimeo\.com/)) { type = 'vimeo'; - id = href.pathname.replace(/^\/(video\/)?/, '').replace(/\/.*/, ''); + vimeoRegex = new RegExp(['https?:\\/\\/(?:www\\.)?vimeo.com\\/(?:channels\\/(?:\\w+\\/)', + '?|groups\\/([^\\/]*)\\/videos\\/|album\\/(\\d+)\\/video\\/|)(\\d+)(?:$|\\/|\\?)' + ].join('')); + id = href.href.match(vimeoRegex)[3]; } if ((!id || !type) && forceVideo) { @@ -278,7 +285,6 @@ require(['jquery', 'jquery/ui', 'catalogGallery'], function ($) { _isVideoBase: function () { var allVideoData = this.options.VideoData, videoItem, - videoSettings, allVideoDataKeys, key, i; @@ -288,10 +294,9 @@ require(['jquery', 'jquery/ui', 'catalogGallery'], function ($) { for (i = 0; i < allVideoDataKeys.length; i++) { key = allVideoDataKeys[i]; videoItem = allVideoData[key]; - videoSettings = allVideoData[videoItem]; if ( - videoSettings.mediaType === this.VID && videoSettings.isBase && + videoItem.mediaType === this.VID && videoItem.isBase && this.options.VideoSettings[0].playIfBase ) { this.Base = true; @@ -547,13 +552,12 @@ require(['jquery', 'jquery/ui', 'catalogGallery'], function ($) { } }); - $('.gallery-placeholder').on('fotorama:ready', function () { - $(this).find('.fotorama').AddFotoramaVideoEvents({ - VideoData: $(this).data('fotorama-video-data'), - VideoSettings: $(this).data('fotorama-video-settings') + return function (config, element) { + $('.gallery-placeholder').on('fotorama:ready', function () { + $(element).find('.fotorama').AddFotoramaVideoEvents({ + VideoData: config.fotoramaVideoData || [], + VideoSettings: config.fotoramaVideoSettings || {} + }); }); - //no reason to store video data and settings after - erase it - $(this).removeAttr('data-fotorama-video-data'); - $(this).removeAttr('data-fotorama-video-settings'); - }); + }; }); diff --git a/app/code/Magento/ProductVideo/view/frontend/web/js/load-player.js b/app/code/Magento/ProductVideo/view/frontend/web/js/load-player.js index 1f1c08bbe8db771edc7307e3994cb28b3c75c2c1..937c62ae26cec337fbc03ddc72ed467be5bf9540 100644 --- a/app/code/Magento/ProductVideo/view/frontend/web/js/load-player.js +++ b/app/code/Magento/ProductVideo/view/frontend/web/js/load-player.js @@ -7,7 +7,7 @@ @version 0.0.1 @requires jQuery & jQuery UI */ -require(['jquery', 'jquery/ui'], function ($) { +define(['jquery', 'jquery/ui'], function ($) { 'use strict'; var videoRegister = { diff --git a/app/code/Magento/Quote/Api/Data/PaymentInterface.php b/app/code/Magento/Quote/Api/Data/PaymentInterface.php index e1c10ed65d8ae6cc7bceed35185b106bf26f3878..41d15a6c34cdab296bedc1c8176a4f2db7d79213 100644 --- a/app/code/Magento/Quote/Api/Data/PaymentInterface.php +++ b/app/code/Magento/Quote/Api/Data/PaymentInterface.php @@ -18,16 +18,6 @@ interface PaymentInterface extends \Magento\Framework\Api\ExtensibleDataInterfac const KEY_METHOD = 'method'; - const KEY_CC_OWNER = 'cc_owner'; - - const KEY_CC_NUMBER = 'cc_number'; - - const KEY_CC_TYPE = 'cc_type'; - - const KEY_CC_EXP_YEAR = 'cc_exp_year'; - - const KEY_CC_EXP_MONTH = 'cc_exp_month'; - const KEY_ADDITIONAL_DATA = 'additional_data'; /**#@-*/ @@ -62,81 +52,6 @@ interface PaymentInterface extends \Magento\Framework\Api\ExtensibleDataInterfac */ public function setMethod($method); - /** - * Get credit card owner - * - * @return string|null - */ - public function getCcOwner(); - - /** - * Set credit card owner - * - * @param string $ccOwner - * @return $this - */ - public function setCcOwner($ccOwner); - - /** - * Get credit card number - * - * @return string|null - */ - public function getCcNumber(); - - /** - * Set credit card number - * - * @param string $ccNumber - * @return $this - */ - public function setCcNumber($ccNumber); - - /** - * Get credit card type - * - * @return string|null - */ - public function getCcType(); - - /** - * Set credit card type - * - * @param string $ccType - * @return $this - */ - public function setCcType($ccType); - - /** - * Get credit card expiration year - * - * @return string|null - */ - public function getCcExpYear(); - - /** - * Set credit card expiration year - * - * @param string $ccExpYear - * @return $this - */ - public function setCcExpYear($ccExpYear); - - /** - * Get credit card expiration month - * - * @return string|null - */ - public function getCcExpMonth(); - - /** - * Set credit card expiration month - * - * @param string $ccExpMonth - * @return $this - */ - public function setCcExpMonth($ccExpMonth); - /** * Get payment additional details * diff --git a/app/code/Magento/Quote/Model/Quote.php b/app/code/Magento/Quote/Model/Quote.php index 3a62a0e022278e04302a4a85a1a0aa6c5e00e6b5..29779c1e22ab2d74badb06587ae4b4bd9782333d 100644 --- a/app/code/Magento/Quote/Model/Quote.php +++ b/app/code/Magento/Quote/Model/Quote.php @@ -382,7 +382,7 @@ class Quote extends AbstractExtensibleModel implements \Magento\Quote\Api\Data\C * @param Quote\TotalsReader $totalsReader * @param ShippingFactory $shippingFactory * @param ShippingAssignmentFactory $shippingAssignmentFactory - * @param \Magento\Framework\Model\ModelResource\AbstractResource|null $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource|null $resource * @param \Magento\Framework\Data\Collection\AbstractDb|null $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -425,7 +425,7 @@ class Quote extends AbstractExtensibleModel implements \Magento\Quote\Api\Data\C Quote\TotalsReader $totalsReader, \Magento\Quote\Model\ShippingFactory $shippingFactory, \Magento\Quote\Model\ShippingAssignmentFactory $shippingAssignmentFactory, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Quote/Model/Quote/Address.php b/app/code/Magento/Quote/Model/Quote/Address.php index 47962a6ce147df28cccc1fc021abd22991f3dede..5eafe7ab3695c1f5ba687e516efec4d4296aa19c 100644 --- a/app/code/Magento/Quote/Model/Quote/Address.php +++ b/app/code/Magento/Quote/Model/Quote/Address.php @@ -263,7 +263,7 @@ class Address extends \Magento\Customer\Model\Address\AbstractAddress implements * @param Address\CustomAttributeListInterface $attributeList * @param TotalsCollector $totalsCollector * @param \Magento\Quote\Model\Quote\TotalsReader $totalsReader - * @param \Magento\Framework\Model\ModelResource\AbstractResource|null $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource|null $resource * @param \Magento\Framework\Data\Collection\AbstractDb|null $resourceCollection * @param array $data * @@ -299,7 +299,7 @@ class Address extends \Magento\Customer\Model\Address\AbstractAddress implements Address\CustomAttributeListInterface $attributeList, \Magento\Quote\Model\Quote\TotalsCollector $totalsCollector, \Magento\Quote\Model\Quote\TotalsReader $totalsReader, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { @@ -538,7 +538,7 @@ class Address extends \Magento\Customer\Model\Address\AbstractAddress implements /** * Retrieve address items collection * - * @return \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection + * @return \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection */ public function getItemsCollection() { @@ -779,7 +779,7 @@ class Address extends \Magento\Customer\Model\Address\AbstractAddress implements /** * Retrieve collection of quote shipping rates * - * @return \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection + * @return \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection */ public function getShippingRatesCollection() { diff --git a/app/code/Magento/Quote/Model/Quote/Address/Relation.php b/app/code/Magento/Quote/Model/Quote/Address/Relation.php index c23661955c524d36a611bb51373913897d8c6861..898b868b772f6e1892f5dfe9578a3e6388827b17 100644 --- a/app/code/Magento/Quote/Model/Quote/Address/Relation.php +++ b/app/code/Magento/Quote/Model/Quote/Address/Relation.php @@ -5,7 +5,7 @@ */ namespace Magento\Quote\Model\Quote\Address; -use Magento\Framework\Model\ModelResource\Db\VersionControl\RelationInterface; +use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationInterface; class Relation implements RelationInterface { diff --git a/app/code/Magento/Quote/Model/Quote/Item.php b/app/code/Magento/Quote/Model/Quote/Item.php index c67e97fb5690560188a962994223ed9227c6459c..3b59817c0722bead6fb6baa382d2e44ad8dc7fb5 100644 --- a/app/code/Magento/Quote/Model/Quote/Item.php +++ b/app/code/Magento/Quote/Model/Quote/Item.php @@ -187,7 +187,7 @@ class Item extends \Magento\Quote\Model\Quote\Item\AbstractItem implements \Mage * @param Item\OptionFactory $itemOptionFactory * @param Item\Compare $quoteItemCompare * @param \Magento\CatalogInventory\Api\StockRegistryInterface $stockRegistry - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @@ -205,7 +205,7 @@ class Item extends \Magento\Quote\Model\Quote\Item\AbstractItem implements \Mage \Magento\Quote\Model\Quote\Item\OptionFactory $itemOptionFactory, \Magento\Quote\Model\Quote\Item\Compare $quoteItemCompare, \Magento\CatalogInventory\Api\StockRegistryInterface $stockRegistry, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Quote/Model/Quote/Item/AbstractItem.php b/app/code/Magento/Quote/Model/Quote/Item/AbstractItem.php index 193731ae519c1916a9f6afa3120379fcd3b749e4..7b356181cfbf6dd71556a80670fdc092cb5713c2 100644 --- a/app/code/Magento/Quote/Model/Quote/Item/AbstractItem.php +++ b/app/code/Magento/Quote/Model/Quote/Item/AbstractItem.php @@ -87,7 +87,7 @@ abstract class AbstractItem extends \Magento\Framework\Model\AbstractExtensibleM * @param AttributeValueFactory $customAttributeFactory * @param \Magento\Catalog\Api\ProductRepositoryInterface $productRepository * @param \Magento\Framework\Pricing\PriceCurrencyInterface $priceCurrency - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -98,7 +98,7 @@ abstract class AbstractItem extends \Magento\Framework\Model\AbstractExtensibleM AttributeValueFactory $customAttributeFactory, \Magento\Catalog\Api\ProductRepositoryInterface $productRepository, \Magento\Framework\Pricing\PriceCurrencyInterface $priceCurrency, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Quote/Model/Quote/Payment.php b/app/code/Magento/Quote/Model/Quote/Payment.php index d57a57c518b7342d7437147031f7a8bbb918156a..8a799a2c261748d39fd94c89ba5ee87a5bac1bcf 100644 --- a/app/code/Magento/Quote/Model/Quote/Payment.php +++ b/app/code/Magento/Quote/Model/Quote/Payment.php @@ -66,7 +66,7 @@ class Payment extends \Magento\Payment\Model\Info implements \Magento\Quote\Api\ * @param \Magento\Payment\Helper\Data $paymentData * @param \Magento\Framework\Encryption\EncryptorInterface $encryptor * @param \Magento\Payment\Model\Checks\SpecificationFactory $methodSpecificationFactory - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -79,7 +79,7 @@ class Payment extends \Magento\Payment\Model\Info implements \Magento\Quote\Api\ \Magento\Payment\Helper\Data $paymentData, \Magento\Framework\Encryption\EncryptorInterface $encryptor, \Magento\Payment\Model\Checks\SpecificationFactory $methodSpecificationFactory, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { @@ -273,112 +273,6 @@ class Payment extends \Magento\Payment\Model\Info implements \Magento\Quote\Api\ return $this->setData(self::KEY_METHOD, $method); } - /** - * Get credit card owner - * - * @return string|null - */ - public function getCcOwner() - { - return $this->getData(self::KEY_CC_OWNER); - } - - /** - * Set credit card owner - * - * @param string $ccOwner - * @return $this - */ - public function setCcOwner($ccOwner) - { - return $this->setData(self::KEY_CC_OWNER, $ccOwner); - } - - /** - * Get credit card number - * - * @return string|null - */ - public function getCcNumber() - { - return $this->getData(self::KEY_CC_NUMBER); - } - - /** - * Set credit card number - * - * @param string $ccNumber - * @return $this - */ - public function setCcNumber($ccNumber) - { - return $this->setData(self::KEY_CC_NUMBER, $ccNumber); - } - - /** - * Get credit card type - * - * @return string|null - */ - public function getCcType() - { - return $this->getData(self::KEY_CC_TYPE); - } - - /** - * Set credit card type - * - * @param string $ccType - * @return $this - */ - public function setCcType($ccType) - { - return $this->setData(self::KEY_CC_TYPE, $ccType); - } - - /** - * Get credit card expiration year - * - * @return string|null - */ - public function getCcExpYear() - { - $expirationYear = $this->getData(self::KEY_CC_EXP_YEAR) ?: null; - return $expirationYear; - } - - /** - * Set credit card expiration year - * - * @param string $ccExpYear - * @return $this - */ - public function setCcExpYear($ccExpYear) - { - return $this->setData(self::KEY_CC_EXP_YEAR, $ccExpYear); - } - - /** - * Get credit card expiration month - * - * @return string|null - */ - public function getCcExpMonth() - { - return $this->getData(self::KEY_CC_EXP_MONTH); - } - - /** - * Set credit card expiration month - * - * @param string $ccExpMonth - * @return $this - */ - public function setCcExpMonth($ccExpMonth) - { - return $this->setData(self::KEY_CC_EXP_MONTH, $ccExpMonth); - } - /** * Get payment additional details * diff --git a/app/code/Magento/Quote/Model/Quote/Relation.php b/app/code/Magento/Quote/Model/Quote/Relation.php index e03db843bab42de57cf3c857211bb6b5c26b3f42..2dd85ec640d9cf9b515c109640efcb2e01e75cff 100644 --- a/app/code/Magento/Quote/Model/Quote/Relation.php +++ b/app/code/Magento/Quote/Model/Quote/Relation.php @@ -5,7 +5,7 @@ */ namespace Magento\Quote\Model\Quote; -use Magento\Framework\Model\ModelResource\Db\VersionControl\RelationInterface; +use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationInterface; class Relation implements RelationInterface { diff --git a/app/code/Magento/Quote/Model/QuoteIdMask.php b/app/code/Magento/Quote/Model/QuoteIdMask.php index c84b2d78020df79d9299d016371ee20a9e82e194..dba1fcbf5195e1dbf0b1ed26a578000b1fb8d509 100644 --- a/app/code/Magento/Quote/Model/QuoteIdMask.php +++ b/app/code/Magento/Quote/Model/QuoteIdMask.php @@ -23,7 +23,7 @@ class QuoteIdMask extends \Magento\Framework\Model\AbstractModel * @param \Magento\Framework\Model\Context $context * @param \Magento\Framework\Registry $registry * @param \Magento\Framework\Math\Random $randomDataGenerator - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -31,7 +31,7 @@ class QuoteIdMask extends \Magento\Framework\Model\AbstractModel \Magento\Framework\Model\Context $context, \Magento\Framework\Registry $registry, \Magento\Framework\Math\Random $randomDataGenerator, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Quote/Model/ResourceModel/Quote.php b/app/code/Magento/Quote/Model/ResourceModel/Quote.php index 9735c69748900c12db41894f58a00350a491548a..780eb049d7cdea6e407c09ff147875241f1885ef 100644 --- a/app/code/Magento/Quote/Model/ResourceModel/Quote.php +++ b/app/code/Magento/Quote/Model/ResourceModel/Quote.php @@ -8,9 +8,9 @@ namespace Magento\Quote\Model\ResourceModel; -use Magento\Framework\Model\ModelResource\Db\VersionControl\AbstractDb; -use Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite; -use Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot; +use Magento\Framework\Model\ResourceModel\Db\VersionControl\AbstractDb; +use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite; +use Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot; use Magento\SalesSequence\Model\Manager; /** @@ -24,14 +24,14 @@ class Quote extends AbstractDb protected $sequenceManager; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param Snapshot $entitySnapshot, * @param RelationComposite $entityRelationComposite, * @param \Magento\SalesSequence\Model\Manager $sequenceManager * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, Snapshot $entitySnapshot, RelationComposite $entityRelationComposite, Manager $sequenceManager, diff --git a/app/code/Magento/Quote/Model/ResourceModel/Quote/Address.php b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address.php index c68cc3b0f986f2d103dcc79167a10f1b901f57a6..fe3518ee46055c5f9199baddbf80dc6661f58579 100644 --- a/app/code/Magento/Quote/Model/ResourceModel/Quote/Address.php +++ b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address.php @@ -5,7 +5,7 @@ */ namespace Magento\Quote\Model\ResourceModel\Quote; -use Magento\Framework\Model\ModelResource\Db\VersionControl\AbstractDb; +use Magento\Framework\Model\ResourceModel\Db\VersionControl\AbstractDb; /** * Quote address resource model diff --git a/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Collection.php b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Collection.php index 5e623a1c05549a679ca0ae54eaa01884d6cf4d2c..b53d89d5c391ff647355f78b4a57fce918061fca 100644 --- a/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Collection.php +++ b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Collection.php @@ -10,7 +10,7 @@ namespace Magento\Quote\Model\ResourceModel\Quote\Address; * * @author Magento Core Team <core@magentocommerce.com> */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\VersionControl\Collection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\VersionControl\Collection { /** * Event prefix diff --git a/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Item.php b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Item.php index e82b75827095af41f05dc1e66b73f8eec200df1c..0d3a2817c217c40c80caa454fd1ab6b919d777d2 100644 --- a/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Item.php +++ b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Item.php @@ -5,7 +5,7 @@ */ namespace Magento\Quote\Model\ResourceModel\Quote\Address; -use Magento\Framework\Model\ModelResource\Db\VersionControl\AbstractDb; +use Magento\Framework\Model\ResourceModel\Db\VersionControl\AbstractDb; /** * Quote address item resource model diff --git a/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Item/Collection.php b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Item/Collection.php index 1a13198a7108aadb117a694bd62adfe0dacbd5cf..d554a60068f433a79a829f613704abca8c99601d 100644 --- a/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Item/Collection.php +++ b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Item/Collection.php @@ -10,7 +10,7 @@ namespace Magento\Quote\Model\ResourceModel\Quote\Address\Item; * * @author Magento Core Team <core@magentocommerce.com> */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\VersionControl\Collection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\VersionControl\Collection { /** * Resource initialization diff --git a/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Rate.php b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Rate.php index ebf70d9e36ea3ce92476729852363e34cf0970a9..b2f0db80caf580a5930ebe9e9e7f3fee2e3a026b 100644 --- a/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Rate.php +++ b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Rate.php @@ -5,7 +5,7 @@ */ namespace Magento\Quote\Model\ResourceModel\Quote\Address; -use Magento\Framework\Model\ModelResource\Db\VersionControl\AbstractDb; +use Magento\Framework\Model\ResourceModel\Db\VersionControl\AbstractDb; /** * Quote address shipping rate resource model diff --git a/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Rate/Collection.php b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Rate/Collection.php index c58b0dc88166b32e795de866dd81bc78f69c32f7..a981fe1e4fa3ef4bbc3009d7ffaa1aafddb25b96 100644 --- a/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Rate/Collection.php +++ b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Rate/Collection.php @@ -10,7 +10,7 @@ namespace Magento\Quote\Model\ResourceModel\Quote\Address\Rate; * * @author Magento Core Team <core@magentocommerce.com> */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\VersionControl\Collection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\VersionControl\Collection { /** * Whether to load fixed items only @@ -24,20 +24,20 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\VersionContro * @param \Psr\Log\LoggerInterface $logger * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Framework\Event\ManagerInterface $eventManager - * @param \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot + * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot * @param \Magento\Shipping\Model\CarrierFactoryInterface $carrierFactory * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection - * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource + * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource */ public function __construct( \Magento\Framework\Data\Collection\EntityFactory $entityFactory, \Psr\Log\LoggerInterface $logger, \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Framework\Event\ManagerInterface $eventManager, - \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot, + \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot, \Magento\Shipping\Model\CarrierFactoryInterface $carrierFactory, \Magento\Framework\DB\Adapter\AdapterInterface $connection = null, - \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null + \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null ) { parent::__construct( $entityFactory, diff --git a/app/code/Magento/Quote/Model/ResourceModel/Quote/Collection.php b/app/code/Magento/Quote/Model/ResourceModel/Quote/Collection.php index f05a824ac38e55a0ee8f7823676b6d22c2d3230c..cf4bd8f0368fc795a4a512acb460dbc67f0e2551 100644 --- a/app/code/Magento/Quote/Model/ResourceModel/Quote/Collection.php +++ b/app/code/Magento/Quote/Model/ResourceModel/Quote/Collection.php @@ -10,7 +10,7 @@ namespace Magento\Quote\Model\ResourceModel\Quote; * * @author Magento Core Team <core@magentocommerce.com> */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\VersionControl\Collection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\VersionControl\Collection { /** * Resource initialization diff --git a/app/code/Magento/Quote/Model/ResourceModel/Quote/Item.php b/app/code/Magento/Quote/Model/ResourceModel/Quote/Item.php index 5ab317c0a31510d58b054fd8363c80e23ffef364..edb0586e294dd28a73173039c0fd54c5f6d2f4f5 100644 --- a/app/code/Magento/Quote/Model/ResourceModel/Quote/Item.php +++ b/app/code/Magento/Quote/Model/ResourceModel/Quote/Item.php @@ -5,7 +5,7 @@ */ namespace Magento\Quote\Model\ResourceModel\Quote; -use Magento\Framework\Model\ModelResource\Db\VersionControl\AbstractDb; +use Magento\Framework\Model\ResourceModel\Db\VersionControl\AbstractDb; /** * Quote resource model diff --git a/app/code/Magento/Quote/Model/ResourceModel/Quote/Item/Collection.php b/app/code/Magento/Quote/Model/ResourceModel/Quote/Item/Collection.php index 624f374182e3e41567202a78c2963d45a3476a2f..c0f1681fc6a20aab998c9cef758736fa82936aea 100644 --- a/app/code/Magento/Quote/Model/ResourceModel/Quote/Item/Collection.php +++ b/app/code/Magento/Quote/Model/ResourceModel/Quote/Item/Collection.php @@ -8,7 +8,7 @@ namespace Magento\Quote\Model\ResourceModel\Quote\Item; /** * Quote item resource collection */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\VersionControl\Collection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\VersionControl\Collection { /** * Collection quote instance @@ -44,12 +44,12 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\VersionContro * @param \Psr\Log\LoggerInterface $logger * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Framework\Event\ManagerInterface $eventManager - * @param \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot + * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot * @param Option\CollectionFactory $itemOptionCollectionFactory * @param \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory * @param \Magento\Quote\Model\Quote\Config $quoteConfig * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection - * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource + * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( @@ -57,12 +57,12 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\VersionContro \Psr\Log\LoggerInterface $logger, \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Framework\Event\ManagerInterface $eventManager, - \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot, + \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot, \Magento\Quote\Model\ResourceModel\Quote\Item\Option\CollectionFactory $itemOptionCollectionFactory, \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory, \Magento\Quote\Model\Quote\Config $quoteConfig, \Magento\Framework\DB\Adapter\AdapterInterface $connection = null, - \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null + \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null ) { parent::__construct( $entityFactory, diff --git a/app/code/Magento/Quote/Model/ResourceModel/Quote/Item/Option.php b/app/code/Magento/Quote/Model/ResourceModel/Quote/Item/Option.php index 82c905e1db48eb2008dc1e3a943577da451617fa..163ad4c20f8cf32a1e01b91f94c7e14b62353eff 100644 --- a/app/code/Magento/Quote/Model/ResourceModel/Quote/Item/Option.php +++ b/app/code/Magento/Quote/Model/ResourceModel/Quote/Item/Option.php @@ -10,7 +10,7 @@ namespace Magento\Quote\Model\ResourceModel\Quote\Item; * * @author Magento Core Team <core@magentocommerce.com> */ -class Option extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Option extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Main table and field initialization diff --git a/app/code/Magento/Quote/Model/ResourceModel/Quote/Item/Option/Collection.php b/app/code/Magento/Quote/Model/ResourceModel/Quote/Item/Option/Collection.php index 66789696c67982f70cda8a28baa95aa9740ab796..d535e3b6369301784dc8c6ff2299fa255f1e247e 100644 --- a/app/code/Magento/Quote/Model/ResourceModel/Quote/Item/Option/Collection.php +++ b/app/code/Magento/Quote/Model/ResourceModel/Quote/Item/Option/Collection.php @@ -12,7 +12,7 @@ use Magento\Quote\Model\Quote\Item; * * @author Magento Core Team <core@magentocommerce.com> */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Array of option ids grouped by item id diff --git a/app/code/Magento/Quote/Model/ResourceModel/Quote/Payment.php b/app/code/Magento/Quote/Model/ResourceModel/Quote/Payment.php index abf7c9084d77f2963c63a82c1ff5dae051cc4fd0..31f06fed55132cfeb55b8ee413f3834fe8af0778 100644 --- a/app/code/Magento/Quote/Model/ResourceModel/Quote/Payment.php +++ b/app/code/Magento/Quote/Model/ResourceModel/Quote/Payment.php @@ -5,7 +5,7 @@ */ namespace Magento\Quote\Model\ResourceModel\Quote; -use Magento\Framework\Model\ModelResource\Db\VersionControl\AbstractDb; +use Magento\Framework\Model\ResourceModel\Db\VersionControl\AbstractDb; /** * Quote payment resource model diff --git a/app/code/Magento/Quote/Model/ResourceModel/Quote/Payment/Collection.php b/app/code/Magento/Quote/Model/ResourceModel/Quote/Payment/Collection.php index 6ed0958d71fb7e362096a2162eead1dd9099ae38..de5e6ef357cfc58b982fbde010d687cde4e51d8b 100644 --- a/app/code/Magento/Quote/Model/ResourceModel/Quote/Payment/Collection.php +++ b/app/code/Magento/Quote/Model/ResourceModel/Quote/Payment/Collection.php @@ -8,25 +8,25 @@ namespace Magento\Quote\Model\ResourceModel\Quote\Payment; /** * Quote payments collection */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\VersionControl\Collection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\VersionControl\Collection { /** * @param \Magento\Framework\Data\Collection\EntityFactory $entityFactory * @param \Psr\Log\LoggerInterface $logger * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Framework\Event\ManagerInterface $eventManager - * @param \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot + * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection - * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource + * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource */ public function __construct( \Magento\Framework\Data\Collection\EntityFactory $entityFactory, \Psr\Log\LoggerInterface $logger, \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Framework\Event\ManagerInterface $eventManager, - \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot, + \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot, \Magento\Framework\DB\Adapter\AdapterInterface $connection = null, - \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null + \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null ) { parent::__construct( $entityFactory, diff --git a/app/code/Magento/Quote/Model/ResourceModel/Quote/QuoteIdMask.php b/app/code/Magento/Quote/Model/ResourceModel/Quote/QuoteIdMask.php index 26e75e23afbe72219d95eda11e9e62cd46b82a06..9b2af2ac4ebd4c6837b00f91a01ebd5ea7fa52d9 100644 --- a/app/code/Magento/Quote/Model/ResourceModel/Quote/QuoteIdMask.php +++ b/app/code/Magento/Quote/Model/ResourceModel/Quote/QuoteIdMask.php @@ -5,7 +5,7 @@ */ namespace Magento\Quote\Model\ResourceModel\Quote; -use Magento\Framework\Model\ModelResource\Db\AbstractDb; +use Magento\Framework\Model\ResourceModel\Db\AbstractDb; /** * QuoteIdMask Resource model diff --git a/app/code/Magento/Quote/Test/Unit/Model/Quote/Address/RelationTest.php b/app/code/Magento/Quote/Test/Unit/Model/Quote/Address/RelationTest.php index f2b1cb2242b5803e47216fcd3418aa5c3502b970..1d2a24982530d444606ba33a7162624336f1bf37 100644 --- a/app/code/Magento/Quote/Test/Unit/Model/Quote/Address/RelationTest.php +++ b/app/code/Magento/Quote/Test/Unit/Model/Quote/Address/RelationTest.php @@ -40,14 +40,14 @@ class RelationTest extends \PHPUnit_Framework_TestCase public function testProcessRelation() { $itemsCollection = $this->getMock( - 'Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection', + 'Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection', [], [], '', false ); $shippingRatesCollection = $this->getMock( - 'Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection', + 'Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection', [], [], '', diff --git a/app/code/Magento/Quote/Test/Unit/Model/Quote/PaymentTest.php b/app/code/Magento/Quote/Test/Unit/Model/Quote/PaymentTest.php index 534c20c1307585959f8090e374cb6adc58b963a9..1c593d118aa67141b3c04c9045b2756bbf042384 100644 --- a/app/code/Magento/Quote/Test/Unit/Model/Quote/PaymentTest.php +++ b/app/code/Magento/Quote/Test/Unit/Model/Quote/PaymentTest.php @@ -43,7 +43,7 @@ class PaymentTest extends \PHPUnit_Framework_TestCase return [ [null, null], [0, null], - ['0', null], + ['0', 0], [1939, 1939], ]; } diff --git a/app/code/Magento/Quote/Test/Unit/Model/ResourceModel/Quote/Item/CollectionTest.php b/app/code/Magento/Quote/Test/Unit/Model/ResourceModel/Quote/Item/CollectionTest.php index 0e6e0bb4cbe78286d4d239cf2c1260840748502f..fb6fec5504abd14533f55a732b4eed8b1abb71d1 100644 --- a/app/code/Magento/Quote/Test/Unit/Model/ResourceModel/Quote/Item/CollectionTest.php +++ b/app/code/Magento/Quote/Test/Unit/Model/ResourceModel/Quote/Item/CollectionTest.php @@ -34,7 +34,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase protected $selectMock; /** - * @var \Magento\Framework\Model\ModelResource\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject */ protected $resourceMock; @@ -49,7 +49,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase protected $entityFactoryMock; /** - * @var \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject */ protected $entitySnapshotMock; @@ -70,7 +70,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase ->method('select') ->will($this->returnValue($this->selectMock)); - $this->resourceMock = $this->getMock('Magento\Framework\Model\ModelResource\Db\AbstractDb', [], [], '', false); + $this->resourceMock = $this->getMock('Magento\Framework\Model\ResourceModel\Db\AbstractDb', [], [], '', false); $this->resourceMock->expects($this->any())->method('getConnection')->will( $this->returnValue($this->connectionMock) ); @@ -90,7 +90,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase public function testInstanceOf() { $this->assertInstanceOf( - 'Magento\Framework\Model\ModelResource\Db\VersionControl\Collection', + 'Magento\Framework\Model\ResourceModel\Db\VersionControl\Collection', $this->collection ); } diff --git a/app/code/Magento/Quote/Test/Unit/Model/ResourceModel/Quote/ItemTest.php b/app/code/Magento/Quote/Test/Unit/Model/ResourceModel/Quote/ItemTest.php index 78c1b6b5007a24620ef15727f6d355839f37e190..74f99ab7169fe5e3473d10f66256afdbb16f76a0 100644 --- a/app/code/Magento/Quote/Test/Unit/Model/ResourceModel/Quote/ItemTest.php +++ b/app/code/Magento/Quote/Test/Unit/Model/ResourceModel/Quote/ItemTest.php @@ -5,7 +5,7 @@ */ namespace Magento\Quote\Test\Unit\Model\ResourceModel\Quote; -use Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite; +use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite; use Magento\Quote\Model\ResourceModel\Quote\Item; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper; @@ -38,7 +38,7 @@ class ItemTest extends \PHPUnit_Framework_TestCase protected $connectionMock; /** - * @var \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject */ protected $entitySnapshotMock; @@ -48,7 +48,7 @@ class ItemTest extends \PHPUnit_Framework_TestCase protected $relationCompositeMock; /** - * @var \Magento\Framework\Model\ModelResource\Db\ObjectRelationProcessor|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor|\PHPUnit_Framework_MockObject_MockObject */ protected $objectRelationProcessorMock; @@ -76,27 +76,27 @@ class ItemTest extends \PHPUnit_Framework_TestCase false ); $this->entitySnapshotMock = $this->getMock( - 'Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot', + 'Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot', [], [], '', false ); $this->relationCompositeMock = $this->getMock( - 'Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite', + 'Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite', [], [], '', false ); $this->objectRelationProcessorMock = $this->getMock( - 'Magento\Framework\Model\ModelResource\Db\ObjectRelationProcessor', + 'Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor', [], [], '', false ); - $contextMock = $this->getMock('\Magento\Framework\Model\ModelResource\Db\Context', [], [], '', false); + $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false); $contextMock->expects($this->once())->method('getResources')->willReturn($this->resourceMock); $contextMock->expects($this->once()) ->method('getObjectRelationProcessor') @@ -115,7 +115,7 @@ class ItemTest extends \PHPUnit_Framework_TestCase public function testInstanceOf() { - $this->assertInstanceOf('Magento\Framework\Model\ModelResource\Db\VersionControl\AbstractDb', $this->model); + $this->assertInstanceOf('Magento\Framework\Model\ResourceModel\Db\VersionControl\AbstractDb', $this->model); } public function testSaveNotModifiedItem() diff --git a/app/code/Magento/Quote/Test/Unit/Model/ResourceModel/Quote/QuoteAddressTest.php b/app/code/Magento/Quote/Test/Unit/Model/ResourceModel/Quote/QuoteAddressTest.php index 3442b067b55495cb6df4453cc672b577137ba490..2319fca91ac1e2c3903a17bb6f0376b181325cc9 100644 --- a/app/code/Magento/Quote/Test/Unit/Model/ResourceModel/Quote/QuoteAddressTest.php +++ b/app/code/Magento/Quote/Test/Unit/Model/ResourceModel/Quote/QuoteAddressTest.php @@ -5,7 +5,7 @@ */ namespace Magento\Quote\Test\Unit\Model\ResourceModel\Quote; -use Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite; +use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite; /** * Class QuoteAddressTest @@ -38,7 +38,7 @@ class QuoteAddressTest extends \PHPUnit_Framework_TestCase protected $connectionMock; /** - * @var \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject */ protected $entitySnapshotMock; @@ -81,14 +81,14 @@ class QuoteAddressTest extends \PHPUnit_Framework_TestCase false ); $this->entitySnapshotMock = $this->getMock( - 'Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot', + 'Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot', [], [], '', false ); $this->relationCompositeMock = $this->getMock( - 'Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite', + 'Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite', [], [], '', diff --git a/app/code/Magento/Quote/etc/adminhtml/events.xml b/app/code/Magento/Quote/etc/adminhtml/events.xml index 02753fc7ca5a3bc9fd40489d4767738dee4dbe91..4b412a42b01aa35730b84b2117ef0eb3273fa1c6 100644 --- a/app/code/Magento/Quote/etc/adminhtml/events.xml +++ b/app/code/Magento/Quote/etc/adminhtml/events.xml @@ -7,6 +7,6 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="customer_save_after_data_object"> - <observer name="customer" instance="Magento\Quote\Observer\Backend\CustomerQuoteObserver" method="execute" /> + <observer name="customer" instance="Magento\Quote\Observer\Backend\CustomerQuoteObserver" /> </event> </config> diff --git a/app/code/Magento/Quote/etc/di.xml b/app/code/Magento/Quote/etc/di.xml index 821619c6af58d9eed6a02423b8c7ae9b70a9b8f8..17cadb026c9cbd4692c9fa2ae9ab1807c960d37d 100644 --- a/app/code/Magento/Quote/etc/di.xml +++ b/app/code/Magento/Quote/etc/di.xml @@ -57,7 +57,7 @@ <argument name="addressConfig" xsi:type="object">Magento\Customer\Model\Address\Config\Proxy</argument> </arguments> </type> - <virtualType name="QuoteAddressRelationsComposite" type="Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite"> + <virtualType name="QuoteAddressRelationsComposite" type="Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite"> <arguments> <argument name="relationProcessors" xsi:type="array"> <item name="default" xsi:type="object">Magento\Quote\Model\Quote\Address\Relation</item> @@ -69,7 +69,7 @@ <argument name="entityRelationComposite" xsi:type="object">QuoteAddressRelationsComposite</argument> </arguments> </type> - <virtualType name="QuoteRelationsComposite" type="Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite"> + <virtualType name="QuoteRelationsComposite" type="Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite"> <arguments> <argument name="relationProcessors" xsi:type="array"> <item name="default" xsi:type="object">Magento\Quote\Model\Quote\Relation</item> diff --git a/app/code/Magento/Quote/etc/events.xml b/app/code/Magento/Quote/etc/events.xml index a7f860139cb3efa6fbdecaeeb31068f1b1232f95..fd82566a4adbc789da04b455b49103f0578c632e 100644 --- a/app/code/Magento/Quote/etc/events.xml +++ b/app/code/Magento/Quote/etc/events.xml @@ -7,6 +7,6 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="sales_quote_address_collect_totals_before"> - <observer name="sales_customer_validate_vat_number" instance="Magento\Quote\Observer\Frontend\Quote\Address\CollectTotalsObserver" method="execute" /> + <observer name="sales_customer_validate_vat_number" instance="Magento\Quote\Observer\Frontend\Quote\Address\CollectTotalsObserver" /> </event> </config> diff --git a/app/code/Magento/Quote/etc/webapi_rest/events.xml b/app/code/Magento/Quote/etc/webapi_rest/events.xml index a0406c95e24e74a29f37b5864ba1c5e734a08206..fc234312a957575846c8a2d5afb29c436aaac337 100644 --- a/app/code/Magento/Quote/etc/webapi_rest/events.xml +++ b/app/code/Magento/Quote/etc/webapi_rest/events.xml @@ -7,6 +7,6 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="sales_model_service_quote_submit_success"> - <observer name="sendEmail" instance="Magento\Quote\Observer\Webapi\SubmitObserver" method="execute" /> + <observer name="sendEmail" instance="Magento\Quote\Observer\Webapi\SubmitObserver" /> </event> </config> \ No newline at end of file diff --git a/app/code/Magento/Quote/etc/webapi_soap/events.xml b/app/code/Magento/Quote/etc/webapi_soap/events.xml index a0406c95e24e74a29f37b5864ba1c5e734a08206..fc234312a957575846c8a2d5afb29c436aaac337 100644 --- a/app/code/Magento/Quote/etc/webapi_soap/events.xml +++ b/app/code/Magento/Quote/etc/webapi_soap/events.xml @@ -7,6 +7,6 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="sales_model_service_quote_submit_success"> - <observer name="sendEmail" instance="Magento\Quote\Observer\Webapi\SubmitObserver" method="execute" /> + <observer name="sendEmail" instance="Magento\Quote\Observer\Webapi\SubmitObserver" /> </event> </config> \ No newline at end of file diff --git a/app/code/Magento/Reports/Model/Event.php b/app/code/Magento/Reports/Model/Event.php index d526754f94c69b62216ba9f81676afb83df5c2c5..167255f3d134de1c6872237122123d48a4c06272 100644 --- a/app/code/Magento/Reports/Model/Event.php +++ b/app/code/Magento/Reports/Model/Event.php @@ -54,7 +54,7 @@ class Event extends \Magento\Framework\Model\AbstractModel * @param \Magento\Framework\Registry $registry * @param \Magento\Framework\Stdlib\DateTime\DateTimeFactory $dateFactory * @param \Magento\Reports\Model\Event\TypeFactory $eventTypeFactory - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -63,7 +63,7 @@ class Event extends \Magento\Framework\Model\AbstractModel \Magento\Framework\Registry $registry, \Magento\Framework\Stdlib\DateTime\DateTimeFactory $dateFactory, \Magento\Reports\Model\Event\TypeFactory $eventTypeFactory, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Reports/Model/Grouped/Collection.php b/app/code/Magento/Reports/Model/Grouped/Collection.php index 13a0c21ef28a87ceadcc4073c770853bcb996f51..3929c3440c44dccaea72d56184ab31f62041f7a2 100644 --- a/app/code/Magento/Reports/Model/Grouped/Collection.php +++ b/app/code/Magento/Reports/Model/Grouped/Collection.php @@ -19,7 +19,7 @@ class Collection extends \Magento\Framework\Data\Collection /** * Collection resource * - * @var \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection + * @var \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection */ protected $_resourceCollection = null; diff --git a/app/code/Magento/Reports/Model/Product/Index/AbstractIndex.php b/app/code/Magento/Reports/Model/Product/Index/AbstractIndex.php index adc6025cd846877bcab8166f035806315dc4e8f7..6380571f21fdf005fe3648d3c1b30d6d3ffad30f 100644 --- a/app/code/Magento/Reports/Model/Product/Index/AbstractIndex.php +++ b/app/code/Magento/Reports/Model/Product/Index/AbstractIndex.php @@ -56,7 +56,7 @@ abstract class AbstractIndex extends \Magento\Framework\Model\AbstractModel * @param \Magento\Framework\Session\Generic $reportSession * @param \Magento\Catalog\Model\Product\Visibility $productVisibility * @param \Magento\Framework\Stdlib\DateTime $dateTime - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -70,7 +70,7 @@ abstract class AbstractIndex extends \Magento\Framework\Model\AbstractModel \Magento\Framework\Session\Generic $reportSession, \Magento\Catalog\Model\Product\Visibility $productVisibility, \Magento\Framework\Stdlib\DateTime $dateTime, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Reports/Model/Product/Index/Compared.php b/app/code/Magento/Reports/Model/Product/Index/Compared.php index 771304f9c9968fdf3946f02b5d3fb561188e858e..3583bbbdf46fbfed572514d8d14bba4ddc577235 100644 --- a/app/code/Magento/Reports/Model/Product/Index/Compared.php +++ b/app/code/Magento/Reports/Model/Product/Index/Compared.php @@ -46,7 +46,7 @@ class Compared extends \Magento\Reports\Model\Product\Index\AbstractIndex * @param \Magento\Catalog\Model\Product\Visibility $productVisibility * @param \Magento\Framework\Stdlib\DateTime $dateTime * @param \Magento\Catalog\Helper\Product\Compare $productCompare - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -61,7 +61,7 @@ class Compared extends \Magento\Reports\Model\Product\Index\AbstractIndex \Magento\Catalog\Model\Product\Visibility $productVisibility, \Magento\Framework\Stdlib\DateTime $dateTime, \Magento\Catalog\Helper\Product\Compare $productCompare, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Reports/Model/ResourceModel/Customer/Collection.php b/app/code/Magento/Reports/Model/ResourceModel/Customer/Collection.php index ab44549a4bcceac507969f155f4f378c70101872..1f7fe62304519f215152ce6e5932b86ef27d9bbb 100644 --- a/app/code/Magento/Reports/Model/ResourceModel/Customer/Collection.php +++ b/app/code/Magento/Reports/Model/ResourceModel/Customer/Collection.php @@ -81,7 +81,7 @@ class Collection extends \Magento\Customer\Model\ResourceModel\Customer\Collecti * @param \Magento\Eav\Model\EntityFactory $eavEntityFactory * @param \Magento\Eav\Model\ResourceModel\Helper $resourceHelper * @param \Magento\Framework\Validator\UniversalFactory $universalFactory - * @param \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot + * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot * @param \Magento\Framework\DataObject\Copy\Config $fieldsetConfig * @param \Magento\Quote\Model\QuoteRepository $quoteRepository * @param \Magento\Quote\Model\ResourceModel\Quote\Item\CollectionFactory $quoteItemFactory @@ -101,7 +101,7 @@ class Collection extends \Magento\Customer\Model\ResourceModel\Customer\Collecti \Magento\Eav\Model\EntityFactory $eavEntityFactory, \Magento\Eav\Model\ResourceModel\Helper $resourceHelper, \Magento\Framework\Validator\UniversalFactory $universalFactory, - \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot, + \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot, \Magento\Framework\DataObject\Copy\Config $fieldsetConfig, \Magento\Quote\Model\QuoteRepository $quoteRepository, \Magento\Quote\Model\ResourceModel\Quote\Item\CollectionFactory $quoteItemFactory, diff --git a/app/code/Magento/Reports/Model/ResourceModel/Event.php b/app/code/Magento/Reports/Model/ResourceModel/Event.php index 03f8a4e5bca6bacf74ce3f0fcb74e05df112faed..1ae3c00f5533827f15e9430340b4b0140a89539f 100644 --- a/app/code/Magento/Reports/Model/ResourceModel/Event.php +++ b/app/code/Magento/Reports/Model/ResourceModel/Event.php @@ -8,7 +8,7 @@ namespace Magento\Reports\Model\ResourceModel; /** * Report events resource model */ -class Event extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Event extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Core store config @@ -23,13 +23,13 @@ class Event extends \Magento\Framework\Model\ModelResource\Db\AbstractDb protected $_storeManager; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig, \Magento\Store\Model\StoreManagerInterface $storeManager, $connectionName = null diff --git a/app/code/Magento/Reports/Model/ResourceModel/Event/Collection.php b/app/code/Magento/Reports/Model/ResourceModel/Event/Collection.php index 18e121c53fadff4fe5b49d689f1a98724fc803b3..ddd9ec681929a1d844aa4f3bac803e960f40db93 100644 --- a/app/code/Magento/Reports/Model/ResourceModel/Event/Collection.php +++ b/app/code/Magento/Reports/Model/ResourceModel/Event/Collection.php @@ -11,7 +11,7 @@ */ namespace Magento\Reports\Model\ResourceModel\Event; -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Store Ids diff --git a/app/code/Magento/Reports/Model/ResourceModel/Event/Type.php b/app/code/Magento/Reports/Model/ResourceModel/Event/Type.php index 80539f20c79909ff4487a7d5e4c06947ccc8f063..3ff620e1eb30de0294c1ba1cd67e73371db66cbc 100644 --- a/app/code/Magento/Reports/Model/ResourceModel/Event/Type.php +++ b/app/code/Magento/Reports/Model/ResourceModel/Event/Type.php @@ -11,7 +11,7 @@ */ namespace Magento\Reports\Model\ResourceModel\Event; -class Type extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Type extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Main table initialization diff --git a/app/code/Magento/Reports/Model/ResourceModel/Event/Type/Collection.php b/app/code/Magento/Reports/Model/ResourceModel/Event/Type/Collection.php index 221093132d33352cd002067c9e9d3b7be7698fc0..12f0c969f3bb2b614c8f452e49f53cac172d990c 100644 --- a/app/code/Magento/Reports/Model/ResourceModel/Event/Type/Collection.php +++ b/app/code/Magento/Reports/Model/ResourceModel/Event/Type/Collection.php @@ -11,7 +11,7 @@ */ namespace Magento\Reports\Model\ResourceModel\Event\Type; -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Resource initialization diff --git a/app/code/Magento/Reports/Model/ResourceModel/Order/Collection.php b/app/code/Magento/Reports/Model/ResourceModel/Order/Collection.php index 507d55a7143c33ca534b070eca2ed8c32cd1da35..d0d7195bc3f7b23641a3ec2d604f4726739ef8d6 100644 --- a/app/code/Magento/Reports/Model/ResourceModel/Order/Collection.php +++ b/app/code/Magento/Reports/Model/ResourceModel/Order/Collection.php @@ -72,7 +72,7 @@ class Collection extends \Magento\Sales\Model\ResourceModel\Order\Collection * @param \Psr\Log\LoggerInterface $logger * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Framework\Event\ManagerInterface $eventManager - * @param \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot + * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot * @param \Magento\Framework\DB\Helper $coreResourceHelper * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig * @param \Magento\Store\Model\StoreManagerInterface $storeManager @@ -80,7 +80,7 @@ class Collection extends \Magento\Sales\Model\ResourceModel\Order\Collection * @param \Magento\Sales\Model\Order\Config $orderConfig * @param \Magento\Sales\Model\ResourceModel\Report\OrderFactory $reportOrderFactory * @param null $connection - * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource + * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource * * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ @@ -89,7 +89,7 @@ class Collection extends \Magento\Sales\Model\ResourceModel\Order\Collection \Psr\Log\LoggerInterface $logger, \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Framework\Event\ManagerInterface $eventManager, - \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot, + \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot, \Magento\Framework\DB\Helper $coreResourceHelper, \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig, \Magento\Store\Model\StoreManagerInterface $storeManager, @@ -97,7 +97,7 @@ class Collection extends \Magento\Sales\Model\ResourceModel\Order\Collection \Magento\Sales\Model\Order\Config $orderConfig, \Magento\Sales\Model\ResourceModel\Report\OrderFactory $reportOrderFactory, \Magento\Framework\DB\Adapter\AdapterInterface $connection = null, - \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null + \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null ) { parent::__construct( $entityFactory, diff --git a/app/code/Magento/Reports/Model/ResourceModel/Product/Index/AbstractIndex.php b/app/code/Magento/Reports/Model/ResourceModel/Product/Index/AbstractIndex.php index d64c1845bb8952d03ba5919fad5137b65996ddf8..5c9a3118499918ff74b3dcbad32090d6511d801b 100644 --- a/app/code/Magento/Reports/Model/ResourceModel/Product/Index/AbstractIndex.php +++ b/app/code/Magento/Reports/Model/ResourceModel/Product/Index/AbstractIndex.php @@ -9,7 +9,7 @@ namespace Magento\Reports\Model\ResourceModel\Product\Index; /** * Reports Product Index Abstract Resource Model */ -abstract class AbstractIndex extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +abstract class AbstractIndex extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * DateItime instance @@ -28,13 +28,13 @@ abstract class AbstractIndex extends \Magento\Framework\Model\ModelResource\Db\A /** * Constructor * - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Reports\Model\ResourceModel\Helper $resourceHelper * @param \Magento\Framework\Stdlib\DateTime $dateTime * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Reports\Model\ResourceModel\Helper $resourceHelper, \Magento\Framework\Stdlib\DateTime $dateTime, $connectionName = null @@ -132,7 +132,7 @@ abstract class AbstractIndex extends \Magento\Framework\Model\ModelResource\Db\A * Save Product Index data (forced save) * * @param \Magento\Framework\Model\AbstractModel $object - * @return $this|\Magento\Framework\Model\ModelResource\Db\AbstractDb + * @return $this|\Magento\Framework\Model\ResourceModel\Db\AbstractDb */ public function save(\Magento\Framework\Model\AbstractModel $object) { diff --git a/app/code/Magento/Reports/Model/ResourceModel/Quote/Collection.php b/app/code/Magento/Reports/Model/ResourceModel/Quote/Collection.php index e8bdb966edf85c5a5dae431b9a3d18045dd9c41f..58f87efc347a4b848f1ce518654f1a4fd2239286 100644 --- a/app/code/Magento/Reports/Model/ResourceModel/Quote/Collection.php +++ b/app/code/Magento/Reports/Model/ResourceModel/Quote/Collection.php @@ -17,20 +17,20 @@ class Collection extends \Magento\Quote\Model\ResourceModel\Quote\Collection * @param \Psr\Log\LoggerInterface $logger * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Framework\Event\ManagerInterface $eventManager - * @param \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot + * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot * @param \Magento\Customer\Model\ResourceModel\Customer $customerResource * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection - * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource + * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource */ public function __construct( \Magento\Framework\Data\Collection\EntityFactoryInterface $entityFactory, \Psr\Log\LoggerInterface $logger, \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Framework\Event\ManagerInterface $eventManager, - \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot, + \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot, \Magento\Customer\Model\ResourceModel\Customer $customerResource, \Magento\Framework\DB\Adapter\AdapterInterface $connection = null, - \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null + \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null ) { parent::__construct( $entityFactory, diff --git a/app/code/Magento/Reports/Model/ResourceModel/Quote/Item/Collection.php b/app/code/Magento/Reports/Model/ResourceModel/Quote/Item/Collection.php index 59e9996dcff448de31f2295df642ae347c3961c9..8e0c83d793ac9a26440f780a794a5ff0c005845d 100644 --- a/app/code/Magento/Reports/Model/ResourceModel/Quote/Item/Collection.php +++ b/app/code/Magento/Reports/Model/ResourceModel/Quote/Item/Collection.php @@ -13,7 +13,7 @@ use Magento\Framework\App\ResourceConnection; * * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Join fields @@ -53,7 +53,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab * @param \Magento\Customer\Model\ResourceModel\Customer $customerResource * @param \Magento\Sales\Model\ResourceModel\Order\Collection $orderResource * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection - * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource + * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource */ public function __construct( \Magento\Framework\Data\Collection\EntityFactory $entityFactory, @@ -64,7 +64,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab \Magento\Customer\Model\ResourceModel\Customer $customerResource, \Magento\Sales\Model\ResourceModel\Order\Collection $orderResource, \Magento\Framework\DB\Adapter\AdapterInterface $connection = null, - \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null + \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null ) { parent::__construct( $entityFactory, diff --git a/app/code/Magento/Reports/Model/ResourceModel/Report/AbstractReport.php b/app/code/Magento/Reports/Model/ResourceModel/Report/AbstractReport.php index 4d413b8c5b4842676f05677cb6bb76505b323269..d5157527f0051a0615c0bc1e0d53b58ba5cfbf6f 100644 --- a/app/code/Magento/Reports/Model/ResourceModel/Report/AbstractReport.php +++ b/app/code/Magento/Reports/Model/ResourceModel/Report/AbstractReport.php @@ -10,7 +10,7 @@ namespace Magento\Reports\Model\ResourceModel\Report; * Abstract report aggregate resource model * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ -abstract class AbstractReport extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +abstract class AbstractReport extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Flag object @@ -43,7 +43,7 @@ abstract class AbstractReport extends \Magento\Framework\Model\ModelResource\Db\ /** * Constructor * - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Psr\Log\LoggerInterface $logger * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate * @param \Magento\Reports\Model\FlagFactory $reportsFlagFactory @@ -52,7 +52,7 @@ abstract class AbstractReport extends \Magento\Framework\Model\ModelResource\Db\ * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Psr\Log\LoggerInterface $logger, \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate, \Magento\Reports\Model\FlagFactory $reportsFlagFactory, diff --git a/app/code/Magento/Reports/Model/ResourceModel/Report/Collection.php b/app/code/Magento/Reports/Model/ResourceModel/Report/Collection.php index 8ca2869b2bbfe701c4dbd52d21f8de79b7fbd03f..fa647a5a852fb766f885bcd1fdb7a1a9993ec298 100644 --- a/app/code/Magento/Reports/Model/ResourceModel/Report/Collection.php +++ b/app/code/Magento/Reports/Model/ResourceModel/Report/Collection.php @@ -323,7 +323,7 @@ class Collection extends \Magento\Framework\Data\Collection * * @param int $fromDate * @param int $toDate - * @return \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection + * @return \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection */ protected function _getReport($fromDate, $toDate) { diff --git a/app/code/Magento/Reports/Model/ResourceModel/Report/Collection/AbstractCollection.php b/app/code/Magento/Reports/Model/ResourceModel/Report/Collection/AbstractCollection.php index 70d6b4856e199c480cd19c0b00f8370d338eb79e..6e24d9536bf429fc40192a8a08fce7ffd731bfc8 100644 --- a/app/code/Magento/Reports/Model/ResourceModel/Report/Collection/AbstractCollection.php +++ b/app/code/Magento/Reports/Model/ResourceModel/Report/Collection/AbstractCollection.php @@ -11,7 +11,7 @@ */ namespace Magento\Reports\Model\ResourceModel\Report\Collection; -class AbstractCollection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class AbstractCollection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * From date diff --git a/app/code/Magento/Reports/Model/ResourceModel/Report/Collection/Factory.php b/app/code/Magento/Reports/Model/ResourceModel/Report/Collection/Factory.php index 8ab98b1c2ee8a74a4f3b1e71759ad80d104bcfab..39f14fb3d15c5f13ab1f64b6b32436dfff4c6884 100644 --- a/app/code/Magento/Reports/Model/ResourceModel/Report/Collection/Factory.php +++ b/app/code/Magento/Reports/Model/ResourceModel/Report/Collection/Factory.php @@ -25,7 +25,7 @@ class Factory * * @param string $className * @param array $arguments - * @return \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection + * @return \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection */ public function create($className, array $arguments = []) { diff --git a/app/code/Magento/Reports/Model/ResourceModel/Report/Product/Viewed.php b/app/code/Magento/Reports/Model/ResourceModel/Report/Product/Viewed.php index 0ff5ed7925ddb170eec14014733d77f02d28b9b0..e71f50aa22af0f8fc8d221ca05c3800d191e5ebe 100644 --- a/app/code/Magento/Reports/Model/ResourceModel/Report/Product/Viewed.php +++ b/app/code/Magento/Reports/Model/ResourceModel/Report/Product/Viewed.php @@ -45,7 +45,7 @@ class Viewed extends \Magento\Sales\Model\ResourceModel\Report\AbstractReport /** * Constructor * - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Psr\Log\LoggerInterface $logger * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate * @param \Magento\Reports\Model\FlagFactory $reportsFlagFactory @@ -56,7 +56,7 @@ class Viewed extends \Magento\Sales\Model\ResourceModel\Report\AbstractReport * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Psr\Log\LoggerInterface $logger, \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate, \Magento\Reports\Model\FlagFactory $reportsFlagFactory, diff --git a/app/code/Magento/Reports/Model/ResourceModel/Review/Customer/Collection.php b/app/code/Magento/Reports/Model/ResourceModel/Review/Customer/Collection.php index 05dd7e6c830366751af39ec666adddc5a70ca6dd..d130d2a85e9a8b061e3d31ccdff7ed020f25a064 100644 --- a/app/code/Magento/Reports/Model/ResourceModel/Review/Customer/Collection.php +++ b/app/code/Magento/Reports/Model/ResourceModel/Review/Customer/Collection.php @@ -28,7 +28,7 @@ class Collection extends \Magento\Review\Model\ResourceModel\Review\Collection * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param \Magento\Customer\Model\ResourceModel\Customer $customerResource * @param mixed $connection - * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource + * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( @@ -41,7 +41,7 @@ class Collection extends \Magento\Review\Model\ResourceModel\Review\Collection \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Customer\Model\ResourceModel\Customer $customerResource, \Magento\Framework\DB\Adapter\AdapterInterface $connection = null, - \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null + \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null ) { $this->_customerResource = $customerResource; parent::__construct( diff --git a/app/code/Magento/Reports/Model/ResourceModel/Wishlist/Collection.php b/app/code/Magento/Reports/Model/ResourceModel/Wishlist/Collection.php index 2728de60db56bf434c1e4f2e4ac29149e34d01cc..8388f16dab200bac8df5cf4b67ce9f1e7f98fbea 100644 --- a/app/code/Magento/Reports/Model/ResourceModel/Wishlist/Collection.php +++ b/app/code/Magento/Reports/Model/ResourceModel/Wishlist/Collection.php @@ -11,7 +11,7 @@ */ namespace Magento\Reports\Model\ResourceModel\Wishlist; -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Wishlist table name @@ -32,7 +32,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab * @param \Magento\Framework\Event\ManagerInterface $eventManager * @param \Magento\Customer\Model\ResourceModel\Customer\CollectionFactory $customerResFactory * @param mixed $connection - * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource + * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource */ public function __construct( \Magento\Framework\Data\Collection\EntityFactory $entityFactory, @@ -41,7 +41,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab \Magento\Framework\Event\ManagerInterface $eventManager, \Magento\Customer\Model\ResourceModel\Customer\CollectionFactory $customerResFactory, \Magento\Framework\DB\Adapter\AdapterInterface $connection = null, - \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null + \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null ) { parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource); $this->_customerResFactory = $customerResFactory; diff --git a/app/code/Magento/Reports/Test/Unit/Model/Product/Index/ComparedTest.php b/app/code/Magento/Reports/Test/Unit/Model/Product/Index/ComparedTest.php index d2ddf28a92f2d601f915e09a5332dbda96bf64d6..dced792d7652854daf5ce9400d51750b1e8eff0e 100644 --- a/app/code/Magento/Reports/Test/Unit/Model/Product/Index/ComparedTest.php +++ b/app/code/Magento/Reports/Test/Unit/Model/Product/Index/ComparedTest.php @@ -61,7 +61,7 @@ class ComparedTest extends \PHPUnit_Framework_TestCase protected $catalogProductHelperMock; /** - * @var \Magento\Framework\Model\ModelResource\AbstractResource|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Model\ResourceModel\AbstractResource|\PHPUnit_Framework_MockObject_MockObject */ protected $resourceMock; @@ -99,7 +99,7 @@ class ComparedTest extends \PHPUnit_Framework_TestCase ->disableOriginalConstructor() ->getMock(); - $this->resourceMock = $this->getMockBuilder('Magento\Framework\Model\ModelResource\AbstractResource') + $this->resourceMock = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\AbstractResource') ->disableOriginalConstructor() ->setMethods(['getIdFieldName', '_construct', 'getConnection']) ->getMockForAbstractClass(); diff --git a/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Event/CollectionTest.php b/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Event/CollectionTest.php index a9716838a7bc8db13a435cb042aac11baa2c65a9..b1fe579a13b9285d00eed7a2b190c9cb8cafe01b 100644 --- a/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Event/CollectionTest.php +++ b/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Event/CollectionTest.php @@ -36,7 +36,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase protected $managerMock; /** - * @var \Magento\Framework\Model\ModelResource\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject */ protected $resourceMock; @@ -82,7 +82,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase ->method('select') ->willReturn($this->selectMock); - $this->resourceMock = $this->getMockBuilder('Magento\Framework\Model\ModelResource\Db\AbstractDb') + $this->resourceMock = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\Db\AbstractDb') ->disableOriginalConstructor() ->setMethods(['getConnection', 'getCurrentStoreIds', '_construct', 'getMainTable', 'getTable']) ->getMock(); diff --git a/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/EventTest.php b/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/EventTest.php index 29e4fc06b77b459dad418631b69c52b27c953a72..bc16cf215d80201844dd95f13ed08684ab4ca774 100644 --- a/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/EventTest.php +++ b/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/EventTest.php @@ -16,7 +16,7 @@ class EventTest extends \PHPUnit_Framework_TestCase protected $event; /** - * @var \Magento\Framework\Model\ModelResource\Db\Context|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Model\ResourceModel\Db\Context|\PHPUnit_Framework_MockObject_MockObject */ protected $contextMock; @@ -50,7 +50,7 @@ class EventTest extends \PHPUnit_Framework_TestCase */ protected function setUp() { - $this->contextMock = $this->getMockBuilder('Magento\Framework\Model\ModelResource\Db\Context') + $this->contextMock = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\Db\Context') ->disableOriginalConstructor() ->getMock(); diff --git a/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Order/CollectionTest.php b/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Order/CollectionTest.php index ad3b32054b4a402eb01084ab15ebb61a12d0d10d..6b3c58f38386ca50c774288cd87a84eae34c9b23 100644 --- a/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Order/CollectionTest.php +++ b/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Order/CollectionTest.php @@ -84,7 +84,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase protected $selectMock; /** - * @var \Magento\Framework\Model\ModelResource\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject */ protected $resourceMock; @@ -102,7 +102,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase ->getMock(); $this->managerMock = $this->getMockBuilder('Magento\Framework\Event\ManagerInterface') ->getMock(); - $snapshotClassName = 'Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot'; + $snapshotClassName = 'Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot'; $this->entitySnapshotMock = $this->getMockBuilder($snapshotClassName) ->disableOriginalConstructor() ->getMock(); @@ -155,7 +155,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase ->method('select') ->willReturn($this->selectMock); - $this->resourceMock = $this->getMockBuilder('Magento\Framework\Model\ModelResource\Db\AbstractDb') + $this->resourceMock = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\Db\AbstractDb') ->disableOriginalConstructor() ->getMock(); $this->resourceMock diff --git a/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Quote/CollectionTest.php b/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Quote/CollectionTest.php index c0688436318492447f49d60dea8088006bc9eab3..1b22f883259a1874b1aead0c3d8581007bc8a9d2 100644 --- a/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Quote/CollectionTest.php +++ b/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Quote/CollectionTest.php @@ -43,7 +43,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase protected $entityFactoryMock; /** - * @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot + * @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot */ protected $entitySnapshotMock; @@ -86,7 +86,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase $this->entityFactoryMock = $this->getMockBuilder('Magento\Framework\Data\Collection\EntityFactory') ->disableOriginalConstructor() ->getMock(); - $snapshotClassName = 'Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot'; + $snapshotClassName = 'Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot'; $this->entitySnapshotMock = $this->getMockBuilder($snapshotClassName) ->disableOriginalConstructor() ->setMethods(['registerSnapshot']) diff --git a/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Report/Collection/AbstractCollectionTest.php b/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Report/Collection/AbstractCollectionTest.php index 97e89fc832b735c47a9a9138cfbc2c5f2d902a1c..14cfb9c6f002a582dc4310500fe4dc100b78505e 100644 --- a/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Report/Collection/AbstractCollectionTest.php +++ b/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Report/Collection/AbstractCollectionTest.php @@ -23,7 +23,7 @@ class AbstractCollectionTest extends \PHPUnit_Framework_TestCase $eventManager = $this->getMock('\Magento\Framework\Event\Manager', [], [], '', false); $connection = $this->getMock('\Magento\Framework\DB\Adapter\Pdo\Mysql', [], [], '', false); - $resource = $this->getMockBuilder('\Magento\Framework\Model\ModelResource\Db\AbstractDb') + $resource = $this->getMockBuilder('\Magento\Framework\Model\ResourceModel\Db\AbstractDb') ->disableOriginalConstructor() ->setMethods(['getConnection']) ->getMockForAbstractClass(); diff --git a/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Report/Product/ViewedTest.php b/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Report/Product/ViewedTest.php index 4ecaf8758f4d58a8b775797bcdb6ea63ec756b55..7d845db9a52be8459b7a7ce3f941241b86044af4 100644 --- a/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Report/Product/ViewedTest.php +++ b/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Report/Product/ViewedTest.php @@ -20,7 +20,7 @@ class ViewedTest extends \PHPUnit_Framework_TestCase protected $viewed; /** - * @var \Magento\Framework\Model\ModelResource\Db\Context|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Model\ResourceModel\Db\Context|\PHPUnit_Framework_MockObject_MockObject */ protected $contextMock; @@ -143,7 +143,7 @@ class ViewedTest extends \PHPUnit_Framework_TestCase ) ); - $this->contextMock = $this->getMockBuilder('Magento\Framework\Model\ModelResource\Db\Context') + $this->contextMock = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\Db\Context') ->disableOriginalConstructor() ->getMock(); $this->contextMock->expects($this->any())->method('getResources')->willReturn($this->resourceMock); diff --git a/app/code/Magento/Reports/etc/frontend/events.xml b/app/code/Magento/Reports/etc/frontend/events.xml index f50b48b357b11238333c246bf432d25f3e55ec6d..5405ce08791be3ce560bd4ba2cd7c7f6b595c6bf 100644 --- a/app/code/Magento/Reports/etc/frontend/events.xml +++ b/app/code/Magento/Reports/etc/frontend/events.xml @@ -7,33 +7,33 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="catalog_product_compare_remove_product"> - <observer name="reports" instance="Magento\Reports\Observer\CatalogProductCompareClearObserver" method="execute" /> + <observer name="reports" instance="Magento\Reports\Observer\CatalogProductCompareClearObserver" /> </event> <event name="customer_login"> - <observer name="reports" instance="Magento\Reports\Observer\CustomerLoginObserver" method="execute" /> + <observer name="reports" instance="Magento\Reports\Observer\CustomerLoginObserver" /> </event> <event name="customer_logout"> - <observer name="reports" instance="Magento\Reports\Observer\CustomerLogoutObserver" method="execute" /> + <observer name="reports" instance="Magento\Reports\Observer\CustomerLogoutObserver" /> </event> <event name="catalog_controller_product_view"> - <observer name="reports" instance="Magento\Reports\Observer\CatalogProductViewObserver" method="execute" /> + <observer name="reports" instance="Magento\Reports\Observer\CatalogProductViewObserver" /> </event> <event name="sendfriend_product"> - <observer name="reports" instance="Magento\Reports\Observer\SendfriendProductObserver" method="execute" /> + <observer name="reports" instance="Magento\Reports\Observer\SendfriendProductObserver" /> </event> <event name="catalog_product_compare_add_product"> - <observer name="reports" instance="Magento\Reports\Observer\CatalogProductCompareAddProductObserver" method="execute" /> + <observer name="reports" instance="Magento\Reports\Observer\CatalogProductCompareAddProductObserver" /> </event> <event name="catalog_product_compare_item_collection_clear"> - <observer name="reports" instance="Magento\Reports\Observer\CatalogProductCompareClearObserver" method="execute" /> + <observer name="reports" instance="Magento\Reports\Observer\CatalogProductCompareClearObserver" /> </event> <event name="sales_quote_item_save_before"> - <observer name="reports" instance="Magento\Reports\Observer\CheckoutCartAddProductObserver" method="execute" /> + <observer name="reports" instance="Magento\Reports\Observer\CheckoutCartAddProductObserver" /> </event> <event name="wishlist_add_product"> - <observer name="reports" instance="Magento\Reports\Observer\WishlistAddProductObserver" method="execute" /> + <observer name="reports" instance="Magento\Reports\Observer\WishlistAddProductObserver" /> </event> <event name="wishlist_share"> - <observer name="reports" instance="Magento\Reports\Observer\WishlistShareObserver" method="execute" /> + <observer name="reports" instance="Magento\Reports\Observer\WishlistShareObserver" /> </event> </config> diff --git a/app/code/Magento/Reports/etc/webapi_rest/events.xml b/app/code/Magento/Reports/etc/webapi_rest/events.xml index d9ad2ef3d6ee3266774223844c332332b8278b15..e9c0adce5653400e61fc8ca2c32edb2df635247a 100644 --- a/app/code/Magento/Reports/etc/webapi_rest/events.xml +++ b/app/code/Magento/Reports/etc/webapi_rest/events.xml @@ -7,6 +7,6 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="sales_quote_item_save_before"> - <observer name="reports" instance="Magento\Reports\Observer\CheckoutCartAddProductObserver" method="execute" /> + <observer name="reports" instance="Magento\Reports\Observer\CheckoutCartAddProductObserver" /> </event> </config> diff --git a/app/code/Magento/Reports/etc/webapi_soap/events.xml b/app/code/Magento/Reports/etc/webapi_soap/events.xml index d9ad2ef3d6ee3266774223844c332332b8278b15..e9c0adce5653400e61fc8ca2c32edb2df635247a 100644 --- a/app/code/Magento/Reports/etc/webapi_soap/events.xml +++ b/app/code/Magento/Reports/etc/webapi_soap/events.xml @@ -7,6 +7,6 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="sales_quote_item_save_before"> - <observer name="reports" instance="Magento\Reports\Observer\CheckoutCartAddProductObserver" method="execute" /> + <observer name="reports" instance="Magento\Reports\Observer\CheckoutCartAddProductObserver" /> </event> </config> diff --git a/app/code/Magento/Reports/view/adminhtml/templates/store/switcher.phtml b/app/code/Magento/Reports/view/adminhtml/templates/store/switcher.phtml index 54ef28d8a556fb676aa09f6d944451f858cde2e1..18d1deff5d6cede1bec6f69b983117d87973b6b2 100644 --- a/app/code/Magento/Reports/view/adminhtml/templates/store/switcher.phtml +++ b/app/code/Magento/Reports/view/adminhtml/templates/store/switcher.phtml @@ -16,7 +16,11 @@ <div class="field field-store-switcher"> <label class="label" for="store_switcher"><?php /* @escapeNotVerified */ echo __('Show Report For:') ?></label> <div class="control"> - <select name="store_switcher" id="store_switcher" onchange="return switchStore(this);"> + <select + id="store_switcher" + class="admin__control-select" + name="store_switcher" + onchange="return switchStore(this);"> <option value=""><?php /* @escapeNotVerified */ echo __('All Websites') ?></option> <?php foreach ($block->getWebsiteCollection() as $_website): ?> <?php $showWebsite = false; ?> diff --git a/app/code/Magento/Reports/view/adminhtml/templates/store/switcher/enhanced.phtml b/app/code/Magento/Reports/view/adminhtml/templates/store/switcher/enhanced.phtml index ea4885877c6c460c2696ee3e2ea3345012b9fb42..5b9bdc0e16b5e1f17adb539227f8f347f8ff8031 100644 --- a/app/code/Magento/Reports/view/adminhtml/templates/store/switcher/enhanced.phtml +++ b/app/code/Magento/Reports/view/adminhtml/templates/store/switcher/enhanced.phtml @@ -21,7 +21,11 @@ <div class="field field-store-switcher"> <label class="label" for="store_switcher"><?php /* @escapeNotVerified */ echo __('Show Report For:') ?></label> <div class="control"> - <select name="store_switcher" id="store_switcher" onchange="return switchStore(this);"> + <select + id="store_switcher" + class="admin__control-select" + name="store_switcher" + onchange="return switchStore(this);"> <option value=""><?php /* @escapeNotVerified */ echo __('All Websites') ?></option> <?php foreach ($block->getWebsiteCollection() as $_website): ?> <?php $showWebsite = false; ?> diff --git a/app/code/Magento/Review/Model/Rating.php b/app/code/Magento/Review/Model/Rating.php index f7ff2785f211433b006ed99d0795e5d9c2e73355..f9af9a9223ee7bcb99cf2b8b5a50eae449ee8add 100644 --- a/app/code/Magento/Review/Model/Rating.php +++ b/app/code/Magento/Review/Model/Rating.php @@ -44,7 +44,7 @@ class Rating extends \Magento\Framework\Model\AbstractModel * @param \Magento\Framework\Registry $registry * @param \Magento\Review\Model\Rating\OptionFactory $ratingOptionFactory * @param \Magento\Review\Model\ResourceModel\Rating\Option\CollectionFactory $ratingCollectionF - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -53,7 +53,7 @@ class Rating extends \Magento\Framework\Model\AbstractModel \Magento\Framework\Registry $registry, \Magento\Review\Model\Rating\OptionFactory $ratingOptionFactory, \Magento\Review\Model\ResourceModel\Rating\Option\CollectionFactory $ratingCollectionF, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Review/Model/ResourceModel/Rating.php b/app/code/Magento/Review/Model/ResourceModel/Rating.php index f1f0b34e5695927a595ff3f14e0d8d5d6d0cbdae..7a0635efa5692093c62a8b2378abf2c6b8e34d7a 100644 --- a/app/code/Magento/Review/Model/ResourceModel/Rating.php +++ b/app/code/Magento/Review/Model/ResourceModel/Rating.php @@ -10,7 +10,7 @@ namespace Magento\Review\Model\ResourceModel; * * @author Magento Core Team <core@magentocommerce.com> */ -class Rating extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Rating extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { const RATING_STATUS_APPROVED = 'Approved'; @@ -32,7 +32,7 @@ class Rating extends \Magento\Framework\Model\ModelResource\Db\AbstractDb protected $_logger; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Psr\Log\LoggerInterface $logger * @param \Magento\Framework\Module\Manager $moduleManager * @param \Magento\Store\Model\StoreManagerInterface $storeManager @@ -40,7 +40,7 @@ class Rating extends \Magento\Framework\Model\ModelResource\Db\AbstractDb * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Psr\Log\LoggerInterface $logger, \Magento\Framework\Module\Manager $moduleManager, \Magento\Store\Model\StoreManagerInterface $storeManager, diff --git a/app/code/Magento/Review/Model/ResourceModel/Rating/Collection.php b/app/code/Magento/Review/Model/ResourceModel/Rating/Collection.php index 4389d8c5447726becaa62c9671ca8d76fbe3fb08..8d030fff72b3af78791efe04304d97933ff13731 100644 --- a/app/code/Magento/Review/Model/ResourceModel/Rating/Collection.php +++ b/app/code/Magento/Review/Model/ResourceModel/Rating/Collection.php @@ -10,7 +10,7 @@ namespace Magento\Review\Model\ResourceModel\Rating; * * @author Magento Core Team <core@magentocommerce.com> */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * @var \Magento\Store\Model\StoreManagerInterface @@ -36,7 +36,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param \Magento\Review\Model\ResourceModel\Rating\Option\CollectionFactory $ratingCollectionF * @param mixed $connection - * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource + * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource */ public function __construct( \Magento\Framework\Data\Collection\EntityFactory $entityFactory, @@ -46,7 +46,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Review\Model\ResourceModel\Rating\Option\CollectionFactory $ratingCollectionF, \Magento\Framework\DB\Adapter\AdapterInterface $connection = null, - \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null + \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null ) { $this->_storeManager = $storeManager; $this->_ratingCollectionF = $ratingCollectionF; diff --git a/app/code/Magento/Review/Model/ResourceModel/Rating/Entity.php b/app/code/Magento/Review/Model/ResourceModel/Rating/Entity.php index e9bc49b6e241b644454ab7ee7c7cf68dd2e9af53..f2254ab506a43554c8b5c8f1ae621ceac8c76c9e 100644 --- a/app/code/Magento/Review/Model/ResourceModel/Rating/Entity.php +++ b/app/code/Magento/Review/Model/ResourceModel/Rating/Entity.php @@ -10,7 +10,7 @@ namespace Magento\Review\Model\ResourceModel\Rating; * * @author Magento Core Team <core@magentocommerce.com> */ -class Entity extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Entity extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Rating entity resource initialization diff --git a/app/code/Magento/Review/Model/ResourceModel/Rating/Grid/Collection.php b/app/code/Magento/Review/Model/ResourceModel/Rating/Grid/Collection.php index 3c55768f4439f3427b67b121fc18e6546ecdae54..6a8723302d94220eb42cde5b5a97e8fa4ad3584e 100644 --- a/app/code/Magento/Review/Model/ResourceModel/Rating/Grid/Collection.php +++ b/app/code/Magento/Review/Model/ResourceModel/Rating/Grid/Collection.php @@ -28,7 +28,7 @@ class Collection extends \Magento\Review\Model\ResourceModel\Rating\Collection * @param \Magento\Review\Model\ResourceModel\Rating\Option\CollectionFactory $ratingCollectionF * @param \Magento\Framework\Registry $coreRegistry * @param mixed $connection - * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource + * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource */ public function __construct( \Magento\Framework\Data\Collection\EntityFactory $entityFactory, @@ -39,7 +39,7 @@ class Collection extends \Magento\Review\Model\ResourceModel\Rating\Collection \Magento\Review\Model\ResourceModel\Rating\Option\CollectionFactory $ratingCollectionF, \Magento\Framework\Registry $coreRegistry, \Magento\Framework\DB\Adapter\AdapterInterface $connection = null, - \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null + \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null ) { $this->_coreRegistry = $coreRegistry; parent::__construct( diff --git a/app/code/Magento/Review/Model/ResourceModel/Rating/Option.php b/app/code/Magento/Review/Model/ResourceModel/Rating/Option.php index b80047227e2048a5f87fc183641d681ac89019ec..e652866b456c5bb68674fdfb5b84b424d7c95c85 100644 --- a/app/code/Magento/Review/Model/ResourceModel/Rating/Option.php +++ b/app/code/Magento/Review/Model/ResourceModel/Rating/Option.php @@ -10,7 +10,7 @@ namespace Magento\Review\Model\ResourceModel\Rating; * * @author Magento Core Team <core@magentocommerce.com> */ -class Option extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Option extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Review table @@ -79,14 +79,14 @@ class Option extends \Magento\Framework\Model\ModelResource\Db\AbstractDb protected $_ratingOptionVoteF; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Customer\Model\Session $customerSession * @param \Magento\Review\Model\Rating\Option\VoteFactory $ratingOptionVoteF * @param \Magento\Framework\HTTP\PhpEnvironment\RemoteAddress $remoteAddress * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Customer\Model\Session $customerSession, \Magento\Review\Model\Rating\Option\VoteFactory $ratingOptionVoteF, \Magento\Framework\HTTP\PhpEnvironment\RemoteAddress $remoteAddress, diff --git a/app/code/Magento/Review/Model/ResourceModel/Rating/Option/Collection.php b/app/code/Magento/Review/Model/ResourceModel/Rating/Option/Collection.php index 8ddf6ec713179b4d135c45b2af14781318d4ccc4..453835f5fb7ec786bb4220ee2ec20136f8f6ba22 100644 --- a/app/code/Magento/Review/Model/ResourceModel/Rating/Option/Collection.php +++ b/app/code/Magento/Review/Model/ResourceModel/Rating/Option/Collection.php @@ -10,7 +10,7 @@ namespace Magento\Review\Model\ResourceModel\Rating\Option; * * @author Magento Core Team <core@magentocommerce.com> */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Rating votes table diff --git a/app/code/Magento/Review/Model/ResourceModel/Rating/Option/Vote.php b/app/code/Magento/Review/Model/ResourceModel/Rating/Option/Vote.php index 263c0038bdb5934247e16f72fd119f6f71990696..d9afa8cd30087ac77c11dbe5db25faf7a9fb9729 100644 --- a/app/code/Magento/Review/Model/ResourceModel/Rating/Option/Vote.php +++ b/app/code/Magento/Review/Model/ResourceModel/Rating/Option/Vote.php @@ -10,7 +10,7 @@ namespace Magento\Review\Model\ResourceModel\Rating\Option; * * @author Magento Core Team <core@magentocommerce.com> */ -class Vote extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Vote extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Resource initialization diff --git a/app/code/Magento/Review/Model/ResourceModel/Rating/Option/Vote/Collection.php b/app/code/Magento/Review/Model/ResourceModel/Rating/Option/Vote/Collection.php index 319902c901667aa0b4e98f472d84f0f5e3c8b21c..73dfc5fc74a00b8644bbe381a5e0f24fcbbcc8f0 100644 --- a/app/code/Magento/Review/Model/ResourceModel/Rating/Option/Vote/Collection.php +++ b/app/code/Magento/Review/Model/ResourceModel/Rating/Option/Vote/Collection.php @@ -10,7 +10,7 @@ namespace Magento\Review\Model\ResourceModel\Rating\Option\Vote; * * @author Magento Core Team <core@magentocommerce.com> */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Store list manager @@ -32,7 +32,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param \Magento\Review\Model\ResourceModel\Rating\Option\CollectionFactory $ratingCollectionF * @param mixed $connection - * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource + * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource */ public function __construct( \Magento\Framework\Data\Collection\EntityFactory $entityFactory, @@ -42,7 +42,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Review\Model\ResourceModel\Rating\Option\CollectionFactory $ratingCollectionF, \Magento\Framework\DB\Adapter\AdapterInterface $connection = null, - \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null + \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null ) { $this->_storeManager = $storeManager; $this->_ratingCollectionF = $ratingCollectionF; diff --git a/app/code/Magento/Review/Model/ResourceModel/Review.php b/app/code/Magento/Review/Model/ResourceModel/Review.php index 33d35f7264501c0d0877340002ca7a54a98e785c..760d841c94eba9e8a6ea962757d595745a2079f8 100644 --- a/app/code/Magento/Review/Model/ResourceModel/Review.php +++ b/app/code/Magento/Review/Model/ResourceModel/Review.php @@ -10,7 +10,7 @@ use Magento\Framework\Model\AbstractModel; /** * Review resource model */ -class Review extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Review extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Review table @@ -90,7 +90,7 @@ class Review extends \Magento\Framework\Model\ModelResource\Db\AbstractDb protected $_ratingOptions; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Framework\Stdlib\DateTime\DateTime $date * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param \Magento\Review\Model\RatingFactory $ratingFactory @@ -98,7 +98,7 @@ class Review extends \Magento\Framework\Model\ModelResource\Db\AbstractDb * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Framework\Stdlib\DateTime\DateTime $date, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Review\Model\RatingFactory $ratingFactory, diff --git a/app/code/Magento/Review/Model/ResourceModel/Review/Collection.php b/app/code/Magento/Review/Model/ResourceModel/Review/Collection.php index 81366748435e96e210cb948911b1f08194d60c90..0cbd00fe45ecb52b7d6676e7aae2d274d4be8f61 100644 --- a/app/code/Magento/Review/Model/ResourceModel/Review/Collection.php +++ b/app/code/Magento/Review/Model/ResourceModel/Review/Collection.php @@ -10,7 +10,7 @@ namespace Magento\Review\Model\ResourceModel\Review; * * @author Magento Core Team <core@magentocommerce.com> */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Review table @@ -83,7 +83,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab * @param \Magento\Review\Model\Rating\Option\VoteFactory $voteFactory * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param mixed $connection - * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource + * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource */ public function __construct( \Magento\Framework\Data\Collection\EntityFactory $entityFactory, @@ -94,7 +94,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab \Magento\Review\Model\Rating\Option\VoteFactory $voteFactory, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Framework\DB\Adapter\AdapterInterface $connection = null, - \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null + \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null ) { $this->_reviewData = $reviewData; $this->_voteFactory = $voteFactory; diff --git a/app/code/Magento/Review/Model/ResourceModel/Review/Status.php b/app/code/Magento/Review/Model/ResourceModel/Review/Status.php index 0a6464b6ceb671edb649cd88e05953dfc8cb6c23..8e1203d83504f3c3719ddfdd8054bbc035d62b23 100644 --- a/app/code/Magento/Review/Model/ResourceModel/Review/Status.php +++ b/app/code/Magento/Review/Model/ResourceModel/Review/Status.php @@ -10,7 +10,7 @@ namespace Magento\Review\Model\ResourceModel\Review; * * @author Magento Core Team <core@magentocommerce.com> */ -class Status extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Status extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Resource status model initialization diff --git a/app/code/Magento/Review/Model/ResourceModel/Review/Status/Collection.php b/app/code/Magento/Review/Model/ResourceModel/Review/Status/Collection.php index 12671a70e88fb7f4a8db2b3e5524ed95c7f54081..6066207cd03a11414a5a67f47295435c87c2e92f 100644 --- a/app/code/Magento/Review/Model/ResourceModel/Review/Status/Collection.php +++ b/app/code/Magento/Review/Model/ResourceModel/Review/Status/Collection.php @@ -11,7 +11,7 @@ */ namespace Magento\Review\Model\ResourceModel\Review\Status; -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Review status table diff --git a/app/code/Magento/Review/Model/ResourceModel/Review/Summary.php b/app/code/Magento/Review/Model/ResourceModel/Review/Summary.php index 79614d2f1e6a2e60fbba8fe45a247d23960a7c6c..260e3892037d38ee7793dafe40605f2d176f67aa 100644 --- a/app/code/Magento/Review/Model/ResourceModel/Review/Summary.php +++ b/app/code/Magento/Review/Model/ResourceModel/Review/Summary.php @@ -12,7 +12,7 @@ use Magento\Framework\Model\AbstractModel; * * @author Magento Core Team <core@magentocommerce.com> */ -class Summary extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Summary extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Define module diff --git a/app/code/Magento/Review/Model/ResourceModel/Review/Summary/Collection.php b/app/code/Magento/Review/Model/ResourceModel/Review/Summary/Collection.php index 5a8a786c105a1401f236997932cf34db899120be..9cc5a8b54d656c3c518e564029f55112c69bd9d3 100644 --- a/app/code/Magento/Review/Model/ResourceModel/Review/Summary/Collection.php +++ b/app/code/Magento/Review/Model/ResourceModel/Review/Summary/Collection.php @@ -10,7 +10,7 @@ namespace Magento\Review\Model\ResourceModel\Review\Summary; * * @author Magento Core Team <core@magentocommerce.com> */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * {@inheritdoc} diff --git a/app/code/Magento/Review/Model/Review.php b/app/code/Magento/Review/Model/Review.php index 2bba759b33540fe4c743d30cbe16e8e8cdb4c01a..a44da6d2f825851d1e65636140c2a8047a491af2 100644 --- a/app/code/Magento/Review/Model/Review.php +++ b/app/code/Magento/Review/Model/Review.php @@ -120,7 +120,7 @@ class Review extends \Magento\Framework\Model\AbstractModel implements IdentityI * @param \Magento\Review\Model\Review\Summary $reviewSummary * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param \Magento\Framework\UrlInterface $urlModel - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -135,7 +135,7 @@ class Review extends \Magento\Framework\Model\AbstractModel implements IdentityI \Magento\Review\Model\Review\Summary $reviewSummary, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Framework\UrlInterface $urlModel, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Review/Model/Review/Status.php b/app/code/Magento/Review/Model/Review/Status.php index aa3aee47b1954d0d680ca996b440cf7e1f205750..cb5b9f71368877f920a55b0e61553e39d5c157a3 100644 --- a/app/code/Magento/Review/Model/Review/Status.php +++ b/app/code/Magento/Review/Model/Review/Status.php @@ -17,14 +17,14 @@ class Status extends \Magento\Framework\Model\AbstractModel /** * @param \Magento\Framework\Model\Context $context * @param \Magento\Framework\Registry $registry - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ public function __construct( \Magento\Framework\Model\Context $context, \Magento\Framework\Registry $registry, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Review/Model/Rss.php b/app/code/Magento/Review/Model/Rss.php index 2f876be22792ba38021a0804fd4db9a9f33e06af..1acd912d6be2f6ed6d892560d3a4e960e5752686 100644 --- a/app/code/Magento/Review/Model/Rss.php +++ b/app/code/Magento/Review/Model/Rss.php @@ -36,7 +36,7 @@ class Rss extends \Magento\Framework\Model\AbstractModel } /** - * @return $this|\Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection + * @return $this|\Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection */ public function getProductCollection() { diff --git a/app/code/Magento/Review/Test/Unit/Model/ResourceModel/Review/CollectionTest.php b/app/code/Magento/Review/Test/Unit/Model/ResourceModel/Review/CollectionTest.php index 292aa4fb64ad28c86426e05796d5d3a563796de7..c93e7c82679cd42f3a4acaabcb783800a613a2f3 100644 --- a/app/code/Magento/Review/Test/Unit/Model/ResourceModel/Review/CollectionTest.php +++ b/app/code/Magento/Review/Test/Unit/Model/ResourceModel/Review/CollectionTest.php @@ -23,7 +23,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase protected $storeManagerMock; /** - * @var \Magento\Framework\Model\ModelResource\Db\AbstractDb | \PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb | \PHPUnit_Framework_MockObject_MockObject */ protected $resourceMock; @@ -44,7 +44,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase $this->storeManagerMock = $this->getMock('Magento\Store\Model\StoreManagerInterface'); $this->storeManagerMock->expects($this->any())->method('getStore')->will($this->returnValue($store)); $this->objectManager = (new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this)); - $this->resourceMock = $this->getMockBuilder('Magento\Framework\Model\ModelResource\Db\AbstractDb') + $this->resourceMock = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\Db\AbstractDb') ->disableOriginalConstructor() ->setMethods(['getConnection', 'getMainTable', 'getTable']) ->getMockForAbstractClass(); diff --git a/app/code/Magento/Review/Test/Unit/Model/ResourceModel/Review/Summary/CollectionTest.php b/app/code/Magento/Review/Test/Unit/Model/ResourceModel/Review/Summary/CollectionTest.php index 35c6aab3be248b11fffb757ec6445cd05919c32b..e3ae5ad44c7dcad79de3f0fe4f61977452229e1b 100644 --- a/app/code/Magento/Review/Test/Unit/Model/ResourceModel/Review/Summary/CollectionTest.php +++ b/app/code/Magento/Review/Test/Unit/Model/ResourceModel/Review/Summary/CollectionTest.php @@ -31,7 +31,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase protected $loggerMock; /** - * @var \Magento\Framework\Model\ModelResource\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject */ protected $resourceMock; @@ -62,7 +62,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase false ); $this->loggerMock = $this->getMock('Psr\Log\LoggerInterface'); - $this->resourceMock = $this->getMockBuilder('Magento\Framework\Model\ModelResource\Db\AbstractDb') + $this->resourceMock = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\Db\AbstractDb') ->setMethods(['getConnection', 'getMainTable', 'getTable']) ->disableOriginalConstructor() ->getMockForAbstractClass(); diff --git a/app/code/Magento/Review/etc/adminhtml/events.xml b/app/code/Magento/Review/etc/adminhtml/events.xml index 8208e69e447ae104f9e028d6431309b8b1bd0878..f269c460942ba432681324cfad2fc3f8dfc5bf5e 100644 --- a/app/code/Magento/Review/etc/adminhtml/events.xml +++ b/app/code/Magento/Review/etc/adminhtml/events.xml @@ -7,6 +7,6 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="catalog_product_delete_after_done"> - <observer name="review" instance="Magento\Review\Observer\ProcessProductAfterDeleteEventObserver" method="execute" /> + <observer name="review" instance="Magento\Review\Observer\ProcessProductAfterDeleteEventObserver" /> </event> </config> diff --git a/app/code/Magento/Review/etc/frontend/events.xml b/app/code/Magento/Review/etc/frontend/events.xml index 3a048b5c5092125ee152087374e95aabc22083d5..95ad1ccf54fc1e715917f7d4ae275a1240a28b5f 100644 --- a/app/code/Magento/Review/etc/frontend/events.xml +++ b/app/code/Magento/Review/etc/frontend/events.xml @@ -7,9 +7,9 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="tag_tag_product_collection_load_after"> - <observer name="review" instance="Magento\Review\Observer\TagProductCollectionLoadAfterObserver" method="execute" shared="false" /> + <observer name="review" instance="Magento\Review\Observer\TagProductCollectionLoadAfterObserver" shared="false" /> </event> <event name="catalog_block_product_list_collection"> - <observer name="review" instance="Magento\Review\Observer\CatalogBlockProductCollectionBeforeToHtmlObserver" method="execute" shared="false" /> + <observer name="review" instance="Magento\Review\Observer\CatalogBlockProductCollectionBeforeToHtmlObserver" shared="false" /> </event> </config> diff --git a/app/code/Magento/Rss/Model/System/Config/Backend/Links.php b/app/code/Magento/Rss/Model/System/Config/Backend/Links.php index c86f176a373be2b0e100c8b9468036eaede200ea..64f383245e31226cac93726c22a84bd5d90d8a3a 100644 --- a/app/code/Magento/Rss/Model/System/Config/Backend/Links.php +++ b/app/code/Magento/Rss/Model/System/Config/Backend/Links.php @@ -21,7 +21,7 @@ class Links extends \Magento\Framework\App\Config\Value * @param \Magento\Framework\Registry $registry * @param \Magento\Framework\App\Config\ScopeConfigInterface $config * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -30,7 +30,7 @@ class Links extends \Magento\Framework\App\Config\Value \Magento\Framework\Registry $registry, \Magento\Framework\App\Config\ScopeConfigInterface $config, \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Rule/Model/AbstractModel.php b/app/code/Magento/Rule/Model/AbstractModel.php index a125cb03f36ab05c093b6a8f27df45f391b87650..07bc7957bfbf8ba23ce9db738a95c8c725c007f9 100644 --- a/app/code/Magento/Rule/Model/AbstractModel.php +++ b/app/code/Magento/Rule/Model/AbstractModel.php @@ -81,7 +81,7 @@ abstract class AbstractModel extends \Magento\Framework\Model\AbstractModel * @param \Magento\Framework\Registry $registry * @param \Magento\Framework\Data\FormFactory $formFactory * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -90,7 +90,7 @@ abstract class AbstractModel extends \Magento\Framework\Model\AbstractModel \Magento\Framework\Registry $registry, \Magento\Framework\Data\FormFactory $formFactory, \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Rule/Model/ResourceModel/AbstractResource.php b/app/code/Magento/Rule/Model/ResourceModel/AbstractResource.php index 0d7fb27f5b005020d97f84e12be414d3bcf705af..0655ddb25a9751170935b803fdc780f93c9b5414 100644 --- a/app/code/Magento/Rule/Model/ResourceModel/AbstractResource.php +++ b/app/code/Magento/Rule/Model/ResourceModel/AbstractResource.php @@ -11,7 +11,7 @@ */ namespace Magento\Rule\Model\ResourceModel; -abstract class AbstractResource extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +abstract class AbstractResource extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Store associated with rule entities information map diff --git a/app/code/Magento/Rule/Model/ResourceModel/Rule/Collection/AbstractCollection.php b/app/code/Magento/Rule/Model/ResourceModel/Rule/Collection/AbstractCollection.php index 07e3faafcdfa0aa86418b37356183c5f3d138c16..227300f8b068877125c5ad38c874c107f933fd38 100644 --- a/app/code/Magento/Rule/Model/ResourceModel/Rule/Collection/AbstractCollection.php +++ b/app/code/Magento/Rule/Model/ResourceModel/Rule/Collection/AbstractCollection.php @@ -11,7 +11,7 @@ */ namespace Magento\Rule\Model\ResourceModel\Rule\Collection; -abstract class AbstractCollection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +abstract class AbstractCollection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Store associated with rule entities information map diff --git a/app/code/Magento/Rule/Test/Unit/Model/ResourceModel/Rule/Collection/AbstractCollectionTest.php b/app/code/Magento/Rule/Test/Unit/Model/ResourceModel/Rule/Collection/AbstractCollectionTest.php index e40d4f6ca919e4bd88c9bceb2d80db611e3234da..f93510b4a238781a58f84f93bce4e30790517933 100644 --- a/app/code/Magento/Rule/Test/Unit/Model/ResourceModel/Rule/Collection/AbstractCollectionTest.php +++ b/app/code/Magento/Rule/Test/Unit/Model/ResourceModel/Rule/Collection/AbstractCollectionTest.php @@ -41,7 +41,7 @@ class AbstractCollectionTest extends \PHPUnit_Framework_TestCase protected $_managerMock; /** - * @var \Magento\Framework\Model\ModelResource\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject */ protected $_db; @@ -52,7 +52,7 @@ class AbstractCollectionTest extends \PHPUnit_Framework_TestCase $this->_fetchStrategyMock = $this->getMock('Magento\Framework\Data\Collection\Db\FetchStrategyInterface'); $this->_managerMock = $this->getMock('Magento\Framework\Event\ManagerInterface'); $this->_db = $this->getMockForAbstractClass( - '\Magento\Framework\Model\ModelResource\Db\AbstractDb', + '\Magento\Framework\Model\ResourceModel\Db\AbstractDb', [], '', false, diff --git a/app/code/Magento/Rule/view/adminhtml/web/rules.js b/app/code/Magento/Rule/view/adminhtml/web/rules.js index 262d155a53cd14cec982876aa37396a31a403b37..50b3fdd85ea39f8cd1ec0ab4ff6cc3442f0a373e 100644 --- a/app/code/Magento/Rule/view/adminhtml/web/rules.js +++ b/app/code/Magento/Rule/view/adminhtml/web/rules.js @@ -4,6 +4,7 @@ */ define([ "jquery", + 'Magento_Ui/js/modal/alert', "mage/translate", "prototype" ], function(jQuery){ diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Creditmemo/AbstractCreditmemo/Pdfcreditmemos.php b/app/code/Magento/Sales/Controller/Adminhtml/Creditmemo/AbstractCreditmemo/Pdfcreditmemos.php index 365e188b0c15719769e9535009de5efdb57b8cbf..24f639ea10b083799e579b1a6d9b82b455e5dfc4 100644 --- a/app/code/Magento/Sales/Controller/Adminhtml/Creditmemo/AbstractCreditmemo/Pdfcreditmemos.php +++ b/app/code/Magento/Sales/Controller/Adminhtml/Creditmemo/AbstractCreditmemo/Pdfcreditmemos.php @@ -7,7 +7,7 @@ namespace Magento\Sales\Controller\Adminhtml\Creditmemo\AbstractCreditmemo; use Magento\Framework\App\ResponseInterface; use Magento\Framework\App\Filesystem\DirectoryList; -use Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection; +use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection; use Magento\Sales\Model\Order\Pdf\Creditmemo; use Magento\Framework\Stdlib\DateTime\DateTime; use Magento\Backend\App\Action\Context; diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Invoice/AbstractInvoice/Pdfinvoices.php b/app/code/Magento/Sales/Controller/Adminhtml/Invoice/AbstractInvoice/Pdfinvoices.php index 4f2cd24cac006822cefd7d3186b53e6a6a85857a..181764047983f5dffc56da262b53a84fcf6ff803 100644 --- a/app/code/Magento/Sales/Controller/Adminhtml/Invoice/AbstractInvoice/Pdfinvoices.php +++ b/app/code/Magento/Sales/Controller/Adminhtml/Invoice/AbstractInvoice/Pdfinvoices.php @@ -8,7 +8,7 @@ namespace Magento\Sales\Controller\Adminhtml\Invoice\AbstractInvoice; use Magento\Framework\App\ResponseInterface; use Magento\Framework\App\Filesystem\DirectoryList; -use Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection; +use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection; use Magento\Ui\Component\MassAction\Filter; use Magento\Sales\Model\Order\Pdf\Invoice; use Magento\Framework\Stdlib\DateTime\DateTime; @@ -16,6 +16,9 @@ use Magento\Framework\App\Response\Http\FileFactory; use Magento\Backend\App\Action\Context; use Magento\Sales\Model\ResourceModel\Order\Invoice\CollectionFactory; +/** + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + */ abstract class Pdfinvoices extends \Magento\Sales\Controller\Adminhtml\Order\AbstractMassAction { /** diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/AbstractMassAction.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/AbstractMassAction.php index c25455db57549f2f274fc8de148763ea4f238f1b..badfbc2ad438df50d0870a131da62730a7c6159a 100644 --- a/app/code/Magento/Sales/Controller/Adminhtml/Order/AbstractMassAction.php +++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/AbstractMassAction.php @@ -5,7 +5,7 @@ */ namespace Magento\Sales\Controller\Adminhtml\Order; -use Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection; +use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection; use Magento\Framework\Controller\ResultFactory; use Magento\Framework\App\ResponseInterface; use Magento\Framework\Controller\ResultInterface; diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/MassCancel.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/MassCancel.php index ed1b73abba7fd842c333558919de5f2ca906d271..244390e564d19cf8bf7923c2faa0b2dba3c5b726 100644 --- a/app/code/Magento/Sales/Controller/Adminhtml/Order/MassCancel.php +++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/MassCancel.php @@ -5,7 +5,7 @@ */ namespace Magento\Sales\Controller\Adminhtml\Order; -use Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection; +use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection; use Magento\Backend\App\Action\Context; use Magento\Ui\Component\MassAction\Filter; use Magento\Sales\Model\ResourceModel\Order\CollectionFactory; diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/MassHold.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/MassHold.php index b9cab6dfe7abbe6a84a69029bca2f833dbec2b80..df35760a47cb56f2b0007e283bd7cb4fdc290f5d 100644 --- a/app/code/Magento/Sales/Controller/Adminhtml/Order/MassHold.php +++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/MassHold.php @@ -5,7 +5,7 @@ */ namespace Magento\Sales\Controller\Adminhtml\Order; -use Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection; +use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection; use Magento\Backend\App\Action\Context; use Magento\Ui\Component\MassAction\Filter; use Magento\Sales\Model\ResourceModel\Order\CollectionFactory; diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/MassUnhold.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/MassUnhold.php index da88afbc23fae5e41b48bb438d77e689070fd432..ab2d11b29a7f944e1989bfe563f803b2ad2f1ec3 100644 --- a/app/code/Magento/Sales/Controller/Adminhtml/Order/MassUnhold.php +++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/MassUnhold.php @@ -5,7 +5,7 @@ */ namespace Magento\Sales\Controller\Adminhtml\Order; -use Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection; +use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection; use Magento\Backend\App\Action\Context; use Magento\Ui\Component\MassAction\Filter; use Magento\Sales\Model\ResourceModel\Order\CollectionFactory; diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Pdfcreditmemos.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Pdfcreditmemos.php index 3a170803b6c0a56632ac327b9cf28fac8c6f4b08..b46e8c2c7e0d607756684176a235c6e6b471f8ce 100644 --- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Pdfcreditmemos.php +++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Pdfcreditmemos.php @@ -7,7 +7,7 @@ namespace Magento\Sales\Controller\Adminhtml\Order; use Magento\Framework\App\ResponseInterface; use Magento\Framework\App\Filesystem\DirectoryList; -use Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection; +use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection; use Magento\Ui\Component\MassAction\Filter; use Magento\Sales\Model\Order\Pdf\Creditmemo; use Magento\Framework\Stdlib\DateTime\DateTime; diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Pdfdocs.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Pdfdocs.php index 44886e549ba9798ee418ac9cfd4238d712b9ed46..16341d5e06ae435b9cc0a64c8005cccddf26cefe 100644 --- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Pdfdocs.php +++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Pdfdocs.php @@ -7,7 +7,7 @@ namespace Magento\Sales\Controller\Adminhtml\Order; use Magento\Framework\App\ResponseInterface; use Magento\Framework\App\Filesystem\DirectoryList; -use Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection; +use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection; use Magento\Sales\Model\Order\Pdf\Invoice; use Magento\Backend\App\Action\Context; use Magento\Framework\App\Response\Http\FileFactory; diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Pdfinvoices.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Pdfinvoices.php index bc6fccf9953d50be9b260039536b9183389a902f..6f7f353dddce07593356a460774543c9e21f0194 100644 --- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Pdfinvoices.php +++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Pdfinvoices.php @@ -7,7 +7,7 @@ namespace Magento\Sales\Controller\Adminhtml\Order; use Magento\Framework\App\ResponseInterface; use Magento\Framework\App\Filesystem\DirectoryList; -use Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection; +use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection; use Magento\Ui\Component\MassAction\Filter; use Magento\Sales\Model\Order\Pdf\Invoice; use Magento\Framework\Stdlib\DateTime\DateTime; @@ -17,6 +17,9 @@ use Magento\Framework\Controller\ResultInterface; use Magento\Sales\Model\ResourceModel\Order\Invoice\CollectionFactory; use Magento\Sales\Model\ResourceModel\Order\Collection as OrderCollection; +/** + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + */ class Pdfinvoices extends \Magento\Sales\Controller\Adminhtml\Order\AbstractMassAction { /** diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Pdfshipments.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Pdfshipments.php index fdc834d140e2f6047be9422b384142cce45fd43f..f71bf7d8e0efb5891ea1c6ed192dd28314606ab5 100644 --- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Pdfshipments.php +++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Pdfshipments.php @@ -7,7 +7,7 @@ namespace Magento\Sales\Controller\Adminhtml\Order; use Magento\Framework\App\ResponseInterface; use Magento\Framework\App\Filesystem\DirectoryList; -use Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection; +use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection; use Magento\Backend\App\Action\Context; use Magento\Framework\App\Response\Http\FileFactory; use Magento\Ui\Component\MassAction\Filter; diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Shipment/AbstractShipment/Pdfshipments.php b/app/code/Magento/Sales/Controller/Adminhtml/Shipment/AbstractShipment/Pdfshipments.php index dabc2f0df7f5a5a919acba2c5824efe6b642564d..aaaeba3ccecbfa19773ea90c1cfcf8f969ef4b07 100644 --- a/app/code/Magento/Sales/Controller/Adminhtml/Shipment/AbstractShipment/Pdfshipments.php +++ b/app/code/Magento/Sales/Controller/Adminhtml/Shipment/AbstractShipment/Pdfshipments.php @@ -10,7 +10,7 @@ use Magento\Backend\App\Action\Context; use Magento\Framework\App\ResponseInterface; use Magento\Framework\App\Filesystem\DirectoryList; use Magento\Framework\App\Response\Http\FileFactory; -use Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection; +use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection; use Magento\Ui\Component\MassAction\Filter; use Magento\Sales\Model\Order\Pdf\Shipment; use Magento\Framework\Stdlib\DateTime\DateTime; diff --git a/app/code/Magento/Sales/Model/Observer/CleanExpiredQuotes.php b/app/code/Magento/Sales/Cron/CleanExpiredQuotes.php similarity index 95% rename from app/code/Magento/Sales/Model/Observer/CleanExpiredQuotes.php rename to app/code/Magento/Sales/Cron/CleanExpiredQuotes.php index 80c8a8a7e4efa8183afe140884589116cc684eee..1e28379c955021daf3116aca2494174350e7858b 100644 --- a/app/code/Magento/Sales/Model/Observer/CleanExpiredQuotes.php +++ b/app/code/Magento/Sales/Cron/CleanExpiredQuotes.php @@ -3,7 +3,7 @@ * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ -namespace Magento\Sales\Model\Observer; +namespace Magento\Sales\Cron; use Magento\Store\Model\StoresConfig; @@ -72,7 +72,7 @@ class CleanExpiredQuotes * * @return array */ - public function getExpireQuotesAdditionalFilterFields() + protected function getExpireQuotesAdditionalFilterFields() { return $this->expireQuotesFilterFields; } diff --git a/app/code/Magento/Sales/Cron/GridAsyncInsert.php b/app/code/Magento/Sales/Cron/GridAsyncInsert.php new file mode 100644 index 0000000000000000000000000000000000000000..9935cdee4e1fc69701337014a4766cfac4e82061 --- /dev/null +++ b/app/code/Magento/Sales/Cron/GridAsyncInsert.php @@ -0,0 +1,47 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Sales\Cron; + +/** + * Sales entity grids indexing observer. + * + * Performs handling cron jobs related to indexing + * of Order, Invoice, Shipment and Creditmemo grids. + */ +class GridAsyncInsert +{ + /** + * @var \Magento\Sales\Model\GridAsyncInsert + */ + protected $asyncInsert; + + /** + * @param \Magento\Sales\Model\GridAsyncInsert $asyncInsert + */ + public function __construct( + \Magento\Sales\Model\GridAsyncInsert $asyncInsert + ) { + $this->asyncInsert = $asyncInsert; + } + + /** + * Handles asynchronous insertion of the new entity into + * corresponding grid during cron job. + * + * Also method is used in the next events: + * + * - config_data_dev_grid_async_indexing_disabled + * + * Works only if asynchronous grid indexing is enabled + * in global settings. + * + * @return void + */ + public function execute() + { + $this->asyncInsert->asyncInsert(); + } +} diff --git a/app/code/Magento/Sales/Cron/SendEmails.php b/app/code/Magento/Sales/Cron/SendEmails.php new file mode 100644 index 0000000000000000000000000000000000000000..6592a06d02475c91f9683f1b6f128bab49e66d3e --- /dev/null +++ b/app/code/Magento/Sales/Cron/SendEmails.php @@ -0,0 +1,48 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Sales\Cron; + +/** + * Sales emails sending observer. + * + * Performs handling of cron jobs related to sending emails to customers + * after creation/modification of Order, Invoice, Shipment or Creditmemo. + */ +class SendEmails +{ + /** + * Global configuration storage. + * + * @var \Magento\Sales\Model\EmailSenderHandler + */ + protected $emailSenderHandler; + + /** + * @param \Magento\Sales\Model\EmailSenderHandler $emailSenderHandler + */ + public function __construct(\Magento\Sales\Model\EmailSenderHandler $emailSenderHandler) + { + $this->emailSenderHandler = $emailSenderHandler; + } + + /** + * Handles asynchronous email sending during corresponding + * cron job. + * + * Also method is used in the next events: + * + * - config_data_sales_email_general_async_sending_disabled + * + * Works only if asynchronous email sending is enabled + * in global settings. + * + * @return void + */ + public function execute() + { + $this->emailSenderHandler->sendEmails(); + } +} diff --git a/app/code/Magento/Sales/Helper/Admin.php b/app/code/Magento/Sales/Helper/Admin.php index ef241613afd5e209cf84286535c2cc4bd4fd7ba4..fc6590a7134a1e41735828b5dc327ad2960fca5e 100644 --- a/app/code/Magento/Sales/Helper/Admin.php +++ b/app/code/Magento/Sales/Helper/Admin.php @@ -113,8 +113,8 @@ class Admin extends \Magento\Framework\App\Helper\AbstractHelper /** * Filter collection by removing not available product types * - * @param \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection $collection - * @return \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection + * @param \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection $collection + * @return \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection */ public function applySalableProductTypesFilter($collection) { diff --git a/app/code/Magento/Sales/Model/AbstractModel.php b/app/code/Magento/Sales/Model/AbstractModel.php index e63ad080d3d3d374b687954cf4ea75816e4c20ab..cc9cac1cf7834f081d18604e5a0607b4f4221a55 100644 --- a/app/code/Magento/Sales/Model/AbstractModel.php +++ b/app/code/Magento/Sales/Model/AbstractModel.php @@ -21,7 +21,7 @@ abstract class AbstractModel extends AbstractExtensibleModel * @param \Magento\Framework\Registry $registry * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory * @param AttributeValueFactory $customAttributeFactory - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -30,7 +30,7 @@ abstract class AbstractModel extends AbstractExtensibleModel \Magento\Framework\Registry $registry, \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory, AttributeValueFactory $customAttributeFactory, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Sales/Model/Observer/AggregateSalesReportBestsellersData.php b/app/code/Magento/Sales/Model/CronJob/AggregateSalesReportBestsellersData.php similarity index 97% rename from app/code/Magento/Sales/Model/Observer/AggregateSalesReportBestsellersData.php rename to app/code/Magento/Sales/Model/CronJob/AggregateSalesReportBestsellersData.php index cff569e21c212f78c40a5807cf0da513737da98a..98d2b5f9c8fde08d2960e5e57f4f803ceef82b3a 100644 --- a/app/code/Magento/Sales/Model/Observer/AggregateSalesReportBestsellersData.php +++ b/app/code/Magento/Sales/Model/CronJob/AggregateSalesReportBestsellersData.php @@ -3,7 +3,7 @@ * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ -namespace Magento\Sales\Model\Observer; +namespace Magento\Sales\Model\CronJob; use Magento\Framework\Locale\ResolverInterface; use Magento\Framework\Stdlib\DateTime\TimezoneInterface; diff --git a/app/code/Magento/Sales/Model/Observer/AggregateSalesReportInvoicedData.php b/app/code/Magento/Sales/Model/CronJob/AggregateSalesReportInvoicedData.php similarity index 97% rename from app/code/Magento/Sales/Model/Observer/AggregateSalesReportInvoicedData.php rename to app/code/Magento/Sales/Model/CronJob/AggregateSalesReportInvoicedData.php index 8059b63af025bd0bccbf5bbb9e33d9e6ea85ad3c..6cfe9026759f7a6d00753685585760f18c8b0c8d 100644 --- a/app/code/Magento/Sales/Model/Observer/AggregateSalesReportInvoicedData.php +++ b/app/code/Magento/Sales/Model/CronJob/AggregateSalesReportInvoicedData.php @@ -3,7 +3,7 @@ * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ -namespace Magento\Sales\Model\Observer; +namespace Magento\Sales\Model\CronJob; /** * Class AggregateSalesReportInvoicedData diff --git a/app/code/Magento/Sales/Model/Observer/AggregateSalesReportOrderData.php b/app/code/Magento/Sales/Model/CronJob/AggregateSalesReportOrderData.php similarity index 97% rename from app/code/Magento/Sales/Model/Observer/AggregateSalesReportOrderData.php rename to app/code/Magento/Sales/Model/CronJob/AggregateSalesReportOrderData.php index e67cfcf2fb8c7e193569cc73a6e47159f4c06459..2a4a9c9b153e4122f27856aaa1e5890f9e5d7da8 100644 --- a/app/code/Magento/Sales/Model/Observer/AggregateSalesReportOrderData.php +++ b/app/code/Magento/Sales/Model/CronJob/AggregateSalesReportOrderData.php @@ -3,7 +3,7 @@ * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ -namespace Magento\Sales\Model\Observer; +namespace Magento\Sales\Model\CronJob; /** * Class AggregateSalesReportOrderData diff --git a/app/code/Magento/Sales/Model/Observer/AggregateSalesReportRefundedData.php b/app/code/Magento/Sales/Model/CronJob/AggregateSalesReportRefundedData.php similarity index 97% rename from app/code/Magento/Sales/Model/Observer/AggregateSalesReportRefundedData.php rename to app/code/Magento/Sales/Model/CronJob/AggregateSalesReportRefundedData.php index 0fbb0e308c07dfec3f038f959fa352b7556b857c..1864aef52b411ffe2d9f7251a9ce04c7a92eee3c 100644 --- a/app/code/Magento/Sales/Model/Observer/AggregateSalesReportRefundedData.php +++ b/app/code/Magento/Sales/Model/CronJob/AggregateSalesReportRefundedData.php @@ -3,7 +3,7 @@ * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ -namespace Magento\Sales\Model\Observer; +namespace Magento\Sales\Model\CronJob; use Magento\Framework\Locale\ResolverInterface; use Magento\Framework\Stdlib\DateTime\TimezoneInterface; diff --git a/app/code/Magento/Sales/Model/Observer/CleanExpiredOrders.php b/app/code/Magento/Sales/Model/CronJob/CleanExpiredOrders.php similarity index 98% rename from app/code/Magento/Sales/Model/Observer/CleanExpiredOrders.php rename to app/code/Magento/Sales/Model/CronJob/CleanExpiredOrders.php index b36e8a8af292dcf7b9d2208f538cc2c02cfe6f0f..8fb948ac24b7bfc7627468f45f87a7f1a9ffd447 100644 --- a/app/code/Magento/Sales/Model/Observer/CleanExpiredOrders.php +++ b/app/code/Magento/Sales/Model/CronJob/CleanExpiredOrders.php @@ -3,7 +3,7 @@ * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ -namespace Magento\Sales\Model\Observer; +namespace Magento\Sales\Model\CronJob; use Magento\Store\Model\StoresConfig; use Magento\Sales\Model\Order; diff --git a/app/code/Magento/Sales/Model/Observer/SendEmails.php b/app/code/Magento/Sales/Model/EmailSenderHandler.php similarity index 84% rename from app/code/Magento/Sales/Model/Observer/SendEmails.php rename to app/code/Magento/Sales/Model/EmailSenderHandler.php index 99fe8486dfdd3c3588052eb4c0f55d65698eeb2d..29653f368dec1cb86f646d9c6d9ab0b09904e60b 100644 --- a/app/code/Magento/Sales/Model/Observer/SendEmails.php +++ b/app/code/Magento/Sales/Model/EmailSenderHandler.php @@ -3,15 +3,15 @@ * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ -namespace Magento\Sales\Model\Observer; +namespace Magento\Sales\Model; /** - * Sales emails sending observer. + * Sales emails sending * * Performs handling of cron jobs related to sending emails to customers * after creation/modification of Order, Invoice, Shipment or Creditmemo. */ -class SendEmails +class EmailSenderHandler { /** * Email sender model. @@ -60,19 +60,10 @@ class SendEmails } /** - * Handles asynchronous email sending during corresponding - * cron job. - * - * Also method is used in the next events: - * - * - config_data_sales_email_general_async_sending_disabled - * - * Works only if asynchronous email sending is enabled - * in global settings. - * + * Handles asynchronous email sending * @return void */ - public function execute() + public function sendEmails() { if ($this->globalConfig->getValue('sales_email/general/async_sending')) { $this->entityCollection->addFieldToFilter('send_email', ['eq' => 1]); diff --git a/app/code/Magento/Sales/Model/GridAsyncInsert.php b/app/code/Magento/Sales/Model/GridAsyncInsert.php new file mode 100644 index 0000000000000000000000000000000000000000..c03f47be15d6558eabc55c19c719aca252c3ba3f --- /dev/null +++ b/app/code/Magento/Sales/Model/GridAsyncInsert.php @@ -0,0 +1,61 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Sales\Model; + +/** + * Sales entity grids indexing observer. + * + * Performs handling of events and cron jobs related to indexing + * of Order, Invoice, Shipment and Creditmemo grids. + */ +class GridAsyncInsert +{ + /** + * Entity grid model. + * + * @var \Magento\Sales\Model\ResourceModel\GridInterface + */ + protected $entityGrid; + + /** + * Global configuration storage. + * + * @var \Magento\Framework\App\Config\ScopeConfigInterface + */ + protected $globalConfig; + + /** + * @param \Magento\Sales\Model\ResourceModel\GridInterface $entityGrid + * @param \Magento\Framework\App\Config\ScopeConfigInterface $globalConfig + */ + public function __construct( + \Magento\Sales\Model\ResourceModel\GridInterface $entityGrid, + \Magento\Framework\App\Config\ScopeConfigInterface $globalConfig + ) { + $this->entityGrid = $entityGrid; + $this->globalConfig = $globalConfig; + } + + /** + * Handles asynchronous insertion of the new entity into + * corresponding grid during cron job. + * + * Also method is used in the next events: + * + * - config_data_dev_grid_async_indexing_disabled + * + * Works only if asynchronous grid indexing is enabled + * in global settings. + * + * @return void + */ + public function asyncInsert() + { + if ($this->globalConfig->getValue('dev/grid/async_indexing')) { + $this->entityGrid->refreshBySchedule(); + } + } +} diff --git a/app/code/Magento/Sales/Model/Order.php b/app/code/Magento/Sales/Model/Order.php index 722ba4ef243884582e7ffb3f03e2f4d57cbb4e6e..e53438bd6844b88d4a9f91fefb81da78d5ae7f07 100644 --- a/app/code/Magento/Sales/Model/Order.php +++ b/app/code/Magento/Sales/Model/Order.php @@ -286,7 +286,7 @@ class Order extends AbstractModel implements EntityInterface, OrderInterface * @param \Magento\Sales\Model\ResourceModel\Order\Shipment\Track\CollectionFactory $trackCollectionFactory * @param PriceCurrencyInterface $priceCurrency * @param \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productListFactory - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -315,7 +315,7 @@ class Order extends AbstractModel implements EntityInterface, OrderInterface \Magento\Sales\Model\ResourceModel\Order\Shipment\Track\CollectionFactory $trackCollectionFactory, PriceCurrencyInterface $priceCurrency, \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productListFactory, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Sales/Model/Order/Address.php b/app/code/Magento/Sales/Model/Order/Address.php index 38cc0b52b97ca18aa266cc8cda718974bce2755f..fec38a4895fc8e9dfa99c6053e4a97ab865845c9 100644 --- a/app/code/Magento/Sales/Model/Order/Address.php +++ b/app/code/Magento/Sales/Model/Order/Address.php @@ -61,7 +61,7 @@ class Address extends AbstractModel implements OrderAddressInterface, AddressMod * @param \Magento\Framework\Api\AttributeValueFactory $customAttributeFactory * @param \Magento\Sales\Model\OrderFactory $orderFactory * @param \Magento\Directory\Model\RegionFactory $regionFactory - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -72,7 +72,7 @@ class Address extends AbstractModel implements OrderAddressInterface, AddressMod \Magento\Framework\Api\AttributeValueFactory $customAttributeFactory, \Magento\Sales\Model\OrderFactory $orderFactory, \Magento\Directory\Model\RegionFactory $regionFactory, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Sales/Model/Order/Creditmemo.php b/app/code/Magento/Sales/Model/Order/Creditmemo.php index 41db239b098f47f1de98cd53727ecba32b3c25c5..9eeb67ed2662762007af77bd1941eceb0060456d 100644 --- a/app/code/Magento/Sales/Model/Order/Creditmemo.php +++ b/app/code/Magento/Sales/Model/Order/Creditmemo.php @@ -128,7 +128,7 @@ class Creditmemo extends AbstractModel implements EntityInterface, CreditmemoInt * @param Creditmemo\CommentFactory $commentFactory * @param \Magento\Sales\Model\ResourceModel\Order\Creditmemo\Comment\CollectionFactory $commentCollectionFactory * @param PriceCurrencyInterface $priceCurrency - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -146,7 +146,7 @@ class Creditmemo extends AbstractModel implements EntityInterface, CreditmemoInt \Magento\Sales\Model\Order\Creditmemo\CommentFactory $commentFactory, \Magento\Sales\Model\ResourceModel\Order\Creditmemo\Comment\CollectionFactory $commentCollectionFactory, PriceCurrencyInterface $priceCurrency, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Sales/Model/Order/Creditmemo/Comment.php b/app/code/Magento/Sales/Model/Order/Creditmemo/Comment.php index 64305b8c2e13c91de946841adf4f85dd5abf3269..ce87a4282d2240dcfa73778644998ee0c91ccf19 100644 --- a/app/code/Magento/Sales/Model/Order/Creditmemo/Comment.php +++ b/app/code/Magento/Sales/Model/Order/Creditmemo/Comment.php @@ -33,7 +33,7 @@ class Comment extends AbstractModel implements CreditmemoCommentInterface * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory * @param AttributeValueFactory $customAttributeFactory * @param \Magento\Store\Model\StoreManagerInterface $storeManager - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -44,7 +44,7 @@ class Comment extends AbstractModel implements CreditmemoCommentInterface \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory, AttributeValueFactory $customAttributeFactory, \Magento\Store\Model\StoreManagerInterface $storeManager, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Sales/Model/Order/Creditmemo/Item.php b/app/code/Magento/Sales/Model/Order/Creditmemo/Item.php index ce444987f2b321374d318b455c4effa971dbb9ea..4de21f6036b32438b9e5198a5a34b139107aa35d 100644 --- a/app/code/Magento/Sales/Model/Order/Creditmemo/Item.php +++ b/app/code/Magento/Sales/Model/Order/Creditmemo/Item.php @@ -48,7 +48,7 @@ class Item extends AbstractModel implements CreditmemoItemInterface * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory * @param AttributeValueFactory $customAttributeFactory * @param \Magento\Sales\Model\Order\ItemFactory $orderItemFactory - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -58,7 +58,7 @@ class Item extends AbstractModel implements CreditmemoItemInterface \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory, AttributeValueFactory $customAttributeFactory, \Magento\Sales\Model\Order\ItemFactory $orderItemFactory, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Sales/Model/Order/Invoice.php b/app/code/Magento/Sales/Model/Order/Invoice.php index e58cab354f87e60843bfd3204ecb0d404ec3adf5..c0fd952426ad7ed456ac3298280b58ba22c141bd 100644 --- a/app/code/Magento/Sales/Model/Order/Invoice.php +++ b/app/code/Magento/Sales/Model/Order/Invoice.php @@ -128,7 +128,7 @@ class Invoice extends AbstractModel implements EntityInterface, InvoiceInterface * @param \Magento\Sales\Model\ResourceModel\Order\Invoice\Item\CollectionFactory $invoiceItemCollectionFactory * @param Invoice\CommentFactory $invoiceCommentFactory * @param \Magento\Sales\Model\ResourceModel\Order\Invoice\Comment\CollectionFactory $commentCollectionFactory - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -144,7 +144,7 @@ class Invoice extends AbstractModel implements EntityInterface, InvoiceInterface \Magento\Sales\Model\ResourceModel\Order\Invoice\Item\CollectionFactory $invoiceItemCollectionFactory, \Magento\Sales\Model\Order\Invoice\CommentFactory $invoiceCommentFactory, \Magento\Sales\Model\ResourceModel\Order\Invoice\Comment\CollectionFactory $commentCollectionFactory, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Sales/Model/Order/Invoice/Comment.php b/app/code/Magento/Sales/Model/Order/Invoice/Comment.php index 838af6acdb6eb9a6a32949e330a9bae06004fb94..cfe297d0ea640342e6450491d4678f7c75c19852 100644 --- a/app/code/Magento/Sales/Model/Order/Invoice/Comment.php +++ b/app/code/Magento/Sales/Model/Order/Invoice/Comment.php @@ -33,7 +33,7 @@ class Comment extends AbstractModel implements InvoiceCommentInterface * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory * @param AttributeValueFactory $customAttributeFactory * @param \Magento\Store\Model\StoreManagerInterface $storeManager - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -44,7 +44,7 @@ class Comment extends AbstractModel implements InvoiceCommentInterface \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory, AttributeValueFactory $customAttributeFactory, \Magento\Store\Model\StoreManagerInterface $storeManager, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Sales/Model/Order/Invoice/Item.php b/app/code/Magento/Sales/Model/Order/Invoice/Item.php index 2eba2216571c9d6633ce7e0fb8a2dcb52145e846..d6889b1334a84ef72bc835ab1e61ca37bb48cefa 100644 --- a/app/code/Magento/Sales/Model/Order/Invoice/Item.php +++ b/app/code/Magento/Sales/Model/Order/Invoice/Item.php @@ -60,7 +60,7 @@ class Item extends AbstractModel implements InvoiceItemInterface * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory * @param AttributeValueFactory $customAttributeFactory * @param \Magento\Sales\Model\Order\ItemFactory $orderItemFactory - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -70,7 +70,7 @@ class Item extends AbstractModel implements InvoiceItemInterface \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory, AttributeValueFactory $customAttributeFactory, \Magento\Sales\Model\Order\ItemFactory $orderItemFactory, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Sales/Model/Order/Item.php b/app/code/Magento/Sales/Model/Order/Item.php index 7885cc2dbd07815ca146f8230f736b83bd6aa7e2..e1675782ea40f36878ac1ba81235e7956a655d5e 100644 --- a/app/code/Magento/Sales/Model/Order/Item.php +++ b/app/code/Magento/Sales/Model/Order/Item.php @@ -105,7 +105,7 @@ class Item extends AbstractModel implements OrderItemInterface * @param \Magento\Sales\Model\OrderFactory $orderFactory * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param \Magento\Catalog\Api\ProductRepositoryInterface $productRepository - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -118,7 +118,7 @@ class Item extends AbstractModel implements OrderItemInterface \Magento\Sales\Model\OrderFactory $orderFactory, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Catalog\Api\ProductRepositoryInterface $productRepository, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Sales/Model/Order/Payment.php b/app/code/Magento/Sales/Model/Order/Payment.php index d3dc65c432e488e1d71707c8eb4874907a54b97c..690bde68d5c575ece27f56d68165d1ccf31bc7d5 100644 --- a/app/code/Magento/Sales/Model/Order/Payment.php +++ b/app/code/Magento/Sales/Model/Order/Payment.php @@ -117,7 +117,7 @@ class Payment extends Info implements OrderPaymentInterface * @param Transaction\BuilderInterface $transactionBuilder * @param Payment\Processor $paymentProcessor * @param OrderRepositoryInterface $orderRepository - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -136,7 +136,7 @@ class Payment extends Info implements OrderPaymentInterface \Magento\Sales\Model\Order\Payment\Transaction\BuilderInterface $transactionBuilder, \Magento\Sales\Model\Order\Payment\Processor $paymentProcessor, OrderRepositoryInterface $orderRepository, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Sales/Model/Order/Payment/Info.php b/app/code/Magento/Sales/Model/Order/Payment/Info.php index 3a0d865b0ef2b9313759de54cdaad7102a85b05e..0abf5b513b82f226fe8582730e9385e0aff9d1fa 100644 --- a/app/code/Magento/Sales/Model/Order/Payment/Info.php +++ b/app/code/Magento/Sales/Model/Order/Payment/Info.php @@ -42,7 +42,7 @@ class Info extends AbstractModel implements InfoInterface * @param \Magento\Framework\Api\AttributeValueFactory $customAttributeFactory, * @param \Magento\Payment\Helper\Data $paymentData * @param \Magento\Framework\Encryption\EncryptorInterface $encryptor - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -53,7 +53,7 @@ class Info extends AbstractModel implements InfoInterface \Magento\Framework\Api\AttributeValueFactory $customAttributeFactory, \Magento\Payment\Helper\Data $paymentData, \Magento\Framework\Encryption\EncryptorInterface $encryptor, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Sales/Model/Order/Payment/Transaction.php b/app/code/Magento/Sales/Model/Order/Payment/Transaction.php index a21db54bbae596977d579d9d6c4695fd0b7d47c8..91269d66fbd985d7c454e4d3678277c970c2385a 100644 --- a/app/code/Magento/Sales/Model/Order/Payment/Transaction.php +++ b/app/code/Magento/Sales/Model/Order/Payment/Transaction.php @@ -155,7 +155,7 @@ class Transaction extends AbstractModel implements TransactionInterface * @param \Magento\Sales\Model\OrderFactory $orderFactory * @param \Magento\Framework\Stdlib\DateTime\DateTimeFactory $dateFactory * @param TransactionFactory $transactionFactory - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -170,7 +170,7 @@ class Transaction extends AbstractModel implements TransactionInterface \Magento\Sales\Api\OrderRepositoryInterface $orderRepository, \Magento\Framework\Stdlib\DateTime\DateTimeFactory $dateFactory, TransactionFactory $transactionFactory, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Sales/Model/Order/Pdf/Items/AbstractItems.php b/app/code/Magento/Sales/Model/Order/Pdf/Items/AbstractItems.php index 8a43ced41e02154042ca4f4c42bcf675c2ef67f3..94160249deb1806a5f05ccd726ccceb4cfd79247 100644 --- a/app/code/Magento/Sales/Model/Order/Pdf/Items/AbstractItems.php +++ b/app/code/Magento/Sales/Model/Order/Pdf/Items/AbstractItems.php @@ -71,7 +71,7 @@ abstract class AbstractItems extends \Magento\Framework\Model\AbstractModel * @param \Magento\Tax\Helper\Data $taxData * @param \Magento\Framework\Filesystem $filesystem , * @param \Magento\Framework\Filter\FilterManager $filterManager - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -81,7 +81,7 @@ abstract class AbstractItems extends \Magento\Framework\Model\AbstractModel \Magento\Tax\Helper\Data $taxData, \Magento\Framework\Filesystem $filesystem, \Magento\Framework\Filter\FilterManager $filterManager, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Sales/Model/Order/Pdf/Items/Creditmemo/DefaultCreditmemo.php b/app/code/Magento/Sales/Model/Order/Pdf/Items/Creditmemo/DefaultCreditmemo.php index 3c585c69495640f4d035c980aaf3c9305b15a5d9..de420f1312b5b9a6faf4491f288c51ee3d91abaa 100644 --- a/app/code/Magento/Sales/Model/Order/Pdf/Items/Creditmemo/DefaultCreditmemo.php +++ b/app/code/Magento/Sales/Model/Order/Pdf/Items/Creditmemo/DefaultCreditmemo.php @@ -24,7 +24,7 @@ class DefaultCreditmemo extends \Magento\Sales\Model\Order\Pdf\Items\AbstractIte * @param \Magento\Framework\Filesystem $filesystem * @param \Magento\Framework\Filter\FilterManager $filterManager * @param \Magento\Framework\Stdlib\StringUtils $string - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -35,7 +35,7 @@ class DefaultCreditmemo extends \Magento\Sales\Model\Order\Pdf\Items\AbstractIte \Magento\Framework\Filesystem $filesystem, \Magento\Framework\Filter\FilterManager $filterManager, \Magento\Framework\Stdlib\StringUtils $string, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Sales/Model/Order/Pdf/Items/Invoice/DefaultInvoice.php b/app/code/Magento/Sales/Model/Order/Pdf/Items/Invoice/DefaultInvoice.php index fe425caf0f7d00847ba8befc1c281dc1b658e5bb..5f8b56f9912518881f84e73f0daf576e0f7cec9b 100644 --- a/app/code/Magento/Sales/Model/Order/Pdf/Items/Invoice/DefaultInvoice.php +++ b/app/code/Magento/Sales/Model/Order/Pdf/Items/Invoice/DefaultInvoice.php @@ -24,7 +24,7 @@ class DefaultInvoice extends \Magento\Sales\Model\Order\Pdf\Items\AbstractItems * @param \Magento\Framework\Filesystem $filesystem * @param \Magento\Framework\Filter\FilterManager $filterManager * @param \Magento\Framework\Stdlib\StringUtils $string - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -35,7 +35,7 @@ class DefaultInvoice extends \Magento\Sales\Model\Order\Pdf\Items\AbstractItems \Magento\Framework\Filesystem $filesystem, \Magento\Framework\Filter\FilterManager $filterManager, \Magento\Framework\Stdlib\StringUtils $string, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Sales/Model/Order/Pdf/Items/Shipment/DefaultShipment.php b/app/code/Magento/Sales/Model/Order/Pdf/Items/Shipment/DefaultShipment.php index f08402006d52d47539cc9810d2801391bd8240d4..0850ca5944a6ac872ea36cbd423bdfd1475d607e 100644 --- a/app/code/Magento/Sales/Model/Order/Pdf/Items/Shipment/DefaultShipment.php +++ b/app/code/Magento/Sales/Model/Order/Pdf/Items/Shipment/DefaultShipment.php @@ -24,7 +24,7 @@ class DefaultShipment extends \Magento\Sales\Model\Order\Pdf\Items\AbstractItems * @param \Magento\Framework\Filesystem $filesystem * @param \Magento\Framework\Filter\FilterManager $filterManager * @param \Magento\Framework\Stdlib\StringUtils $string - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -35,7 +35,7 @@ class DefaultShipment extends \Magento\Sales\Model\Order\Pdf\Items\AbstractItems \Magento\Framework\Filesystem $filesystem, \Magento\Framework\Filter\FilterManager $filterManager, \Magento\Framework\Stdlib\StringUtils $string, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Sales/Model/Order/Shipment.php b/app/code/Magento/Sales/Model/Order/Shipment.php index 5b50f6dc374e4e1251117565d3d3577213a6369c..f99977fdcbfc9b1c72bbd3009f1c88ab1d47f188 100644 --- a/app/code/Magento/Sales/Model/Order/Shipment.php +++ b/app/code/Magento/Sales/Model/Order/Shipment.php @@ -103,7 +103,7 @@ class Shipment extends AbstractModel implements EntityInterface, ShipmentInterfa * @param Shipment\CommentFactory $commentFactory * @param \Magento\Sales\Model\ResourceModel\Order\Shipment\Comment\CollectionFactory $commentCollectionFactory * @param \Magento\Sales\Api\OrderRepositoryInterface $orderRepository - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -118,7 +118,7 @@ class Shipment extends AbstractModel implements EntityInterface, ShipmentInterfa \Magento\Sales\Model\Order\Shipment\CommentFactory $commentFactory, \Magento\Sales\Model\ResourceModel\Order\Shipment\Comment\CollectionFactory $commentCollectionFactory, \Magento\Sales\Api\OrderRepositoryInterface $orderRepository, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Sales/Model/Order/Shipment/Comment.php b/app/code/Magento/Sales/Model/Order/Shipment/Comment.php index f3cffbec4cf149e447765e6793bb78c8baeaab44..f2506ade73b6bd96e180c81ce5274af3a5a96447 100644 --- a/app/code/Magento/Sales/Model/Order/Shipment/Comment.php +++ b/app/code/Magento/Sales/Model/Order/Shipment/Comment.php @@ -33,7 +33,7 @@ class Comment extends AbstractModel implements ShipmentCommentInterface * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory * @param AttributeValueFactory $customAttributeFactory * @param \Magento\Store\Model\StoreManagerInterface $storeManager - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -44,7 +44,7 @@ class Comment extends AbstractModel implements ShipmentCommentInterface \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory, AttributeValueFactory $customAttributeFactory, \Magento\Store\Model\StoreManagerInterface $storeManager, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Sales/Model/Order/Shipment/Item.php b/app/code/Magento/Sales/Model/Order/Shipment/Item.php index dcd29fd957772ad54e0c8e1251ef7cbcfcf92ded..8da7b10f87bf2e457e3236691528babfd843ba86 100644 --- a/app/code/Magento/Sales/Model/Order/Shipment/Item.php +++ b/app/code/Magento/Sales/Model/Order/Shipment/Item.php @@ -50,7 +50,7 @@ class Item extends AbstractModel implements ShipmentItemInterface * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory * @param AttributeValueFactory $customAttributeFactory * @param \Magento\Sales\Model\Order\ItemFactory $orderItemFactory - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -60,7 +60,7 @@ class Item extends AbstractModel implements ShipmentItemInterface \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory, AttributeValueFactory $customAttributeFactory, \Magento\Sales\Model\Order\ItemFactory $orderItemFactory, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Sales/Model/Order/Shipment/Track.php b/app/code/Magento/Sales/Model/Order/Shipment/Track.php index 9e31bdd092a673f2fe0a4564ac4e20409a455ddd..52b48663a797c01719f2107f4c36551c9f207175 100644 --- a/app/code/Magento/Sales/Model/Order/Shipment/Track.php +++ b/app/code/Magento/Sales/Model/Order/Shipment/Track.php @@ -55,7 +55,7 @@ class Track extends AbstractModel implements ShipmentTrackInterface * @param AttributeValueFactory $customAttributeFactory * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param \Magento\Sales\Model\Order\ShipmentRepository $shipmentRepository - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -67,7 +67,7 @@ class Track extends AbstractModel implements ShipmentTrackInterface AttributeValueFactory $customAttributeFactory, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Sales\Model\Order\ShipmentRepository $shipmentRepository, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Sales/Model/Order/Status.php b/app/code/Magento/Sales/Model/Order/Status.php index ea71fdf575cb82ea4de54565f58c6d42542f46a2..115ed4183c98516dc2547a843e5f3ed97c5d899b 100644 --- a/app/code/Magento/Sales/Model/Order/Status.php +++ b/app/code/Magento/Sales/Model/Order/Status.php @@ -26,7 +26,7 @@ class Status extends \Magento\Sales\Model\AbstractModel * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory * @param \Magento\Framework\Api\AttributeValueFactory $customAttributeFactory * @param \Magento\Store\Model\StoreManagerInterface $storeManager - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -36,7 +36,7 @@ class Status extends \Magento\Sales\Model\AbstractModel \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory, \Magento\Framework\Api\AttributeValueFactory $customAttributeFactory, \Magento\Store\Model\StoreManagerInterface $storeManager, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Sales/Model/Order/Status/History.php b/app/code/Magento/Sales/Model/Order/Status/History.php index 2505ad1a7eb050d4664a199254526c638b726027..b488580a2991da49eb3c799b68ebbc5852a9ff78 100644 --- a/app/code/Magento/Sales/Model/Order/Status/History.php +++ b/app/code/Magento/Sales/Model/Order/Status/History.php @@ -48,7 +48,7 @@ class History extends AbstractModel implements OrderStatusHistoryInterface * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory * @param AttributeValueFactory $customAttributeFactory * @param \Magento\Store\Model\StoreManagerInterface $storeManager - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -59,7 +59,7 @@ class History extends AbstractModel implements OrderStatusHistoryInterface \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory, AttributeValueFactory $customAttributeFactory, \Magento\Store\Model\StoreManagerInterface $storeManager, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Sales/Model/ResourceModel/AbstractGrid.php b/app/code/Magento/Sales/Model/ResourceModel/AbstractGrid.php index 0941d2d8da125a2cc6050486410516e34443e23e..71cb4575a94fdfa8fc2e8ed88ab6aa338200bb58 100644 --- a/app/code/Magento/Sales/Model/ResourceModel/AbstractGrid.php +++ b/app/code/Magento/Sales/Model/ResourceModel/AbstractGrid.php @@ -7,7 +7,7 @@ namespace Magento\Sales\Model\ResourceModel; use Magento\Framework\App\ResourceConnection as AppResource; use Magento\Framework\DB\Adapter\AdapterInterface; -use Magento\Framework\Model\ModelResource\Db\AbstractDb; +use Magento\Framework\Model\ResourceModel\Db\AbstractDb; /** * Class AbstractGrid diff --git a/app/code/Magento/Sales/Model/ResourceModel/Collection/AbstractCollection.php b/app/code/Magento/Sales/Model/ResourceModel/Collection/AbstractCollection.php index 841b0646b496aa266370cc16f3ddaa6b434a55f1..88ea6d9964cd953eac7dd0accab8714b9c5e6bbc 100644 --- a/app/code/Magento/Sales/Model/ResourceModel/Collection/AbstractCollection.php +++ b/app/code/Magento/Sales/Model/ResourceModel/Collection/AbstractCollection.php @@ -9,7 +9,7 @@ namespace Magento\Sales\Model\ResourceModel\Collection; * Flat sales abstract collection * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ -abstract class AbstractCollection extends \Magento\Framework\Model\ModelResource\Db\VersionControl\Collection +abstract class AbstractCollection extends \Magento\Framework\Model\ResourceModel\Db\VersionControl\Collection { /** * @var \Magento\Framework\DB\Select diff --git a/app/code/Magento/Sales/Model/ResourceModel/EntityAbstract.php b/app/code/Magento/Sales/Model/ResourceModel/EntityAbstract.php index c95c5c79d1596d2890848c1e9c6e8c2b44b5403c..ef4b103821d06366f4ec293466c5eb5d076975c5 100644 --- a/app/code/Magento/Sales/Model/ResourceModel/EntityAbstract.php +++ b/app/code/Magento/Sales/Model/ResourceModel/EntityAbstract.php @@ -5,9 +5,9 @@ */ namespace Magento\Sales\Model\ResourceModel; -use Magento\Framework\Model\ModelResource\Db\VersionControl\AbstractDb; -use Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite; -use Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot; +use Magento\Framework\Model\ResourceModel\Db\VersionControl\AbstractDb; +use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite; +use Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot; use Magento\SalesSequence\Model\Manager; use Magento\Sales\Model\EntityInterface; @@ -55,7 +55,7 @@ abstract class EntityAbstract extends AbstractDb protected $sequenceManager; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param Snapshot $entitySnapshot * @param RelationComposite $entityRelationComposite * @param Attribute $attribute @@ -63,7 +63,7 @@ abstract class EntityAbstract extends AbstractDb * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, Snapshot $entitySnapshot, RelationComposite $entityRelationComposite, \Magento\Sales\Model\ResourceModel\Attribute $attribute, diff --git a/app/code/Magento/Sales/Model/ResourceModel/Grid.php b/app/code/Magento/Sales/Model/ResourceModel/Grid.php index 2c32c0b618ace6273adbc59f91885cee77858687..b30166aeb3adbb4a5b8c335bfecfd0ba5a303ffe 100644 --- a/app/code/Magento/Sales/Model/ResourceModel/Grid.php +++ b/app/code/Magento/Sales/Model/ResourceModel/Grid.php @@ -7,7 +7,7 @@ namespace Magento\Sales\Model\ResourceModel; use Magento\Framework\DB\Adapter\AdapterInterface; use Magento\Sales\Model\ResourceModel\AbstractGrid; -use Magento\Framework\Model\ModelResource\Db\Context; +use Magento\Framework\Model\ResourceModel\Db\Context; /** * Class Grid diff --git a/app/code/Magento/Sales/Model/ResourceModel/Grid/Collection.php b/app/code/Magento/Sales/Model/ResourceModel/Grid/Collection.php index 64faa55649a41818cd61e404fbd7d283359cff47..077c6e35b02161ff99c3b59c92ff51582d750d0f 100644 --- a/app/code/Magento/Sales/Model/ResourceModel/Grid/Collection.php +++ b/app/code/Magento/Sales/Model/ResourceModel/Grid/Collection.php @@ -7,7 +7,7 @@ namespace Magento\Sales\Model\ResourceModel\Grid; use Magento\Framework\Api\Search\SearchResultInterface; use Magento\Framework\Search\AggregationInterface; -use Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection; +use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection; /** * Class Collection @@ -27,12 +27,12 @@ class Collection extends AbstractCollection implements SearchResultInterface * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Framework\Event\ManagerInterface $eventManager * @param null|\Zend_Db_Adapter_Abstract $mainTable - * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $eventPrefix + * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $eventPrefix * @param string $eventObject * @param string $resourceModel * @param string $model * @param string|null $connection - * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource + * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource * * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ @@ -47,7 +47,7 @@ class Collection extends AbstractCollection implements SearchResultInterface $resourceModel, $model = 'Magento\Sales\Model\ResourceModel\Grid\Document', $connection = null, - \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null + \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null ) { $this->_eventPrefix = $eventPrefix; $this->_eventObject = $eventObject; diff --git a/app/code/Magento/Sales/Model/ResourceModel/Metadata.php b/app/code/Magento/Sales/Model/ResourceModel/Metadata.php index d011d093cc349213d6f5539662348b74e61d144c..ec35e262e692cc1110d9a9f0ddf7dc7197e1e183 100644 --- a/app/code/Magento/Sales/Model/ResourceModel/Metadata.php +++ b/app/code/Magento/Sales/Model/ResourceModel/Metadata.php @@ -41,7 +41,7 @@ class Metadata } /** - * @return \Magento\Framework\Model\ModelResource\Db\AbstractDb + * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb */ public function getMapper() { diff --git a/app/code/Magento/Sales/Model/ResourceModel/Order.php b/app/code/Magento/Sales/Model/ResourceModel/Order.php index bd89884c6df5d9a8fd0a9cd7db862c5e0089e0ca..d6e5a032302632b5db90fb1e476e6399434ed7bd 100644 --- a/app/code/Magento/Sales/Model/ResourceModel/Order.php +++ b/app/code/Magento/Sales/Model/ResourceModel/Order.php @@ -11,8 +11,8 @@ use Magento\SalesSequence\Model\Manager; use Magento\Sales\Model\ResourceModel\EntityAbstract as SalesResource; use Magento\Sales\Model\ResourceModel\Order\Handler\State as StateHandler; use Magento\Sales\Model\Spi\OrderResourceInterface; -use Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot; -use Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite; +use Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot; +use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite; /** * Flat sales order resource @@ -52,7 +52,7 @@ class Order extends SalesResource implements OrderResourceInterface } /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param Attribute $attribute * @param Manager $sequenceManager * @param Snapshot $entitySnapshot @@ -61,7 +61,7 @@ class Order extends SalesResource implements OrderResourceInterface * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, Snapshot $entitySnapshot, RelationComposite $entityRelationComposite, Attribute $attribute, diff --git a/app/code/Magento/Sales/Model/ResourceModel/Order/Address.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Address.php index 71e5b50e5b947cd94187dc60aa0349eb3fde4a5d..6df065f7ee30372b130c002875fb0518d266a8ca 100644 --- a/app/code/Magento/Sales/Model/ResourceModel/Order/Address.php +++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Address.php @@ -7,7 +7,7 @@ namespace Magento\Sales\Model\ResourceModel\Order; use Magento\Sales\Model\ResourceModel\EntityAbstract as SalesResource; use Magento\Sales\Model\Spi\OrderAddressResourceInterface; -use Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot; +use Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot; /** * Flat sales order address resource @@ -32,19 +32,19 @@ class Address extends SalesResource implements OrderAddressResourceInterface protected $gridPool; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Sales\Model\ResourceModel\Attribute $attribute * @param \Magento\SalesSequence\Model\Manager $sequenceManager * @param Snapshot $entitySnapshot - * @param \Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite $entityRelationComposite + * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite * @param \Magento\Sales\Model\Order\Address\Validator $validator * @param \Magento\Sales\Model\ResourceModel\GridPool $gridPool * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, Snapshot $entitySnapshot, - \Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite $entityRelationComposite, + \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite, \Magento\Sales\Model\ResourceModel\Attribute $attribute, \Magento\SalesSequence\Model\Manager $sequenceManager, \Magento\Sales\Model\Order\Address\Validator $validator, @@ -127,7 +127,7 @@ class Address extends SalesResource implements OrderAddressResourceInterface * Update related grid table after object save * * @param \Magento\Framework\Model\AbstractModel|\Magento\Framework\DataObject $object - * @return \Magento\Framework\Model\ModelResource\Db\AbstractDb + * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb */ protected function _afterSave(\Magento\Framework\Model\AbstractModel $object) { diff --git a/app/code/Magento/Sales/Model/ResourceModel/Order/Collection.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Collection.php index 09b603ab454b4823514952b83174cdbd8639bf52..f41f0821d228dd44456ba8935a786d5ee4187584 100644 --- a/app/code/Magento/Sales/Model/ResourceModel/Order/Collection.php +++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Collection.php @@ -44,20 +44,20 @@ class Collection extends AbstractCollection implements OrderSearchResultInterfac * @param \Psr\Log\LoggerInterface $logger * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Framework\Event\ManagerInterface $eventManager - * @param \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot + * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot * @param \Magento\Framework\DB\Helper $coreResourceHelper * @param string|null $connection - * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource + * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource */ public function __construct( \Magento\Framework\Data\Collection\EntityFactory $entityFactory, \Psr\Log\LoggerInterface $logger, \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Framework\Event\ManagerInterface $eventManager, - \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot, + \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot, \Magento\Framework\DB\Helper $coreResourceHelper, \Magento\Framework\DB\Adapter\AdapterInterface $connection = null, - \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null + \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null ) { parent::__construct( $entityFactory, diff --git a/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo.php index e9a1c1fa232b7c1caf6dc1a7e3516ab54523f105..1efd99d666b3397f55b8ec9f04b5e88865e4f855 100644 --- a/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo.php +++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo.php @@ -9,7 +9,7 @@ use Magento\Framework\App\ResourceConnection as AppResource; use Magento\SalesSequence\Model\Manager; use Magento\Sales\Model\ResourceModel\Attribute; use Magento\Sales\Model\ResourceModel\EntityAbstract as SalesResource; -use Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot; +use Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot; use Magento\Sales\Model\Spi\CreditmemoResourceInterface; /** diff --git a/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo/Comment.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo/Comment.php index 63541553797c0a85e59a98a7f348757c66ec07d9..0d8e9e04e79f90958a3f1028ca462dd0f83b0db7 100644 --- a/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo/Comment.php +++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo/Comment.php @@ -6,7 +6,7 @@ namespace Magento\Sales\Model\ResourceModel\Order\Creditmemo; use Magento\Sales\Model\ResourceModel\EntityAbstract; -use Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot; +use Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot; use Magento\Sales\Model\Spi\CreditmemoCommentResourceInterface; /** @@ -31,18 +31,18 @@ class Comment extends EntityAbstract implements CreditmemoCommentResourceInterfa protected $validator; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Sales\Model\ResourceModel\Attribute $attribute * @param \Magento\SalesSequence\Model\Manager $sequenceManager * @param Snapshot $entitySnapshot - * @param \Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite $entityRelationComposite + * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite * @param \Magento\Sales\Model\Order\Creditmemo\Comment\Validator $validator * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, Snapshot $entitySnapshot, - \Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite $entityRelationComposite, + \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite, \Magento\Sales\Model\ResourceModel\Attribute $attribute, \Magento\SalesSequence\Model\Manager $sequenceManager, \Magento\Sales\Model\Order\Creditmemo\Comment\Validator $validator, diff --git a/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo/Relation.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo/Relation.php index 00f4110dc8347f2e94965b5bfd396e22dc43aaa1..e4233c776e1e1fd6aada55b3c8905de3455f5de3 100644 --- a/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo/Relation.php +++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo/Relation.php @@ -6,7 +6,7 @@ namespace Magento\Sales\Model\ResourceModel\Order\Creditmemo; -use Magento\Framework\Model\ModelResource\Db\VersionControl\RelationInterface; +use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationInterface; /** * Class Relation diff --git a/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo/Relation/Refund.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo/Relation/Refund.php index 6698e9d14bbd7ecbaf40c1c91075345bc5c05898..ce9914878cdf0f53f94808a60b74bc931e841537 100644 --- a/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo/Relation/Refund.php +++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo/Relation/Refund.php @@ -6,7 +6,7 @@ namespace Magento\Sales\Model\ResourceModel\Order\Creditmemo\Relation; -use Magento\Framework\Model\ModelResource\Db\VersionControl\RelationInterface; +use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationInterface; /** * Class Relation diff --git a/app/code/Magento/Sales/Model/ResourceModel/Order/Invoice.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Invoice.php index 15c68e99ac22288b295093b216039057819fd614..a56998201292c7d200a4baf6afaf2dd0460be0c7 100644 --- a/app/code/Magento/Sales/Model/ResourceModel/Order/Invoice.php +++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Invoice.php @@ -9,7 +9,7 @@ use Magento\Framework\App\ResourceConnection; use Magento\SalesSequence\Model\Manager; use Magento\Sales\Model\ResourceModel\Attribute; use Magento\Sales\Model\ResourceModel\EntityAbstract as SalesResource; -use Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot; +use Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot; use Magento\Sales\Model\Spi\InvoiceResourceInterface; /** diff --git a/app/code/Magento/Sales/Model/ResourceModel/Order/Invoice/Comment.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Invoice/Comment.php index 91c337f20d97a95f1f83b06132bc3c4a8465db33..cea28e92a6ed1757578b3066218e8c845f58a3f6 100644 --- a/app/code/Magento/Sales/Model/ResourceModel/Order/Invoice/Comment.php +++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Invoice/Comment.php @@ -6,7 +6,7 @@ namespace Magento\Sales\Model\ResourceModel\Order\Invoice; use Magento\Sales\Model\ResourceModel\EntityAbstract; -use Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot; +use Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot; use Magento\Sales\Model\Spi\InvoiceCommentResourceInterface; /** @@ -31,18 +31,18 @@ class Comment extends EntityAbstract implements InvoiceCommentResourceInterface protected $validator; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Sales\Model\ResourceModel\Attribute $attribute * @param \Magento\SalesSequence\Model\Manager $sequenceManager * @param Snapshot $entitySnapshot - * @param \Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite $entityRelationComposite + * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite * @param \Magento\Sales\Model\Order\Invoice\Comment\Validator $validator * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, Snapshot $entitySnapshot, - \Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite $entityRelationComposite, + \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite, \Magento\Sales\Model\ResourceModel\Attribute $attribute, \Magento\SalesSequence\Model\Manager $sequenceManager, \Magento\Sales\Model\Order\Invoice\Comment\Validator $validator, diff --git a/app/code/Magento/Sales/Model/ResourceModel/Order/Invoice/Relation.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Invoice/Relation.php index 6e9ff0ea95651e469d307197fecf0f06567c950a..f46527a29a0a4c159405619852bff6dd8e647c3e 100644 --- a/app/code/Magento/Sales/Model/ResourceModel/Order/Invoice/Relation.php +++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Invoice/Relation.php @@ -6,7 +6,7 @@ namespace Magento\Sales\Model\ResourceModel\Order\Invoice; -use Magento\Framework\Model\ModelResource\Db\VersionControl\RelationInterface; +use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationInterface; use Magento\Sales\Model\ResourceModel\Order\Invoice\Item as InvoiceItemResource; use Magento\Sales\Model\ResourceModel\Order\Invoice\Comment as InvoiceCommentResource; diff --git a/app/code/Magento/Sales/Model/ResourceModel/Order/Payment/Collection.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Payment/Collection.php index 6656dfb1c9eb6a295041bcb374efb7c06b6cd56d..7f7617544678691a3403289f2b6fa590f8badd4d 100644 --- a/app/code/Magento/Sales/Model/ResourceModel/Order/Payment/Collection.php +++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Payment/Collection.php @@ -32,18 +32,18 @@ class Collection extends AbstractCollection implements OrderPaymentSearchResultI * @param \Psr\Log\LoggerInterface $logger * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Framework\Event\ManagerInterface $eventManager - * @param \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot + * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot * @param null $connection - * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource + * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource */ public function __construct( \Magento\Framework\Data\Collection\EntityFactory $entityFactory, \Psr\Log\LoggerInterface $logger, \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Framework\Event\ManagerInterface $eventManager, - \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot, + \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot, \Magento\Framework\DB\Adapter\AdapterInterface $connection = null, - \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null + \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null ) { parent::__construct( $entityFactory, diff --git a/app/code/Magento/Sales/Model/ResourceModel/Order/Relation.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Relation.php index 3b16bf11eae3a5478923ffcfbbb3fd65de444852..da599b38eb2d05043c3297de2d860d7338102446 100644 --- a/app/code/Magento/Sales/Model/ResourceModel/Order/Relation.php +++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Relation.php @@ -7,7 +7,7 @@ namespace Magento\Sales\Model\ResourceModel\Order; use Magento\Sales\Model\ResourceModel\Order\Handler\Address as AddressHandler; -use Magento\Framework\Model\ModelResource\Db\VersionControl\RelationInterface; +use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationInterface; use Magento\Sales\Model\ResourceModel\Order\Payment as OrderPaymentResource; use Magento\Sales\Model\ResourceModel\Order\Status\History as OrderStatusHistoryResource; use Magento\Sales\Api\OrderItemRepositoryInterface; diff --git a/app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Comment.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Comment.php index 96daa356e9447413a35483e1f0bf3465914bd92c..174d0c1e622df487a901969b50500f7cd4e15709 100644 --- a/app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Comment.php +++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Comment.php @@ -6,7 +6,7 @@ namespace Magento\Sales\Model\ResourceModel\Order\Shipment; use Magento\Sales\Model\ResourceModel\EntityAbstract; -use Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot; +use Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot; use Magento\Sales\Model\Spi\ShipmentCommentResourceInterface; /** @@ -31,18 +31,18 @@ class Comment extends EntityAbstract implements ShipmentCommentResourceInterface protected $validator; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Sales\Model\ResourceModel\Attribute $attribute * @param \Magento\SalesSequence\Model\Manager $sequenceManager * @param Snapshot $entitySnapshot - * @param \Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite $entityRelationComposite + * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite * @param \Magento\Sales\Model\Order\Shipment\Comment\Validator $validator * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, Snapshot $entitySnapshot, - \Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite $entityRelationComposite, + \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite, \Magento\Sales\Model\ResourceModel\Attribute $attribute, \Magento\SalesSequence\Model\Manager $sequenceManager, \Magento\Sales\Model\Order\Shipment\Comment\Validator $validator, diff --git a/app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Relation.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Relation.php index 8ff9a995e744919e0311e51e4cc0cdcf5257f052..943255b55d23ca9ac60652b3d81ea0c0d98ac914 100644 --- a/app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Relation.php +++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Relation.php @@ -6,7 +6,7 @@ namespace Magento\Sales\Model\ResourceModel\Order\Shipment; -use Magento\Framework\Model\ModelResource\Db\VersionControl\RelationInterface; +use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationInterface; use Magento\Sales\Model\ResourceModel\Order\Shipment\Item as ShipmentItemResource; use Magento\Sales\Model\ResourceModel\Order\Shipment\Comment as ShipmentCommentResource; use Magento\Sales\Model\ResourceModel\Order\Shipment\Track as ShipmentTrackResource; diff --git a/app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Track.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Track.php index e5fcc7a27e372b76df98b602d39f7cc4ac2c1f71..ad1ad038a02fb4ee072ac6ec8433713ca3f4bedb 100644 --- a/app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Track.php +++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Track.php @@ -6,7 +6,7 @@ namespace Magento\Sales\Model\ResourceModel\Order\Shipment; use Magento\Sales\Model\ResourceModel\EntityAbstract as SalesResource; -use Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot; +use Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot; use Magento\Sales\Model\Spi\ShipmentTrackResourceInterface; /** @@ -31,18 +31,18 @@ class Track extends SalesResource implements ShipmentTrackResourceInterface protected $validator; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Sales\Model\ResourceModel\Attribute $attribute * @param \Magento\SalesSequence\Model\Manager $sequenceManager * @param Snapshot $entitySnapshot - * @param \Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite $entityRelationComposite + * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite * @param \Magento\Sales\Model\Order\Shipment\Track\Validator $validator * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, Snapshot $entitySnapshot, - \Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite $entityRelationComposite, + \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite, \Magento\Sales\Model\ResourceModel\Attribute $attribute, \Magento\SalesSequence\Model\Manager $sequenceManager, \Magento\Sales\Model\Order\Shipment\Track\Validator $validator, diff --git a/app/code/Magento/Sales/Model/ResourceModel/Order/Status.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Status.php index 761468974774e82f0e1d530b1085f44370e3b6e6..e21f8de9ff9e06e7f64408256c919d04cfa1ac3a 100644 --- a/app/code/Magento/Sales/Model/ResourceModel/Order/Status.php +++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Status.php @@ -10,14 +10,14 @@ use Psr\Log\LoggerInterface as LogWriter; use Magento\Framework\Exception\LocalizedException; use Magento\SalesSequence\Model\Manager; use \Magento\Sales\Model\ResourceModel\EntityAbstract; -use \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot; +use \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot; /** * Order status resource model * * @author Magento Core Team <core@magentocommerce.com> */ -class Status extends \Magento\Framework\Model\ModelResource\Db\VersionControl\AbstractDb +class Status extends \Magento\Framework\Model\ResourceModel\Db\VersionControl\AbstractDb { /** * Status labels table diff --git a/app/code/Magento/Sales/Model/ResourceModel/Order/Status/History.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Status/History.php index d1611ad703c53c9f5e5c50d587bebf3fee6d66d8..1ce43da2b9902b9d255c255f5a901a199cd7702f 100644 --- a/app/code/Magento/Sales/Model/ResourceModel/Order/Status/History.php +++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Status/History.php @@ -7,7 +7,7 @@ namespace Magento\Sales\Model\ResourceModel\Order\Status; use Magento\Sales\Model\Order\Status\History\Validator; use Magento\Sales\Model\ResourceModel\EntityAbstract; -use Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot; +use Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot; use Magento\Sales\Model\Spi\OrderStatusHistoryResourceInterface; /** @@ -23,18 +23,18 @@ class History extends EntityAbstract implements OrderStatusHistoryResourceInterf protected $validator; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Sales\Model\ResourceModel\Attribute $attribute * @param \Magento\SalesSequence\Model\Manager $sequenceManager * @param Snapshot $entitySnapshot - * @param \Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite $entityRelationComposite + * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite * @param Validator $validator * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, Snapshot $entitySnapshot, - \Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite $entityRelationComposite, + \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite, \Magento\Sales\Model\ResourceModel\Attribute $attribute, \Magento\SalesSequence\Model\Manager $sequenceManager, Validator $validator, diff --git a/app/code/Magento/Sales/Model/ResourceModel/Order/Tax/Item.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Tax/Item.php index b47d75680dc0b45daa0d37370733658f759cbb49..16b3e4bb19ed63f1b0aadc38410ad487718afffc 100644 --- a/app/code/Magento/Sales/Model/ResourceModel/Order/Tax/Item.php +++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Tax/Item.php @@ -8,7 +8,7 @@ namespace Magento\Sales\Model\ResourceModel\Order\Tax; /** * Sales order tax resource model */ -class Item extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Item extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Resource initialization diff --git a/app/code/Magento/Sales/Model/ResourceModel/Report/Bestsellers.php b/app/code/Magento/Sales/Model/ResourceModel/Report/Bestsellers.php index fbe2f588bac739f2b3b28c986caf3b4724ed8638..231e0774687acb07331413e6030028c0d275ed4b 100644 --- a/app/code/Magento/Sales/Model/ResourceModel/Report/Bestsellers.php +++ b/app/code/Magento/Sales/Model/ResourceModel/Report/Bestsellers.php @@ -37,7 +37,7 @@ class Bestsellers extends AbstractReport ]; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Psr\Log\LoggerInterface $logger * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate * @param \Magento\Reports\Model\FlagFactory $reportsFlagFactory @@ -50,7 +50,7 @@ class Bestsellers extends AbstractReport * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Psr\Log\LoggerInterface $logger, \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate, \Magento\Reports\Model\FlagFactory $reportsFlagFactory, diff --git a/app/code/Magento/Sales/Model/ResourceModel/Report/Bestsellers/Collection.php b/app/code/Magento/Sales/Model/ResourceModel/Report/Bestsellers/Collection.php index 2032c277158a65d90e469e223115f732b98905c8..0a4fed17cfc69f5a897968e09329d3dbbf47f705 100644 --- a/app/code/Magento/Sales/Model/ResourceModel/Report/Bestsellers/Collection.php +++ b/app/code/Magento/Sales/Model/ResourceModel/Report/Bestsellers/Collection.php @@ -240,7 +240,7 @@ class Collection extends \Magento\Sales\Model\ResourceModel\Report\Collection\Ab * Redeclare parent method for applying filters after parent method * but before adding unions and calculating totals * - * @return $this|\Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection + * @return $this|\Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) * @SuppressWarnings(PHPMD.ExcessiveMethodLength) diff --git a/app/code/Magento/Sales/Model/ResourceModel/Report/Order.php b/app/code/Magento/Sales/Model/ResourceModel/Report/Order.php index 63c454ae1d8e5d10693c0f36c6368e6d6d4426c7..743b1e197853ac4a3194dd8f4a59cb1b5cfa775f 100644 --- a/app/code/Magento/Sales/Model/ResourceModel/Report/Order.php +++ b/app/code/Magento/Sales/Model/ResourceModel/Report/Order.php @@ -21,7 +21,7 @@ class Order extends AbstractReport protected $_updateDatFactory; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Psr\Log\LoggerInterface $logger * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate * @param \Magento\Reports\Model\FlagFactory $reportsFlagFactory @@ -32,7 +32,7 @@ class Order extends AbstractReport * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Psr\Log\LoggerInterface $logger, \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate, \Magento\Reports\Model\FlagFactory $reportsFlagFactory, diff --git a/app/code/Magento/Sales/Model/ResourceModel/Sale/Collection.php b/app/code/Magento/Sales/Model/ResourceModel/Sale/Collection.php index bdc0a0826fe4e4c1970b3451bf2d5b2a2b5f2e1c..37555ab7f2d3c4d3c8d61bfbf1a3fd751d5aaa4d 100644 --- a/app/code/Magento/Sales/Model/ResourceModel/Sale/Collection.php +++ b/app/code/Magento/Sales/Model/ResourceModel/Sale/Collection.php @@ -14,7 +14,7 @@ use Psr\Log\LoggerInterface as Logger; /** * Sales Collection */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Totals data diff --git a/app/code/Magento/Sales/Model/ResourceModel/Transaction/Grid/Collection.php b/app/code/Magento/Sales/Model/ResourceModel/Transaction/Grid/Collection.php index a92a0543067ce87a33a91277a8f6f42e54e41542..a9351c5f48037876de3a16df29e76ba36096fbae 100644 --- a/app/code/Magento/Sales/Model/ResourceModel/Transaction/Grid/Collection.php +++ b/app/code/Magento/Sales/Model/ResourceModel/Transaction/Grid/Collection.php @@ -23,20 +23,20 @@ class Collection extends \Magento\Sales\Model\ResourceModel\Order\Payment\Transa * @param \Psr\Log\LoggerInterface $logger * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Framework\Event\ManagerInterface $eventManager - * @param \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot + * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot * @param \Magento\Framework\Registry $registryManager * @param \Magento\Framework\DB\Adapter\AdapterInterface|null $connection - * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource + * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource */ public function __construct( \Magento\Framework\Data\Collection\EntityFactory $entityFactory, \Psr\Log\LoggerInterface $logger, \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Framework\Event\ManagerInterface $eventManager, - \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot $entitySnapshot, + \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot, \Magento\Framework\Registry $registryManager, \Magento\Framework\DB\Adapter\AdapterInterface $connection = null, - \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null + \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null ) { $this->registryManager = $registryManager; parent::__construct( diff --git a/app/code/Magento/Sales/Model/Observer/Backend/CatalogPriceRule.php b/app/code/Magento/Sales/Observer/Backend/CatalogPriceRule.php similarity index 64% rename from app/code/Magento/Sales/Model/Observer/Backend/CatalogPriceRule.php rename to app/code/Magento/Sales/Observer/Backend/CatalogPriceRule.php index 71197bc3ad0d59fabd9bdbfdd8364feda08bb375..1aa86160a514660e0bdf3e79b33e17806e542182 100644 --- a/app/code/Magento/Sales/Model/Observer/Backend/CatalogPriceRule.php +++ b/app/code/Magento/Sales/Observer/Backend/CatalogPriceRule.php @@ -3,9 +3,11 @@ * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ -namespace Magento\Sales\Model\Observer\Backend; +namespace Magento\Sales\Observer\Backend; -class CatalogPriceRule +use Magento\Framework\Event\ObserverInterface; + +class CatalogPriceRule implements ObserverInterface { /** * @var \Magento\Quote\Model\ResourceModel\Quote @@ -23,9 +25,11 @@ class CatalogPriceRule /** * When applying a catalog price rule, make related quotes recollect on demand * + * @param \Magento\Framework\Event\Observer $observer * @return void + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ - public function dispatch() + public function execute(\Magento\Framework\Event\Observer $observer) { $this->_quote->markQuotesRecollectOnCatalogRules(); } diff --git a/app/code/Magento/Sales/Model/Observer/Backend/CatalogProductQuote.php b/app/code/Magento/Sales/Observer/Backend/CatalogProductSaveAfterObserver.php similarity index 68% rename from app/code/Magento/Sales/Model/Observer/Backend/CatalogProductQuote.php rename to app/code/Magento/Sales/Observer/Backend/CatalogProductSaveAfterObserver.php index 1b8b1aaee06ff7cadb508684957eecc3b304f4b8..6cd722d7793fb1c3bd44abe4d8637a924ffdca56 100644 --- a/app/code/Magento/Sales/Model/Observer/Backend/CatalogProductQuote.php +++ b/app/code/Magento/Sales/Observer/Backend/CatalogProductSaveAfterObserver.php @@ -3,9 +3,11 @@ * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ -namespace Magento\Sales\Model\Observer\Backend; +namespace Magento\Sales\Observer\Backend; -class CatalogProductQuote +use Magento\Framework\Event\ObserverInterface; + +class CatalogProductSaveAfterObserver implements ObserverInterface { /** * @var \Magento\Quote\Model\ResourceModel\Quote @@ -40,21 +42,9 @@ class CatalogProductQuote * @param \Magento\Framework\Event\Observer $observer * @return void */ - public function catalogProductSaveAfter(\Magento\Framework\Event\Observer $observer) + public function execute(\Magento\Framework\Event\Observer $observer) { $product = $observer->getEvent()->getProduct(); $this->_recollectQuotes($product->getId(), $product->getStatus()); } - - /** - * When deleting product, subtract it from all quotes quantities - * - * @param \Magento\Framework\Event\Observer $observer - * @return void - */ - public function subtractQtyFromQuotes($observer) - { - $product = $observer->getEvent()->getProduct(); - $this->_quote->substractProductFromQuotes($product); - } } diff --git a/app/code/Magento/Sales/Observer/Backend/SubtractQtyFromQuotesObserver.php b/app/code/Magento/Sales/Observer/Backend/SubtractQtyFromQuotesObserver.php new file mode 100644 index 0000000000000000000000000000000000000000..e213c3083ee681cdd3b2a04bd14eab4e829dc800 --- /dev/null +++ b/app/code/Magento/Sales/Observer/Backend/SubtractQtyFromQuotesObserver.php @@ -0,0 +1,36 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Sales\Observer\Backend; + +use Magento\Framework\Event\ObserverInterface; + +class SubtractQtyFromQuotesObserver implements ObserverInterface +{ + /** + * @var \Magento\Quote\Model\ResourceModel\Quote + */ + protected $_quote; + + /** + * @param \Magento\Quote\Model\ResourceModel\Quote $quote + */ + public function __construct(\Magento\Quote\Model\ResourceModel\Quote $quote) + { + $this->_quote = $quote; + } + + /** + * When deleting product, subtract it from all quotes quantities + * + * @param \Magento\Framework\Event\Observer $observer + * @return void + */ + public function execute(\Magento\Framework\Event\Observer $observer) + { + $product = $observer->getEvent()->getProduct(); + $this->_quote->substractProductFromQuotes($product); + } +} diff --git a/app/code/Magento/Sales/Model/Observer/Frontend/Quote/AddVatRequestParamsOrderComment.php b/app/code/Magento/Sales/Observer/Frontend/AddVatRequestParamsOrderComment.php similarity index 66% rename from app/code/Magento/Sales/Model/Observer/Frontend/Quote/AddVatRequestParamsOrderComment.php rename to app/code/Magento/Sales/Observer/Frontend/AddVatRequestParamsOrderComment.php index 649c92c04a358562f3fadc3f31fb491475dab08d..f3547099289a9ad8cf7e890fbe6acf50096a018a 100644 --- a/app/code/Magento/Sales/Model/Observer/Frontend/Quote/AddVatRequestParamsOrderComment.php +++ b/app/code/Magento/Sales/Observer/Frontend/AddVatRequestParamsOrderComment.php @@ -3,14 +3,19 @@ * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ -namespace Magento\Sales\Model\Observer\Frontend\Quote; +namespace Magento\Sales\Observer\Frontend; use Magento\Customer\Helper\Address as CustomerAddress; +use Magento\Customer\Model\Address\AbstractAddress; +use Magento\Framework\Event\Observer; +use Magento\Framework\Event\ObserverInterface; +use Magento\Sales\Model\Order; +use Magento\Sales\Model\Order\Address; /** * Class AddVatRequestParamsOrderComment */ -class AddVatRequestParamsOrderComment +class AddVatRequestParamsOrderComment implements ObserverInterface { /** * Customer address @@ -30,16 +35,16 @@ class AddVatRequestParamsOrderComment /** * Add VAT validation request date and identifier to order comments * - * @param \Magento\Framework\Event\Observer $observer + * @param Observer $observer * @return void */ - public function execute(\Magento\Framework\Event\Observer $observer) + public function execute(Observer $observer) { - /** @var $orderInstance \Magento\Sales\Model\Order */ + /** @var $orderInstance Order */ $orderInstance = $observer->getOrder(); - /** @var $orderAddress \Magento\Sales\Model\Order\Address */ + /** @var $orderAddress Address */ $orderAddress = $this->_getVatRequiredSalesAddress($orderInstance); - if (!$orderAddress instanceof \Magento\Sales\Model\Order\Address) { + if (!$orderAddress instanceof Address) { return; } @@ -60,22 +65,17 @@ class AddVatRequestParamsOrderComment /** * Retrieve sales address (order or quote) on which tax calculation must be based * - * @param \Magento\Sales\Model\Order $order + * @param Order $order * @param \Magento\Store\Model\Store|string|int|null $store - * @return \Magento\Sales\Model\Order\Address|null + * @return Address|null */ protected function _getVatRequiredSalesAddress($order, $store = null) { $configAddressType = $this->customerAddressHelper->getTaxCalculationAddressType($store); - $requiredAddress = null; - switch ($configAddressType) { - case \Magento\Customer\Model\Address\AbstractAddress::TYPE_SHIPPING: - $requiredAddress = $order->getShippingAddress(); - break; - default: - $requiredAddress = $order->getBillingAddress(); - break; - } + $requiredAddress = $configAddressType === AbstractAddress::TYPE_SHIPPING + ? $order->getShippingAddress() + : $order->getBillingAddress(); + return $requiredAddress; } } diff --git a/app/code/Magento/Sales/Model/Observer/Frontend/Quote/RestoreCustomerGroupId.php b/app/code/Magento/Sales/Observer/Frontend/RestoreCustomerGroupId.php similarity index 69% rename from app/code/Magento/Sales/Model/Observer/Frontend/Quote/RestoreCustomerGroupId.php rename to app/code/Magento/Sales/Observer/Frontend/RestoreCustomerGroupId.php index 1384cfecce1e13aec6560a12ae10fe49dc0fba29..fd0600014eb1c1d0a0583b11c881d47f5265fc6c 100644 --- a/app/code/Magento/Sales/Model/Observer/Frontend/Quote/RestoreCustomerGroupId.php +++ b/app/code/Magento/Sales/Observer/Frontend/RestoreCustomerGroupId.php @@ -3,14 +3,19 @@ * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ -namespace Magento\Sales\Model\Observer\Frontend\Quote; +namespace Magento\Sales\Observer\Frontend; use Magento\Customer\Helper\Address as CustomerAddress; +use Magento\Customer\Model\Address\AbstractAddress; +use Magento\Framework\Event\Observer; +use Magento\Framework\Event\ObserverInterface; +use Magento\Quote\Api\Data\ShippingAssignmentInterface; +use Magento\Quote\Model\Quote; /** * Class RestoreCustomerGroupId */ -class RestoreCustomerGroupId +class RestoreCustomerGroupId implements ObserverInterface { /** * Customer address @@ -30,21 +35,21 @@ class RestoreCustomerGroupId /** * Restore initial customer group ID in quote if needed on collect_totals_after event of quote address * - * @param \Magento\Framework\Event\Observer $observer + * @param Observer $observer * @return void */ - public function execute($observer) + public function execute(Observer $observer) { - /** @var \Magento\Quote\Api\Data\ShippingAssignmentInterface $shippingAssignment */ + /** @var ShippingAssignmentInterface $shippingAssignment */ $shippingAssignment = $observer->getEvent()->getShippingAssignment(); - /** @var \Magento\Quote\Model\Quote $quote */ + /** @var Quote $quote */ $quote = $observer->getEvent()->getQuote(); $address = $shippingAssignment->getShipping()->getAddress(); $configAddressType = $this->customerAddressHelper->getTaxCalculationAddressType(); // Restore initial customer group ID in quote only if VAT is calculated based on shipping address if ($address->hasPrevQuoteCustomerGroupId() && - $configAddressType == \Magento\Customer\Model\Address\AbstractAddress::TYPE_SHIPPING + $configAddressType == AbstractAddress::TYPE_SHIPPING ) { $quote->setCustomerGroupId($address->getPrevQuoteCustomerGroupId()); $address->unsPrevQuoteCustomerGroupId(); diff --git a/app/code/Magento/Sales/Observer/GridAsyncInsertObserver.php b/app/code/Magento/Sales/Observer/GridAsyncInsertObserver.php new file mode 100644 index 0000000000000000000000000000000000000000..b6667193bf44dbf3f9d155066f2bb58315dbc2e0 --- /dev/null +++ b/app/code/Magento/Sales/Observer/GridAsyncInsertObserver.php @@ -0,0 +1,51 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Sales\Observer; + +use Magento\Framework\Event\ObserverInterface; + +/** + * Sales entity grids indexing observer. + * + * Performs handling of events related to indexing + * of Order, Invoice, Shipment and Creditmemo grids. + */ +class GridAsyncInsertObserver implements ObserverInterface +{ + /** + * @var \Magento\Sales\Model\GridAsyncInsert + */ + protected $asyncInsert; + + /** + * @param \Magento\Sales\Model\GridAsyncInsert $asyncInsert + */ + public function __construct( + \Magento\Sales\Model\GridAsyncInsert $asyncInsert + ) { + $this->asyncInsert = $asyncInsert; + } + + /** + * Handles asynchronous insertion of the new entity into + * corresponding grid during cron job. + * + * Also method is used in the next events: + * + * - config_data_dev_grid_async_indexing_disabled + * + * Works only if asynchronous grid indexing is enabled + * in global settings. + * + * @param \Magento\Framework\Event\Observer $observer + * @return void + * @SuppressWarnings(PHPMD.UnusedFormalParameter) + */ + public function execute(\Magento\Framework\Event\Observer $observer) + { + $this->asyncInsert->asyncInsert(); + } +} diff --git a/app/code/Magento/Sales/Model/Observer/IndexGrid.php b/app/code/Magento/Sales/Observer/GridSyncInsertObserver.php similarity index 57% rename from app/code/Magento/Sales/Model/Observer/IndexGrid.php rename to app/code/Magento/Sales/Observer/GridSyncInsertObserver.php index 60dc7b2f81e6dc9a40117d32232b07ae37af722c..aae81b1e37c30f6328fa0638ce18b0d3ed773db3 100644 --- a/app/code/Magento/Sales/Model/Observer/IndexGrid.php +++ b/app/code/Magento/Sales/Observer/GridSyncInsertObserver.php @@ -3,7 +3,9 @@ * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ -namespace Magento\Sales\Model\Observer; +namespace Magento\Sales\Observer; + +use Magento\Framework\Event\ObserverInterface; /** * Sales entity grids indexing observer. @@ -11,7 +13,7 @@ namespace Magento\Sales\Model\Observer; * Performs handling of events and cron jobs related to indexing * of Order, Invoice, Shipment and Creditmemo grids. */ -class IndexGrid +class GridSyncInsertObserver implements ObserverInterface { /** * Entity grid model. @@ -56,49 +58,10 @@ class IndexGrid * @param \Magento\Framework\Event\Observer $observer * @return void */ - public function syncInsert(\Magento\Framework\Event\Observer $observer) + public function execute(\Magento\Framework\Event\Observer $observer) { if (!$this->globalConfig->getValue('dev/grid/async_indexing')) { $this->entityGrid->refresh($observer->getObject()->getId()); } } - - /** - * Handles synchronous removing of the entity from - * corresponding grid on certain events. - * - * Used in the next events: - * - * - sales_order_delete_after - * - sales_order_invoice_delete_after - * - sales_order_shipment_delete_after - * - sales_order_creditmemo_delete_after - * - * @param \Magento\Framework\Event\Observer $observer - * @return void - */ - public function syncRemove(\Magento\Framework\Event\Observer $observer) - { - $this->entityGrid->purge($observer->getDataObject()->getId()); - } - - /** - * Handles asynchronous insertion of the new entity into - * corresponding grid during cron job. - * - * Also method is used in the next events: - * - * - config_data_dev_grid_async_indexing_disabled - * - * Works only if asynchronous grid indexing is enabled - * in global settings. - * - * @return void - */ - public function asyncInsert() - { - if ($this->globalConfig->getValue('dev/grid/async_indexing')) { - $this->entityGrid->refreshBySchedule(); - } - } } diff --git a/app/code/Magento/Sales/Observer/GridSyncRemoveObserver.php b/app/code/Magento/Sales/Observer/GridSyncRemoveObserver.php new file mode 100644 index 0000000000000000000000000000000000000000..c4119fb0f44c9ea813547ab762cfe8e6f63689ac --- /dev/null +++ b/app/code/Magento/Sales/Observer/GridSyncRemoveObserver.php @@ -0,0 +1,52 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Sales\Observer; + +use Magento\Framework\Event\ObserverInterface; + +/** + * Sales entity grids indexing observer. + * + * Performs handling of events and cron jobs related to indexing + * of Order, Invoice, Shipment and Creditmemo grids. + */ +class GridSyncRemoveObserver implements ObserverInterface +{ + /** + * Entity grid model. + * + * @var \Magento\Sales\Model\ResourceModel\GridInterface + */ + protected $entityGrid; + + /** + * @param \Magento\Sales\Model\ResourceModel\GridInterface $entityGrid + */ + public function __construct( + \Magento\Sales\Model\ResourceModel\GridInterface $entityGrid + ) { + $this->entityGrid = $entityGrid; + } + + /** + * Handles synchronous removing of the entity from + * corresponding grid on certain events. + * + * Used in the next events: + * + * - sales_order_delete_after + * - sales_order_invoice_delete_after + * - sales_order_shipment_delete_after + * - sales_order_creditmemo_delete_after + * + * @param \Magento\Framework\Event\Observer $observer + * @return void + */ + public function execute(\Magento\Framework\Event\Observer $observer) + { + $this->entityGrid->purge($observer->getDataObject()->getId()); + } +} diff --git a/app/code/Magento/Sales/Observer/Virtual/SendEmails.php b/app/code/Magento/Sales/Observer/Virtual/SendEmails.php new file mode 100644 index 0000000000000000000000000000000000000000..561169fba08c9d3eb4dc5085756ff7288075bed6 --- /dev/null +++ b/app/code/Magento/Sales/Observer/Virtual/SendEmails.php @@ -0,0 +1,52 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Sales\Observer\Virtual; + +use Magento\Framework\Event\ObserverInterface; + +/** + * Sales emails sending observer. + * + * Performs handling of cron jobs related to sending emails to customers + * after creation/modification of Order, Invoice, Shipment or Creditmemo. + */ +class SendEmails implements ObserverInterface +{ + /** + * Global configuration storage. + * + * @var \Magento\Sales\Model\EmailSenderHandler + */ + protected $emailSenderHandler; + + /** + * @param \Magento\Sales\Model\EmailSenderHandler $emailSenderHandler + */ + public function __construct(\Magento\Sales\Model\EmailSenderHandler $emailSenderHandler) + { + $this->emailSenderHandler = $emailSenderHandler; + } + + /** + * Handles asynchronous email sending during corresponding + * cron job. + * + * Also method is used in the next events: + * + * - config_data_sales_email_general_async_sending_disabled + * + * Works only if asynchronous email sending is enabled + * in global settings. + * + * @param \Magento\Framework\Event\Observer $observer + * @return void + * @SuppressWarnings(PHPMD.UnusedFormalParameter) + */ + public function execute(\Magento\Framework\Event\Observer $observer) + { + $this->emailSenderHandler->sendEmails(); + } +} diff --git a/app/code/Magento/Sales/Setup/UpgradeData.php b/app/code/Magento/Sales/Setup/UpgradeData.php new file mode 100644 index 0000000000000000000000000000000000000000..f3283b97bd27e4c1ebc03b5b9bbd390624a0d124 --- /dev/null +++ b/app/code/Magento/Sales/Setup/UpgradeData.php @@ -0,0 +1,95 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Sales\Setup; + +use Magento\Framework\Setup\UpgradeDataInterface; +use Magento\Framework\Setup\ModuleContextInterface; +use Magento\Framework\Setup\ModuleDataSetupInterface; + +class UpgradeData implements UpgradeDataInterface +{ + /** + * Sales setup factory + * + * @var SalesSetupFactory + */ + protected $salesSetupFactory; + + /** + * @var \Magento\Eav\Model\Config + */ + protected $eavConfig; + + /** + * @param SalesSetupFactory $salesSetupFactory + * @param \Magento\Eav\Model\Config $eavConfig + */ + public function __construct( + SalesSetupFactory $salesSetupFactory, + \Magento\Eav\Model\Config $eavConfig + ) { + $this->salesSetupFactory = $salesSetupFactory; + $this->eavConfig = $eavConfig; + } + + /** + * {@inheritdoc} + * @SuppressWarnings(PHPMD.ExcessiveMethodLength) + */ + public function upgrade(ModuleDataSetupInterface $setup, ModuleContextInterface $context) + { + $setup->startSetup(); + + /** @var SalesSetup $salesSetup */ + $salesSetup = $this->salesSetupFactory->create(['setup' => $setup]); + + if (version_compare($context->getVersion(), '2.0.1', '<')) { + $salesSetup->updateEntityType( + \Magento\Sales\Model\Order::ENTITY, + 'entity_model', + 'Magento\Sales\Model\ResourceModel\Order' + ); + $salesSetup->updateEntityType( + \Magento\Sales\Model\Order::ENTITY, + 'increment_model', + 'Magento\Eav\Model\Entity\Increment\NumericValue' + ); + $salesSetup->updateEntityType( + 'invoice', + 'entity_model', + 'Magento\Sales\Model\ResourceModel\Order' + ); + $salesSetup->updateEntityType( + 'invoice', + 'increment_model', + 'Magento\Eav\Model\Entity\Increment\NumericValue' + ); + $salesSetup->updateEntityType( + 'creditmemo', + 'entity_model', + 'Magento\Sales\Model\ResourceModel\Order\Creditmemo' + ); + $salesSetup->updateEntityType( + 'creditmemo', + 'increment_model', + 'Magento\Eav\Model\Entity\Increment\NumericValue' + ); + $salesSetup->updateEntityType( + 'shipment', + 'entity_model', + 'Magento\Sales\Model\ResourceModel\Order\Shipment' + ); + $salesSetup->updateEntityType( + 'shipment', + 'increment_model', + 'Magento\Eav\Model\Entity\Increment\NumericValue' + ); + } + $this->eavConfig->clear(); + $setup->endSetup(); + } +} diff --git a/app/code/Magento/Sales/Test/Unit/Model/Observer/CleanExpiredQuotesTest.php b/app/code/Magento/Sales/Test/Unit/Cron/CleanExpiredQuotesTest.php similarity index 91% rename from app/code/Magento/Sales/Test/Unit/Model/Observer/CleanExpiredQuotesTest.php rename to app/code/Magento/Sales/Test/Unit/Cron/CleanExpiredQuotesTest.php index 45e4c9dad88b46fd810327a1d92837197c5808dc..12259cec19143b2c0f0c59e3d4adf8f73c53020a 100644 --- a/app/code/Magento/Sales/Test/Unit/Model/Observer/CleanExpiredQuotesTest.php +++ b/app/code/Magento/Sales/Test/Unit/Cron/CleanExpiredQuotesTest.php @@ -3,12 +3,12 @@ * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ -namespace Magento\Sales\Test\Unit\Model\Observer; +namespace Magento\Sales\Test\Unit\Cron; -use \Magento\Sales\Model\Observer\CleanExpiredQuotes; +use \Magento\Sales\Cron\CleanExpiredQuotes; /** - * Tests Magento\Sales\Model\Observer\CleanExpiredQuotes + * Tests Magento\Sales\Cron\CleanExpiredQuotes */ class CleanExpiredQuotesTest extends \PHPUnit_Framework_TestCase { @@ -23,7 +23,7 @@ class CleanExpiredQuotesTest extends \PHPUnit_Framework_TestCase protected $quoteFactoryMock; /** - * @var \Magento\Sales\Model\Observer\CleanExpiredQuotes + * @var \Magento\Sales\Cron\CleanExpiredQuotes */ protected $observer; diff --git a/app/code/Magento/Sales/Test/Unit/Helper/AdminTest.php b/app/code/Magento/Sales/Test/Unit/Helper/AdminTest.php index 1dd843c872676efd1e9e0bef591ff3882c8fbd44..bbe39f3fb558f42492d2fa2e93dc90bdc42597f4 100644 --- a/app/code/Magento/Sales/Test/Unit/Helper/AdminTest.php +++ b/app/code/Magento/Sales/Test/Unit/Helper/AdminTest.php @@ -290,7 +290,7 @@ class AdminTest extends \PHPUnit_Framework_TestCase 'quote' => $quoteMock, 'other' => 'other', ]; - $collectionClassName = 'Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection'; + $collectionClassName = 'Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection'; $collectionMock = $this->getMockBuilder($collectionClassName) ->disableOriginalConstructor() ->getMock(); diff --git a/app/code/Magento/Sales/Test/Unit/Model/Observer/AggregateSalesReportBestsellersDataTest.php b/app/code/Magento/Sales/Test/Unit/Model/CronJob/AggregateSalesReportBestsellersDataTest.php similarity index 90% rename from app/code/Magento/Sales/Test/Unit/Model/Observer/AggregateSalesReportBestsellersDataTest.php rename to app/code/Magento/Sales/Test/Unit/Model/CronJob/AggregateSalesReportBestsellersDataTest.php index 3ae0ed2167377902166e61a1413be9009a7aaa2c..1cb96810b75f71cbbe356d0019da082254eaeedf 100644 --- a/app/code/Magento/Sales/Test/Unit/Model/Observer/AggregateSalesReportBestsellersDataTest.php +++ b/app/code/Magento/Sales/Test/Unit/Model/CronJob/AggregateSalesReportBestsellersDataTest.php @@ -3,12 +3,12 @@ * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ -namespace Magento\Sales\Test\Unit\Model\Observer; +namespace Magento\Sales\Test\Unit\Model\CronJob; -use \Magento\Sales\Model\Observer\AggregateSalesReportBestsellersData; +use \Magento\Sales\Model\CronJob\AggregateSalesReportBestsellersData; /** - * Tests Magento\Sales\Model\Observer\AggregateSalesReportBestsellersDataTest + * Tests Magento\Sales\Model\CronJob\AggregateSalesReportBestsellersDataTest */ class AggregateSalesReportBestsellersDataTest extends \PHPUnit_Framework_TestCase { @@ -28,7 +28,7 @@ class AggregateSalesReportBestsellersDataTest extends \PHPUnit_Framework_TestCas protected $bestsellersFactoryMock; /** - * @var \Magento\Sales\Model\Observer\AggregateSalesReportBestsellersData + * @var \Magento\Sales\Model\CronJob\AggregateSalesReportBestsellersData */ protected $observer; diff --git a/app/code/Magento/Sales/Test/Unit/Model/Observer/AggregateSalesReportInvoicedDataTest.php b/app/code/Magento/Sales/Test/Unit/Model/CronJob/AggregateSalesReportInvoicedDataTest.php similarity index 90% rename from app/code/Magento/Sales/Test/Unit/Model/Observer/AggregateSalesReportInvoicedDataTest.php rename to app/code/Magento/Sales/Test/Unit/Model/CronJob/AggregateSalesReportInvoicedDataTest.php index fd5fcb8ceb6b7e1599e475131ca4549fa0fa8a68..281d7e071ed134ceb5af1221d901530c0bcef7c3 100644 --- a/app/code/Magento/Sales/Test/Unit/Model/Observer/AggregateSalesReportInvoicedDataTest.php +++ b/app/code/Magento/Sales/Test/Unit/Model/CronJob/AggregateSalesReportInvoicedDataTest.php @@ -3,12 +3,12 @@ * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ -namespace Magento\Sales\Test\Unit\Model\Observer; +namespace Magento\Sales\Test\Unit\Model\CronJob; -use \Magento\Sales\Model\Observer\AggregateSalesReportInvoicedData; +use \Magento\Sales\Model\CronJob\AggregateSalesReportInvoicedData; /** - * Tests Magento\Sales\Model\Observer\AggregateSalesReportInvoicedDataTest + * Tests Magento\Sales\Model\CronJob\AggregateSalesReportInvoicedDataTest */ class AggregateSalesReportInvoicedDataTest extends \PHPUnit_Framework_TestCase { @@ -28,7 +28,7 @@ class AggregateSalesReportInvoicedDataTest extends \PHPUnit_Framework_TestCase protected $invoicedFactoryMock; /** - * @var \Magento\Sales\Model\Observer\AggregateSalesReportInvoicedData + * @var \Magento\Sales\Model\CronJob\AggregateSalesReportInvoicedData */ protected $observer; diff --git a/app/code/Magento/Sales/Test/Unit/Model/Observer/AggregateSalesReportOrderDataTest.php b/app/code/Magento/Sales/Test/Unit/Model/CronJob/AggregateSalesReportOrderDataTest.php similarity index 90% rename from app/code/Magento/Sales/Test/Unit/Model/Observer/AggregateSalesReportOrderDataTest.php rename to app/code/Magento/Sales/Test/Unit/Model/CronJob/AggregateSalesReportOrderDataTest.php index 2199d98668a519989c1ec726083c846fba981016..5c4188caa4d2a5280fda49e718512172cd85c3ef 100644 --- a/app/code/Magento/Sales/Test/Unit/Model/Observer/AggregateSalesReportOrderDataTest.php +++ b/app/code/Magento/Sales/Test/Unit/Model/CronJob/AggregateSalesReportOrderDataTest.php @@ -3,12 +3,12 @@ * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ -namespace Magento\Sales\Test\Unit\Model\Observer; +namespace Magento\Sales\Test\Unit\Model\CronJob; -use \Magento\Sales\Model\Observer\AggregateSalesReportOrderData; +use \Magento\Sales\Model\CronJob\AggregateSalesReportOrderData; /** - * Tests Magento\Sales\Model\Observer\AggregateSalesReportOrderDataTest + * Tests Magento\Sales\Model\CronJob\AggregateSalesReportOrderDataTest */ class AggregateSalesReportOrderDataTest extends \PHPUnit_Framework_TestCase { @@ -28,7 +28,7 @@ class AggregateSalesReportOrderDataTest extends \PHPUnit_Framework_TestCase protected $orderFactoryMock; /** - * @var \Magento\Sales\Model\Observer\AggregateSalesReportOrderData + * @var \Magento\Sales\Model\CronJob\AggregateSalesReportOrderData */ protected $observer; diff --git a/app/code/Magento/Sales/Test/Unit/Model/Observer/AggregateSalesReportRefundedDataTest.php b/app/code/Magento/Sales/Test/Unit/Model/CronJob/AggregateSalesReportRefundedDataTest.php similarity index 90% rename from app/code/Magento/Sales/Test/Unit/Model/Observer/AggregateSalesReportRefundedDataTest.php rename to app/code/Magento/Sales/Test/Unit/Model/CronJob/AggregateSalesReportRefundedDataTest.php index 85d3b561c0dde583954c3294be1571cd1bd219fa..cc38c8bd98ed3386f8ed428e6eaa82d9de06d7fa 100644 --- a/app/code/Magento/Sales/Test/Unit/Model/Observer/AggregateSalesReportRefundedDataTest.php +++ b/app/code/Magento/Sales/Test/Unit/Model/CronJob/AggregateSalesReportRefundedDataTest.php @@ -3,12 +3,12 @@ * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ -namespace Magento\Sales\Test\Unit\Model\Observer; +namespace Magento\Sales\Test\Unit\Model\CronJob; -use \Magento\Sales\Model\Observer\AggregateSalesReportRefundedData; +use \Magento\Sales\Model\CronJob\AggregateSalesReportRefundedData; /** - * Tests Magento\Sales\Model\Observer\AggregateSalesReportRefundedDataTest + * Tests Magento\Sales\Model\CronJob\AggregateSalesReportRefundedDataTest */ class AggregateSalesReportRefundedDataTest extends \PHPUnit_Framework_TestCase { @@ -28,7 +28,7 @@ class AggregateSalesReportRefundedDataTest extends \PHPUnit_Framework_TestCase protected $refundedFactoryMock; /** - * @var \Magento\Sales\Model\Observer\AggregateSalesReportRefundedData + * @var \Magento\Sales\Model\CronJob\AggregateSalesReportRefundedData */ protected $observer; diff --git a/app/code/Magento/Sales/Test/Unit/Model/Observer/CleanExpiredOrdersTest.php b/app/code/Magento/Sales/Test/Unit/Model/CronJob/CleanExpiredOrdersTest.php similarity index 95% rename from app/code/Magento/Sales/Test/Unit/Model/Observer/CleanExpiredOrdersTest.php rename to app/code/Magento/Sales/Test/Unit/Model/CronJob/CleanExpiredOrdersTest.php index 2e7b88444223019a1585244227fe9103f26c5a80..6edbe75d8986d4e78a3958d3541788ca3c6c1ef4 100644 --- a/app/code/Magento/Sales/Test/Unit/Model/Observer/CleanExpiredOrdersTest.php +++ b/app/code/Magento/Sales/Test/Unit/Model/CronJob/CleanExpiredOrdersTest.php @@ -4,9 +4,10 @@ * See COPYING.txt for license details. */ -namespace Magento\Sales\Test\Unit\Model\Observer; +namespace Magento\Sales\Test\Unit\Model\CronJob; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; +use Magento\Sales\Model\CronJob\CleanExpiredOrders; class CleanExpiredOrdersTest extends \PHPUnit_Framework_TestCase { @@ -36,7 +37,7 @@ class CleanExpiredOrdersTest extends \PHPUnit_Framework_TestCase protected $objectManager; /** - * @var \Magento\Sales\Model\Observer\CleanExpiredOrders + * @var CleanExpiredOrders */ protected $model; @@ -66,7 +67,7 @@ class CleanExpiredOrdersTest extends \PHPUnit_Framework_TestCase $this->loggerMock = $this->getMock('\Psr\Log\LoggerInterface'); - $this->model = new \Magento\Sales\Model\Observer\CleanExpiredOrders( + $this->model = new CleanExpiredOrders( $this->storesConfigMock, $this->loggerMock, $this->collectionFactoryMock diff --git a/app/code/Magento/Sales/Test/Unit/Model/Observer/SendEmailsTest.php b/app/code/Magento/Sales/Test/Unit/Model/EmailSenderHandlerTest.php similarity index 95% rename from app/code/Magento/Sales/Test/Unit/Model/Observer/SendEmailsTest.php rename to app/code/Magento/Sales/Test/Unit/Model/EmailSenderHandlerTest.php index 023381c2e5ab06585d0db8de25129fca57b0f515..ce2b840390225123977bcdd01c5b925d6f06e903 100644 --- a/app/code/Magento/Sales/Test/Unit/Model/Observer/SendEmailsTest.php +++ b/app/code/Magento/Sales/Test/Unit/Model/EmailSenderHandlerTest.php @@ -3,19 +3,19 @@ * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ -namespace Magento\Sales\Test\Unit\Model\Observer; +namespace Magento\Sales\Test\Unit\Model; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; /** * Unit test of sales emails sending observer. */ -class SendEmailsTest extends \PHPUnit_Framework_TestCase +class EmailSenderHandlerTest extends \PHPUnit_Framework_TestCase { /** * Subject of testing. * - * @var \Magento\Sales\Model\Observer\SendEmails + * @var \Magento\Sales\Model\EmailSenderHandler */ protected $object; @@ -88,7 +88,7 @@ class SendEmailsTest extends \PHPUnit_Framework_TestCase ); $this->object = $objectManager->getObject( - 'Magento\Sales\Model\Observer\SendEmails', + 'Magento\Sales\Model\EmailSenderHandler', [ 'emailSender' => $this->emailSender, 'entityResource' => $this->entityResource, @@ -156,7 +156,7 @@ class SendEmailsTest extends \PHPUnit_Framework_TestCase } } - $this->object->execute(); + $this->object->sendEmails(); } /** diff --git a/app/code/Magento/Sales/Test/Unit/Model/GridAsyncInsertTest.php b/app/code/Magento/Sales/Test/Unit/Model/GridAsyncInsertTest.php new file mode 100644 index 0000000000000000000000000000000000000000..a823425effd1362cd0f72c4941f606162b58f34c --- /dev/null +++ b/app/code/Magento/Sales/Test/Unit/Model/GridAsyncInsertTest.php @@ -0,0 +1,76 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Sales\Test\Unit\Model; + +/** + * Class GridAsyncInsertTest + */ +class GridAsyncInsertTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var \Magento\Sales\Model\GridAsyncInsert + */ + protected $unit; + + /** + * @var \Magento\Sales\Model\ResourceModel\GridInterface|\PHPUnit_Framework_MockObject_MockObject + */ + protected $gridAggregatorMock; + + /** + * @var \Magento\Sales\Model\AbstractModel|\PHPUnit_Framework_MockObject_MockObject + */ + protected $salesModelMock; + + /** + * @var \Magento\Framework\App\Config\ScopeConfigInterface|\PHPUnit_Framework_MockObject_MockObject + */ + protected $scopeConfigurationMock; + + public function setUp() + { + $this->gridAggregatorMock = $this->getMockBuilder('Magento\Sales\Model\ResourceModel\GridInterface') + ->getMockForAbstractClass(); + $this->salesModelMock = $this->getMockBuilder('Magento\Sales\Model\AbstractModel') + ->disableOriginalConstructor() + ->setMethods( + [ + 'getId' + ] + ) + ->getMockForAbstractClass(); + $this->scopeConfigurationMock = $this->getMockBuilder('Magento\Framework\App\Config\ScopeConfigInterface') + ->getMockForAbstractClass(); + + $this->unit = new \Magento\Sales\Model\GridAsyncInsert( + $this->gridAggregatorMock, + $this->scopeConfigurationMock + ); + } + + public function testAsyncInsert() + { + $this->scopeConfigurationMock->expects($this->once()) + ->method('getValue') + ->with('dev/grid/async_indexing', 'default', null) + ->willReturn(true); + $this->gridAggregatorMock->expects($this->once()) + ->method('refreshBySchedule'); + $this->unit->asyncInsert(); + } + + public function testAsyncInsertDisabled() + { + $this->scopeConfigurationMock->expects($this->once()) + ->method('getValue') + ->with('dev/grid/async_indexing', 'default', null) + ->willReturn(false); + $this->gridAggregatorMock->expects($this->never()) + ->method('refreshBySchedule'); + $this->unit->asyncInsert(); + } +} diff --git a/app/code/Magento/Sales/Test/Unit/Model/Order/AddressRepositoryTest.php b/app/code/Magento/Sales/Test/Unit/Model/Order/AddressRepositoryTest.php index decd3c1048f4e2a78f32a3bc69774adec686d4d3..f943f6632225b1c026852e51ebfa4339444a999b 100644 --- a/app/code/Magento/Sales/Test/Unit/Model/Order/AddressRepositoryTest.php +++ b/app/code/Magento/Sales/Test/Unit/Model/Order/AddressRepositoryTest.php @@ -86,7 +86,7 @@ class AddressRepositoryTest extends \PHPUnit_Framework_TestCase ->willReturn($entityId); $mapper = $this->getMockForAbstractClass( - 'Magento\Framework\Model\ModelResource\Db\AbstractDb', + 'Magento\Framework\Model\ResourceModel\Db\AbstractDb', [], '', false, @@ -213,7 +213,7 @@ class AddressRepositoryTest extends \PHPUnit_Framework_TestCase ->willReturn(1); $mapper = $this->getMockForAbstractClass( - 'Magento\Framework\Model\ModelResource\Db\AbstractDb', + 'Magento\Framework\Model\ResourceModel\Db\AbstractDb', [], '', false, @@ -249,7 +249,7 @@ class AddressRepositoryTest extends \PHPUnit_Framework_TestCase ->method('getEntityId'); $mapper = $this->getMockForAbstractClass( - 'Magento\Framework\Model\ModelResource\Db\AbstractDb', + 'Magento\Framework\Model\ResourceModel\Db\AbstractDb', [], '', false, @@ -282,7 +282,7 @@ class AddressRepositoryTest extends \PHPUnit_Framework_TestCase ->willReturn(1); $mapper = $this->getMockForAbstractClass( - 'Magento\Framework\Model\ModelResource\Db\AbstractDb', + 'Magento\Framework\Model\ResourceModel\Db\AbstractDb', [], '', false, @@ -318,7 +318,7 @@ class AddressRepositoryTest extends \PHPUnit_Framework_TestCase ->method('getEntityId'); $mapper = $this->getMockForAbstractClass( - 'Magento\Framework\Model\ModelResource\Db\AbstractDb', + 'Magento\Framework\Model\ResourceModel\Db\AbstractDb', [], '', false, diff --git a/app/code/Magento/Sales/Test/Unit/Model/Order/ItemRepositoryTest.php b/app/code/Magento/Sales/Test/Unit/Model/Order/ItemRepositoryTest.php index 47572046646f0973d2adb9f042a81cd3e33b414d..e2deb200dbcfcd930ae170dee2cd48819509a8f3 100644 --- a/app/code/Magento/Sales/Test/Unit/Model/Order/ItemRepositoryTest.php +++ b/app/code/Magento/Sales/Test/Unit/Model/Order/ItemRepositoryTest.php @@ -109,7 +109,7 @@ class ItemRepositoryTest extends \PHPUnit_Framework_TestCase ->method('getItemId') ->willReturn(null); - $orderItemResourceMock = $this->getMockBuilder('Magento\Framework\Model\ModelResource\Db\AbstractDb') + $orderItemResourceMock = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\Db\AbstractDb') ->disableOriginalConstructor() ->getMock(); $orderItemResourceMock->expects($this->once()) @@ -150,7 +150,7 @@ class ItemRepositoryTest extends \PHPUnit_Framework_TestCase ->method('getItemId') ->willReturn($orderItemId); - $orderItemResourceMock = $this->getMockBuilder('Magento\Framework\Model\ModelResource\Db\AbstractDb') + $orderItemResourceMock = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\Db\AbstractDb') ->disableOriginalConstructor() ->getMock(); $orderItemResourceMock->expects($this->once()) @@ -255,7 +255,7 @@ class ItemRepositoryTest extends \PHPUnit_Framework_TestCase ->method('getBuyRequest') ->willReturn($requestMock); - $orderItemResourceMock = $this->getMockBuilder('Magento\Framework\Model\ModelResource\Db\AbstractDb') + $orderItemResourceMock = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\Db\AbstractDb') ->disableOriginalConstructor() ->getMock(); $orderItemResourceMock->expects($this->once()) diff --git a/app/code/Magento/Sales/Test/Unit/Model/Order/ShipmentRepositoryTest.php b/app/code/Magento/Sales/Test/Unit/Model/Order/ShipmentRepositoryTest.php index ad802940bc45f4907da4c7e055fb5e4574e6619c..36a8360ee094fbf2c05b70ed871492d1b0b0d25b 100644 --- a/app/code/Magento/Sales/Test/Unit/Model/Order/ShipmentRepositoryTest.php +++ b/app/code/Magento/Sales/Test/Unit/Model/Order/ShipmentRepositoryTest.php @@ -86,7 +86,7 @@ class ShipmentRepositoryTest extends \PHPUnit_Framework_TestCase ->willReturn($entityId); $mapper = $this->getMockForAbstractClass( - 'Magento\Framework\Model\ModelResource\Db\AbstractDb', + 'Magento\Framework\Model\ResourceModel\Db\AbstractDb', [], '', false, @@ -213,7 +213,7 @@ class ShipmentRepositoryTest extends \PHPUnit_Framework_TestCase ->willReturn(1); $mapper = $this->getMockForAbstractClass( - 'Magento\Framework\Model\ModelResource\Db\AbstractDb', + 'Magento\Framework\Model\ResourceModel\Db\AbstractDb', [], '', false, @@ -249,7 +249,7 @@ class ShipmentRepositoryTest extends \PHPUnit_Framework_TestCase ->method('getEntityId'); $mapper = $this->getMockForAbstractClass( - 'Magento\Framework\Model\ModelResource\Db\AbstractDb', + 'Magento\Framework\Model\ResourceModel\Db\AbstractDb', [], '', false, @@ -282,7 +282,7 @@ class ShipmentRepositoryTest extends \PHPUnit_Framework_TestCase ->willReturn(1); $mapper = $this->getMockForAbstractClass( - 'Magento\Framework\Model\ModelResource\Db\AbstractDb', + 'Magento\Framework\Model\ResourceModel\Db\AbstractDb', [], '', false, @@ -318,7 +318,7 @@ class ShipmentRepositoryTest extends \PHPUnit_Framework_TestCase ->method('getEntityId'); $mapper = $this->getMockForAbstractClass( - 'Magento\Framework\Model\ModelResource\Db\AbstractDb', + 'Magento\Framework\Model\ResourceModel\Db\AbstractDb', [], '', false, diff --git a/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/AddressTest.php b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/AddressTest.php index 3153a6ff4f06b33f26613f58de8c03f92c482653..ffeb136782b1ce1b16873f54caa70ce3a1dbbb88 100644 --- a/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/AddressTest.php +++ b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/AddressTest.php @@ -46,7 +46,7 @@ class AddressTest extends \PHPUnit_Framework_TestCase protected $gridPoolMock; /** - * @var \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject */ protected $entitySnapshotMock; @@ -95,7 +95,7 @@ class AddressTest extends \PHPUnit_Framework_TestCase false ); $this->entitySnapshotMock = $this->getMock( - 'Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot', + 'Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot', [], [], '', diff --git a/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Creditmemo/CommentTest.php b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Creditmemo/CommentTest.php index 80ca95e57066575992dd099021c1c49a19f5cebe..1a0c25004dd66102e2b6cdd2d3d31fa32098abbb 100644 --- a/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Creditmemo/CommentTest.php +++ b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Creditmemo/CommentTest.php @@ -35,7 +35,7 @@ class CommentTest extends \PHPUnit_Framework_TestCase */ protected $validatorMock; /** - * @var \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject */ protected $entitySnapshotMock; @@ -73,7 +73,7 @@ class CommentTest extends \PHPUnit_Framework_TestCase false ); $this->entitySnapshotMock = $this->getMock( - 'Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot', + 'Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot', [], [], '', @@ -94,14 +94,14 @@ class CommentTest extends \PHPUnit_Framework_TestCase $this->commentModelMock->expects($this->any())->method('isSaveAllowed')->will($this->returnValue(true)); $relationProcessorMock = $this->getMock( - '\Magento\Framework\Model\ModelResource\Db\ObjectRelationProcessor', + '\Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor', [], [], '', false ); - $contextMock = $this->getMock('\Magento\Framework\Model\ModelResource\Db\Context', [], [], '', false); + $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false); $contextMock->expects($this->once())->method('getResources')->willReturn($this->appResourceMock); $contextMock->expects($this->once())->method('getObjectRelationProcessor')->willReturn($relationProcessorMock); diff --git a/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Invoice/CommentTest.php b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Invoice/CommentTest.php index ee224febc5387011535559f33e49b1becf1b7bbf..f6f3276422d09cb38ae802b7601c6236699010ba 100644 --- a/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Invoice/CommentTest.php +++ b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Invoice/CommentTest.php @@ -35,7 +35,7 @@ class CommentTest extends \PHPUnit_Framework_TestCase */ protected $validatorMock; /** - * @var \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject */ protected $entitySnapshotMock; @@ -73,7 +73,7 @@ class CommentTest extends \PHPUnit_Framework_TestCase false ); $this->entitySnapshotMock = $this->getMock( - 'Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot', + 'Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot', [], [], '', @@ -93,14 +93,14 @@ class CommentTest extends \PHPUnit_Framework_TestCase $this->commentModelMock->expects($this->any())->method('isSaveAllowed')->will($this->returnValue(true)); $relationProcessorMock = $this->getMock( - '\Magento\Framework\Model\ModelResource\Db\ObjectRelationProcessor', + '\Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor', [], [], '', false ); - $contextMock = $this->getMock('\Magento\Framework\Model\ModelResource\Db\Context', [], [], '', false); + $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false); $contextMock->expects($this->once())->method('getResources')->willReturn($this->appResourceMock); $contextMock->expects($this->once())->method('getObjectRelationProcessor')->willReturn($relationProcessorMock); diff --git a/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Shipment/CommentTest.php b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Shipment/CommentTest.php index b3e6914f376e8d5070a5040e7da9a7a353d48370..b45655d8b8528e4a55c8d5718df36541812a8c98 100644 --- a/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Shipment/CommentTest.php +++ b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Shipment/CommentTest.php @@ -35,7 +35,7 @@ class CommentTest extends \PHPUnit_Framework_TestCase */ protected $validatorMock; /** - * @var \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject */ protected $entitySnapshotMock; @@ -73,7 +73,7 @@ class CommentTest extends \PHPUnit_Framework_TestCase false ); $this->entitySnapshotMock = $this->getMock( - 'Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot', + 'Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot', [], [], '', @@ -93,14 +93,14 @@ class CommentTest extends \PHPUnit_Framework_TestCase $this->commentModelMock->expects($this->any())->method('isSaveAllowed')->will($this->returnValue(true)); $relationProcessorMock = $this->getMock( - '\Magento\Framework\Model\ModelResource\Db\ObjectRelationProcessor', + '\Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor', [], [], '', false ); - $contextMock = $this->getMock('\Magento\Framework\Model\ModelResource\Db\Context', [], [], '', false); + $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false); $contextMock->expects($this->once())->method('getResources')->willReturn($this->appResourceMock); $contextMock->expects($this->once())->method('getObjectRelationProcessor')->willReturn($relationProcessorMock); diff --git a/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Shipment/TrackTest.php b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Shipment/TrackTest.php index 84f97a45036fe6c48031c6e08aa766b65c3e2208..87b96f2d2e44ea144b8c6a3e32cbcd92eb216589 100644 --- a/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Shipment/TrackTest.php +++ b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Shipment/TrackTest.php @@ -35,7 +35,7 @@ class TrackTest extends \PHPUnit_Framework_TestCase */ protected $validatorMock; /** - * @var \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject */ protected $entitySnapshotMock; @@ -73,7 +73,7 @@ class TrackTest extends \PHPUnit_Framework_TestCase false ); $this->entitySnapshotMock = $this->getMock( - 'Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot', + 'Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot', [], [], '', @@ -93,14 +93,14 @@ class TrackTest extends \PHPUnit_Framework_TestCase $this->trackModelMock->expects($this->any())->method('isSaveAllowed')->will($this->returnValue(true)); $relationProcessorMock = $this->getMock( - '\Magento\Framework\Model\ModelResource\Db\ObjectRelationProcessor', + '\Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor', [], [], '', false ); - $contextMock = $this->getMock('\Magento\Framework\Model\ModelResource\Db\Context', [], [], '', false); + $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false); $contextMock->expects($this->once())->method('getResources')->willReturn($this->appResourceMock); $contextMock->expects($this->once())->method('getObjectRelationProcessor')->willReturn($relationProcessorMock); diff --git a/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Status/History/CollectionTest.php b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Status/History/CollectionTest.php index 4b78efb0272c34657270c851a23df15a9c6f258d..ef6984b3abfce6d65c55273ec9daf349ab3a12d8 100644 --- a/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Status/History/CollectionTest.php +++ b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Status/History/CollectionTest.php @@ -34,7 +34,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase protected $historyItemMock; /** - * @var \Magento\Framework\Model\ModelResource\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject */ protected $resourceMock; @@ -48,7 +48,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase */ protected $entityFactoryMock; /** - * @var \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject */ protected $entitySnapshotMock; @@ -74,7 +74,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase ['getConnection', 'getMainTable', 'getTable', '__wakeup'] ); $this->entitySnapshotMock = $this->getMock( - 'Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot', + 'Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot', [], [], '', diff --git a/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Status/HistoryTest.php b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Status/HistoryTest.php index 8a535a7de3f0f6e31ae5ba974a54af450191fba7..27a1c50495f3f3221bb8a4fc386c11793c667e5a 100644 --- a/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Status/HistoryTest.php +++ b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Status/HistoryTest.php @@ -37,7 +37,7 @@ class HistoryTest extends \PHPUnit_Framework_TestCase protected $validatorMock; /** - * @var \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject */ protected $entitySnapshotMock; @@ -65,7 +65,7 @@ class HistoryTest extends \PHPUnit_Framework_TestCase false ); $this->entitySnapshotMock = $this->getMock( - 'Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot', + 'Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot', [], [], '', @@ -84,14 +84,14 @@ class HistoryTest extends \PHPUnit_Framework_TestCase ->method('lastInsertId'); $relationProcessorMock = $this->getMock( - '\Magento\Framework\Model\ModelResource\Db\ObjectRelationProcessor', + '\Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor', [], [], '', false ); - $contextMock = $this->getMock('\Magento\Framework\Model\ModelResource\Db\Context', [], [], '', false); + $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false); $contextMock->expects($this->once())->method('getResources')->willReturn($this->appResourceMock); $contextMock->expects($this->once())->method('getObjectRelationProcessor')->willReturn($relationProcessorMock); diff --git a/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/OrderTest.php b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/OrderTest.php index 62407f4560661143c9d3f71fc312b377816956c9..b84194d4fc18460e3c7c770eae6406be44014a77 100644 --- a/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/OrderTest.php +++ b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/OrderTest.php @@ -5,7 +5,7 @@ */ namespace Magento\Sales\Test\Unit\Model\ResourceModel; -use Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite; +use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite; use \Magento\Sales\Model\ResourceModel\Order; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper; @@ -59,7 +59,7 @@ class OrderTest extends \PHPUnit_Framework_TestCase */ protected $connectionMock; /** - * @var \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject */ protected $entitySnapshotMock; @@ -69,7 +69,7 @@ class OrderTest extends \PHPUnit_Framework_TestCase protected $relationCompositeMock; /** - * @var \Magento\Framework\Model\ModelResource\Db\ObjectRelationProcessor|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor|\PHPUnit_Framework_MockObject_MockObject */ protected $objectRelationProcessorMock; /** @@ -126,27 +126,27 @@ class OrderTest extends \PHPUnit_Framework_TestCase ); $this->salesSequenceMock = $this->getMock('Magento\SalesSequence\Model\Sequence', [], [], '', false); $this->entitySnapshotMock = $this->getMock( - 'Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot', + 'Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot', [], [], '', false ); $this->relationCompositeMock = $this->getMock( - 'Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite', + 'Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite', [], [], '', false ); $this->objectRelationProcessorMock = $this->getMock( - 'Magento\Framework\Model\ModelResource\Db\ObjectRelationProcessor', + 'Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor', [], [], '', false ); - $contextMock = $this->getMock('\Magento\Framework\Model\ModelResource\Db\Context', [], [], '', false); + $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false); $contextMock->expects($this->once())->method('getResources')->willReturn($this->resourceMock); $contextMock->expects($this->once()) ->method('getObjectRelationProcessor') diff --git a/app/code/Magento/Sales/Test/Unit/Model/Observer/Backend/CatalogPriceRuleTest.php b/app/code/Magento/Sales/Test/Unit/Observer/Backend/CatalogPriceRuleTest.php similarity index 54% rename from app/code/Magento/Sales/Test/Unit/Model/Observer/Backend/CatalogPriceRuleTest.php rename to app/code/Magento/Sales/Test/Unit/Observer/Backend/CatalogPriceRuleTest.php index 4c16bcc945231c012ac60f84a9eb04fe88867d95..483dd014d71b2cd8486934eab80acb2ed3a8e40a 100644 --- a/app/code/Magento/Sales/Test/Unit/Model/Observer/Backend/CatalogPriceRuleTest.php +++ b/app/code/Magento/Sales/Test/Unit/Observer/Backend/CatalogPriceRuleTest.php @@ -3,12 +3,15 @@ * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ -namespace Magento\Sales\Test\Unit\Model\Observer\Backend; +namespace Magento\Sales\Test\Unit\Observer\Backend; + +use Magento\Framework\Event\Observer; +use Magento\Sales\Observer\Backend\CatalogPriceRule; class CatalogPriceRuleTest extends \PHPUnit_Framework_TestCase { /** - * @var \Magento\Sales\Model\Observer\Backend\CatalogPriceRule + * @var CatalogPriceRule */ protected $_model; @@ -17,15 +20,21 @@ class CatalogPriceRuleTest extends \PHPUnit_Framework_TestCase */ protected $_quoteMock; + /** + * @var Observer|\PHPUnit_Framework_MockObject_MockObject + */ + protected $eventObserverMock; + protected function setUp() { + $this->eventObserverMock = $this->getMock('Magento\Framework\Event\Observer'); $this->_quoteMock = $this->getMock('Magento\Quote\Model\ResourceModel\Quote', [], [], '', false); - $this->_model = new \Magento\Sales\Model\Observer\Backend\CatalogPriceRule($this->_quoteMock); + $this->_model = new CatalogPriceRule($this->_quoteMock); } public function testDispatch() { $this->_quoteMock->expects($this->once())->method('markQuotesRecollectOnCatalogRules'); - $this->_model->dispatch(); + $this->_model->execute($this->eventObserverMock); } } diff --git a/app/code/Magento/Sales/Test/Unit/Model/Observer/Backend/CatalogProductQuoteTest.php b/app/code/Magento/Sales/Test/Unit/Observer/Backend/CatalogProductSaveAfterObserverTest.php similarity index 67% rename from app/code/Magento/Sales/Test/Unit/Model/Observer/Backend/CatalogProductQuoteTest.php rename to app/code/Magento/Sales/Test/Unit/Observer/Backend/CatalogProductSaveAfterObserverTest.php index d479149e53e45bd8801ba6c948f4fc7453b5bf37..7672067f86b66596bc350ef6f8f9c61dde82fa3c 100644 --- a/app/code/Magento/Sales/Test/Unit/Model/Observer/Backend/CatalogProductQuoteTest.php +++ b/app/code/Magento/Sales/Test/Unit/Observer/Backend/CatalogProductSaveAfterObserverTest.php @@ -3,12 +3,14 @@ * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ -namespace Magento\Sales\Test\Unit\Model\Observer\Backend; +namespace Magento\Sales\Test\Unit\Observer\Backend; -class CatalogProductQuoteTest extends \PHPUnit_Framework_TestCase +use Magento\Sales\Observer\Backend\CatalogProductSaveAfterObserver; + +class CatalogProductSaveAfterObserverTest extends \PHPUnit_Framework_TestCase { /** - * @var \Magento\Sales\Model\Observer\Backend\CatalogProductQuote + * @var CatalogProductSaveAfterObserver */ protected $_model; @@ -39,7 +41,7 @@ class CatalogProductQuoteTest extends \PHPUnit_Framework_TestCase false ); $this->_observerMock->expects($this->any())->method('getEvent')->will($this->returnValue($this->_eventMock)); - $this->_model = new \Magento\Sales\Model\Observer\Backend\CatalogProductQuote($this->_quoteMock); + $this->_model = new CatalogProductSaveAfterObserver($this->_quoteMock); } /** @@ -60,25 +62,14 @@ class CatalogProductQuoteTest extends \PHPUnit_Framework_TestCase $productMock->expects($this->once())->method('getId')->will($this->returnValue($productId)); $productMock->expects($this->once())->method('getStatus')->will($this->returnValue($productStatus)); $this->_quoteMock->expects($this->any())->method('markQuotesRecollect'); - $this->_model->catalogProductSaveAfter($this->_observerMock); + $this->_model->execute($this->_observerMock); } + /** + * @return array + */ public function statusUpdateDataProvider() { return [[125, 1], [100, 0]]; } - - public function testSubtractQtyFromQuotes() - { - $productMock = $this->getMock( - 'Magento\Catalog\Model\Product', - ['getId', 'getStatus', '__wakeup'], - [], - '', - false - ); - $this->_eventMock->expects($this->once())->method('getProduct')->will($this->returnValue($productMock)); - $this->_quoteMock->expects($this->once())->method('substractProductFromQuotes')->with($productMock); - $this->_model->subtractQtyFromQuotes($this->_observerMock); - } } diff --git a/app/code/Magento/Sales/Test/Unit/Observer/Backend/SubtractQtyFromQuotesObserverTest.php b/app/code/Magento/Sales/Test/Unit/Observer/Backend/SubtractQtyFromQuotesObserverTest.php new file mode 100644 index 0000000000000000000000000000000000000000..64e0a7433497dfca4266867f412038ed5efb3d40 --- /dev/null +++ b/app/code/Magento/Sales/Test/Unit/Observer/Backend/SubtractQtyFromQuotesObserverTest.php @@ -0,0 +1,60 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Sales\Test\Unit\Observer\Backend; + +use Magento\Sales\Observer\Backend\SubtractQtyFromQuotesObserver; + +class SubtractQtyFromQuotesObserverTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var SubtractQtyFromQuotesObserver + */ + protected $_model; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_quoteMock; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_observerMock; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $_eventMock; + + protected function setUp() + { + $this->_quoteMock = $this->getMock('Magento\Quote\Model\ResourceModel\Quote', [], [], '', false); + $this->_observerMock = $this->getMock('Magento\Framework\Event\Observer', [], [], '', false); + $this->_eventMock = $this->getMock( + 'Magento\Framework\Event', + ['getProduct', 'getStatus', 'getProductId'], + [], + '', + false + ); + $this->_observerMock->expects($this->any())->method('getEvent')->will($this->returnValue($this->_eventMock)); + $this->_model = new SubtractQtyFromQuotesObserver($this->_quoteMock); + } + + public function testSubtractQtyFromQuotes() + { + $productMock = $this->getMock( + 'Magento\Catalog\Model\Product', + ['getId', 'getStatus', '__wakeup'], + [], + '', + false + ); + $this->_eventMock->expects($this->once())->method('getProduct')->will($this->returnValue($productMock)); + $this->_quoteMock->expects($this->once())->method('substractProductFromQuotes')->with($productMock); + $this->_model->execute($this->_observerMock); + } +} diff --git a/app/code/Magento/Sales/Test/Unit/Model/Observer/Frontend/Quote/AddVatRequestParamsOrderCommentTest.php b/app/code/Magento/Sales/Test/Unit/Observer/Frontend/AddVatRequestParamsOrderCommentTest.php similarity index 94% rename from app/code/Magento/Sales/Test/Unit/Model/Observer/Frontend/Quote/AddVatRequestParamsOrderCommentTest.php rename to app/code/Magento/Sales/Test/Unit/Observer/Frontend/AddVatRequestParamsOrderCommentTest.php index c7b0a8f2ab9e48576d4d93cc91ee728533c9affa..c4bc2bc5ead6a55d8a76577484fffebf4cae3ed3 100644 --- a/app/code/Magento/Sales/Test/Unit/Model/Observer/Frontend/Quote/AddVatRequestParamsOrderCommentTest.php +++ b/app/code/Magento/Sales/Test/Unit/Observer/Frontend/AddVatRequestParamsOrderCommentTest.php @@ -3,12 +3,12 @@ * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ -namespace Magento\Sales\Test\Unit\Model\Observer\Frontend\Quote; +namespace Magento\Sales\Test\Unit\Observer\Frontend; -use \Magento\Sales\Model\Observer\Frontend\Quote\AddVatRequestParamsOrderComment; +use \Magento\Sales\Observer\Frontend\AddVatRequestParamsOrderComment; /** - * Tests Magento\Sales\Model\Observer\Frontend\Quote\AddVatRequestParamsOrderComment + * Tests Magento\Sales\Observer\Frontend\AddVatRequestParamsOrderComment */ class AddVatRequestParamsOrderCommentTest extends \PHPUnit_Framework_TestCase { diff --git a/app/code/Magento/Sales/Test/Unit/Model/Observer/Frontend/Quote/RestoreCustomerGroupIdTest.php b/app/code/Magento/Sales/Test/Unit/Observer/Frontend/RestoreCustomerGroupIdTest.php similarity index 93% rename from app/code/Magento/Sales/Test/Unit/Model/Observer/Frontend/Quote/RestoreCustomerGroupIdTest.php rename to app/code/Magento/Sales/Test/Unit/Observer/Frontend/RestoreCustomerGroupIdTest.php index 48ae41556ae878f5632ffae0bfef9e659735a7fd..d89da2cbfb90ef75bdb93f38271b0e1370431f1e 100644 --- a/app/code/Magento/Sales/Test/Unit/Model/Observer/Frontend/Quote/RestoreCustomerGroupIdTest.php +++ b/app/code/Magento/Sales/Test/Unit/Observer/Frontend/RestoreCustomerGroupIdTest.php @@ -3,12 +3,12 @@ * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ -namespace Magento\Sales\Test\Unit\Model\Observer\Frontend\Quote; +namespace Magento\Sales\Test\Unit\Observer\Frontend; -use \Magento\Sales\Model\Observer\Frontend\Quote\RestoreCustomerGroupId; +use \Magento\Sales\Observer\Frontend\RestoreCustomerGroupId; /** - * Tests Magento\Sales\Model\Observer\Frontend\Quote\RestoreCustomerGroupIdTest + * Tests Magento\Sales\Observer\Frontend\RestoreCustomerGroupIdTest */ class RestoreCustomerGroupIdTest extends \PHPUnit_Framework_TestCase { diff --git a/app/code/Magento/Sales/Test/Unit/Model/Observer/IndexGridTest.php b/app/code/Magento/Sales/Test/Unit/Observer/GridSyncInsertObserverTest.php similarity index 61% rename from app/code/Magento/Sales/Test/Unit/Model/Observer/IndexGridTest.php rename to app/code/Magento/Sales/Test/Unit/Observer/GridSyncInsertObserverTest.php index b3d0165849ea464b6f65da548ab182f6d308b519..695fe3c6d78898cb7ed2ff2ad980fbbf39b82f13 100644 --- a/app/code/Magento/Sales/Test/Unit/Model/Observer/IndexGridTest.php +++ b/app/code/Magento/Sales/Test/Unit/Observer/GridSyncInsertObserverTest.php @@ -4,28 +4,23 @@ * See COPYING.txt for license details. */ -namespace Magento\Sales\Test\Unit\Model\Observer; +namespace Magento\Sales\Test\Unit\Observer; /** - * Class IndexGridTest + * Class GridSyncInsertObserverTest */ -class IndexGridTest extends \PHPUnit_Framework_TestCase +class GridSyncInsertObserverTest extends \PHPUnit_Framework_TestCase { /** - * @var \Magento\Sales\Model\Observer\IndexGrid + * @var \Magento\Sales\Observer\GridSyncInsertObserver */ - protected $indexGrid; + protected $unit; /** * @var \Magento\Sales\Model\ResourceModel\GridInterface|\PHPUnit_Framework_MockObject_MockObject */ protected $gridAggregatorMock; - /** - * @var \Magento\Framework\App\Config\ScopeConfigInterface|\PHPUnit_Framework_MockObject_MockObject - */ - protected $scopeConfigurationMock; - /** * @var \Magento\Framework\Event\Observer|\PHPUnit_Framework_MockObject_MockObject */ @@ -36,12 +31,15 @@ class IndexGridTest extends \PHPUnit_Framework_TestCase */ protected $salesModelMock; + /** + * @var \Magento\Framework\App\Config\ScopeConfigInterface|\PHPUnit_Framework_MockObject_MockObject + */ + protected $scopeConfigurationMock; + public function setUp() { $this->gridAggregatorMock = $this->getMockBuilder('Magento\Sales\Model\ResourceModel\GridInterface') ->getMockForAbstractClass(); - $this->scopeConfigurationMock = $this->getMockBuilder('Magento\Framework\App\Config\ScopeConfigInterface') - ->getMockForAbstractClass(); $this->eventObserverMock = $this->getMockBuilder('Magento\Framework\Event\Observer') ->disableOriginalConstructor() ->setMethods( @@ -59,7 +57,10 @@ class IndexGridTest extends \PHPUnit_Framework_TestCase ] ) ->getMockForAbstractClass(); - $this->indexGrid = new \Magento\Sales\Model\Observer\IndexGrid( + $this->scopeConfigurationMock = $this->getMockBuilder('Magento\Framework\App\Config\ScopeConfigInterface') + ->getMockForAbstractClass(); + + $this->unit = new \Magento\Sales\Observer\GridSyncInsertObserver( $this->gridAggregatorMock, $this->scopeConfigurationMock ); @@ -80,7 +81,7 @@ class IndexGridTest extends \PHPUnit_Framework_TestCase $this->gridAggregatorMock->expects($this->once()) ->method('refresh') ->with('sales-id-value'); - $this->indexGrid->syncInsert($this->eventObserverMock); + $this->unit->execute($this->eventObserverMock); } public function testSyncInsertDisabled() @@ -92,42 +93,6 @@ class IndexGridTest extends \PHPUnit_Framework_TestCase $this->gridAggregatorMock->expects($this->never()) ->method('refresh') ->with('sales-id-value'); - $this->indexGrid->syncInsert($this->eventObserverMock); - } - - public function testSyncRemove() - { - $this->eventObserverMock->expects($this->once()) - ->method('getDataObject') - ->willReturn($this->salesModelMock); - $this->salesModelMock->expects($this->once()) - ->method('getId') - ->willReturn('sales-id-value'); - $this->gridAggregatorMock->expects($this->once()) - ->method('purge') - ->with('sales-id-value'); - $this->indexGrid->syncRemove($this->eventObserverMock); - } - - public function testAsyncInsert() - { - $this->scopeConfigurationMock->expects($this->once()) - ->method('getValue') - ->with('dev/grid/async_indexing', 'default', null) - ->willReturn(true); - $this->gridAggregatorMock->expects($this->once()) - ->method('refreshBySchedule'); - $this->indexGrid->asyncInsert(); - } - - public function testAsyncInsertDisabled() - { - $this->scopeConfigurationMock->expects($this->once()) - ->method('getValue') - ->with('dev/grid/async_indexing', 'default', null) - ->willReturn(false); - $this->gridAggregatorMock->expects($this->never()) - ->method('refreshBySchedule'); - $this->indexGrid->asyncInsert(); + $this->unit->execute($this->eventObserverMock); } } diff --git a/app/code/Magento/Sales/Test/Unit/Observer/GridSyncRemoveObserverTest.php b/app/code/Magento/Sales/Test/Unit/Observer/GridSyncRemoveObserverTest.php new file mode 100644 index 0000000000000000000000000000000000000000..dbd022d85c34effbc31527278cc93481e6676f48 --- /dev/null +++ b/app/code/Magento/Sales/Test/Unit/Observer/GridSyncRemoveObserverTest.php @@ -0,0 +1,73 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Sales\Test\Unit\Observer; + +/** + * Class GridSyncRemoveObserverTest + */ +class GridSyncRemoveObserverTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var \Magento\Sales\Observer\GridSyncRemoveObserver + */ + protected $unit; + + /** + * @var \Magento\Sales\Model\ResourceModel\GridInterface|\PHPUnit_Framework_MockObject_MockObject + */ + protected $gridAggregatorMock; + + /** + * @var \Magento\Framework\Event\Observer|\PHPUnit_Framework_MockObject_MockObject + */ + protected $eventObserverMock; + + /** + * @var \Magento\Sales\Model\AbstractModel|\PHPUnit_Framework_MockObject_MockObject + */ + protected $salesModelMock; + + public function setUp() + { + $this->gridAggregatorMock = $this->getMockBuilder('Magento\Sales\Model\ResourceModel\GridInterface') + ->getMockForAbstractClass(); + $this->eventObserverMock = $this->getMockBuilder('Magento\Framework\Event\Observer') + ->disableOriginalConstructor() + ->setMethods( + [ + 'getObject', + 'getDataObject' + ] + ) + ->getMock(); + $this->salesModelMock = $this->getMockBuilder('Magento\Sales\Model\AbstractModel') + ->disableOriginalConstructor() + ->setMethods( + [ + 'getId' + ] + ) + ->getMockForAbstractClass(); + $this->unit = new \Magento\Sales\Observer\GridSyncRemoveObserver( + $this->gridAggregatorMock + ); + } + + public function testSyncRemove() + { + $this->eventObserverMock->expects($this->once()) + ->method('getDataObject') + ->willReturn($this->salesModelMock); + $this->salesModelMock->expects($this->once()) + ->method('getId') + ->willReturn('sales-id-value'); + $this->gridAggregatorMock->expects($this->once()) + ->method('purge') + ->with('sales-id-value'); + $this->unit->execute($this->eventObserverMock); + } +} diff --git a/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/AddressTest.php b/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/AddressTest.php index 848c9ebc498fcaef7fbe2e04d2c8399af6c69dd5..379117ef1d2dfade9c6f787777ed97c4578a9114 100644 --- a/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/AddressTest.php +++ b/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/AddressTest.php @@ -27,10 +27,19 @@ class AddressTest extends \PHPUnit_Framework_TestCase public function setUp() { $objectManager = new ObjectManager($this); + $contextMock = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\ContextInterface') + ->getMockForAbstractClass(); + $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor') + ->disableOriginalConstructor() + ->getMock(); + $contextMock->expects($this->any())->method('getProcessor')->willReturn($processor); $this->escaper = $this->getMock('Magento\Framework\Escaper', ['escapeHtml'], [], '', false); $this->model = $objectManager->getObject( 'Magento\Sales\Ui\Component\Listing\Column\Address', - ['escaper' => $this->escaper] + [ + 'context' => $contextMock, + 'escaper' => $this->escaper, + ] ); } diff --git a/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/CustomerGroupTest.php b/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/CustomerGroupTest.php index 262f0fdcb94ff88633c148b2ab38c3b8f2e3c6f4..d0e9e34bf7ac8fe3a9e51cee368cc61a5f6bc05a 100644 --- a/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/CustomerGroupTest.php +++ b/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/CustomerGroupTest.php @@ -27,10 +27,16 @@ class CustomerGroupTest extends \PHPUnit_Framework_TestCase public function setUp() { $objectManager = new ObjectManager($this); + $contextMock = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\ContextInterface') + ->getMockForAbstractClass(); + $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor') + ->disableOriginalConstructor() + ->getMock(); + $contextMock->expects($this->any())->method('getProcessor')->willReturn($processor); $this->groupRepository = $this->getMockForAbstractClass('Magento\Customer\Api\GroupRepositoryInterface'); $this->model = $objectManager->getObject( 'Magento\Sales\Ui\Component\Listing\Column\CustomerGroup', - ['groupRepository' => $this->groupRepository] + ['groupRepository' => $this->groupRepository, 'context' => $contextMock] ); } diff --git a/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/PaymentMethodTest.php b/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/PaymentMethodTest.php index 10e64a079d6112899079a7a6c696ae6bc34eafaf..d8424896f059bcc9618d2160d9a7dc0ac612567c 100644 --- a/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/PaymentMethodTest.php +++ b/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/PaymentMethodTest.php @@ -27,10 +27,16 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase public function setUp() { $objectManager = new ObjectManager($this); + $contextMock = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\ContextInterface') + ->getMockForAbstractClass(); + $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor') + ->disableOriginalConstructor() + ->getMock(); + $contextMock->expects($this->any())->method('getProcessor')->willReturn($processor); $this->paymentHelper = $this->getMock('Magento\Payment\Helper\Data', [], [], '', false); $this->model = $objectManager->getObject( 'Magento\Sales\Ui\Component\Listing\Column\PaymentMethod', - ['paymentHelper' => $this->paymentHelper] + ['paymentHelper' => $this->paymentHelper, 'context' => $contextMock] ); } diff --git a/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/PriceTest.php b/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/PriceTest.php index edc68cf7ab480af81789b3b0d8aa22b6b83857c5..a3cf58f61c04bb5e4be793ae9e36fac7f06aa222 100644 --- a/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/PriceTest.php +++ b/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/PriceTest.php @@ -27,10 +27,16 @@ class PriceTest extends \PHPUnit_Framework_TestCase public function setUp() { $objectManager = new ObjectManager($this); + $contextMock = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\ContextInterface') + ->getMockForAbstractClass(); + $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor') + ->disableOriginalConstructor() + ->getMock(); + $contextMock->expects($this->any())->method('getProcessor')->willReturn($processor); $this->priceFormatterMock = $this->getMockForAbstractClass('Magento\Framework\Pricing\PriceCurrencyInterface'); $this->model = $objectManager->getObject( 'Magento\Sales\Ui\Component\Listing\Column\Price', - ['priceFormatter' => $this->priceFormatterMock] + ['priceFormatter' => $this->priceFormatterMock, 'context' => $contextMock] ); } diff --git a/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/StatusTest.php b/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/StatusTest.php index a550acf25be4188d26c1338f66c2bcb3922936bd..8ac8bc95748c5c623c8a5a1bb520450d22080c17 100644 --- a/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/StatusTest.php +++ b/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/StatusTest.php @@ -43,9 +43,15 @@ class StatusTest extends \PHPUnit_Framework_TestCase ->willReturn($collection); $objectManager = new ObjectManager($this); + $contextMock = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\ContextInterface') + ->getMockForAbstractClass(); + $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor') + ->disableOriginalConstructor() + ->getMock(); + $contextMock->expects($this->any())->method('getProcessor')->willReturn($processor); $model = $objectManager->getObject( 'Magento\Sales\Ui\Component\Listing\Column\Status', - ['collectionFactory' => $collectionFactoryMock] + ['collectionFactory' => $collectionFactoryMock, 'context' => $contextMock] ); $model->setData('name', $itemName); $dataSource = $model->prepareDataSource($dataSource); diff --git a/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/ViewActionTest.php b/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/ViewActionTest.php index 660ee18828293e22a2e0e07384e361a32eb7e74c..11ad73a8b0f3a352b5b7316c07889e15c83bf30f 100644 --- a/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/ViewActionTest.php +++ b/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/ViewActionTest.php @@ -50,11 +50,18 @@ class ViewActionTest extends \PHPUnit_Framework_TestCase $expectedUrlPath, $expectedUrlParam ) { + $contextMock = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\ContextInterface') + ->getMockForAbstractClass(); + $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor') + ->disableOriginalConstructor() + ->getMock(); + $contextMock->expects($this->any())->method('getProcessor')->willReturn($processor); $this->model = $this->objectManager->getObject( 'Magento\Sales\Ui\Component\Listing\Column\ViewAction', [ 'urlBuilder' => $this->urlBuilder, - 'data' => $data + 'data' => $data, + 'context' => $contextMock, ] ); diff --git a/app/code/Magento/Sales/etc/adminhtml/events.xml b/app/code/Magento/Sales/etc/adminhtml/events.xml index 10a8f3a457bcd9ab8b3d8edf53d03fde90730849..21e9613d51e16f7459e62de4771beba7712d94b8 100644 --- a/app/code/Magento/Sales/etc/adminhtml/events.xml +++ b/app/code/Magento/Sales/etc/adminhtml/events.xml @@ -7,18 +7,15 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="catalog_product_delete_before"> - <observer name="sales_quote_observer" instance="Magento\Sales\Model\Observer\Backend\CatalogProductQuote" method="subtractQtyFromQuotes" /> + <observer name="sales_quote_observer" instance="Magento\Sales\Observer\Backend\SubtractQtyFromQuotesObserver" /> </event> <event name="catalogrule_before_apply"> - <observer name="sales_quote_observer" instance="Magento\Sales\Model\Observer\Backend\CatalogPriceRule" method="dispatch" /> + <observer name="sales_quote_observer" instance="Magento\Sales\Observer\Backend\CatalogPriceRule" /> </event> <event name="catalogrule_after_apply"> - <observer name="sales_quote_observer" instance="Magento\Sales\Model\Observer\Backend\CatalogPriceRule" method="dispatch" /> + <observer name="sales_quote_observer" instance="Magento\Sales\Observer\Backend\CatalogPriceRule" /> </event> <event name="catalog_product_save_after"> - <observer name="sales_quote" instance="Magento\Sales\Model\Observer\Backend\CatalogProductQuote" method="catalogProductSaveAfter" /> - </event> - <event name="catalog_product_status_update"> - <observer name="sales_quote" instance="Magento\Sales\Model\Observer\Backend\CatalogProductQuote" method="catalogProductStatusUpdate" /> + <observer name="sales_quote" instance="Magento\Sales\Observer\Backend\CatalogProductSaveAfterObserver" /> </event> </config> diff --git a/app/code/Magento/Sales/etc/crontab.xml b/app/code/Magento/Sales/etc/crontab.xml index 177ac5afa4c2e6bc4389be22a3ce0ab84778e517..833f16549508e9f294c6dabf1258dce5a9272dd2 100644 --- a/app/code/Magento/Sales/etc/crontab.xml +++ b/app/code/Magento/Sales/etc/crontab.xml @@ -7,49 +7,48 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Cron:etc/crontab.xsd"> <group id="default"> - <job name="sales_clean_quotes" instance="Magento\Sales\Model\Observer\CleanExpiredQuotes" method="execute"> + <job name="sales_clean_quotes" instance="Magento\Sales\Cron\CleanExpiredQuotes" method="execute"> <schedule>0 0 * * *</schedule> </job> - <job name="sales_clean_orders" instance="Magento\Sales\Model\Observer\CleanExpiredOrders" method="execute"> + <job name="sales_clean_orders" instance="Magento\Sales\Model\CronJob\CleanExpiredOrders" method="execute"> <schedule>0 * * * *</schedule> </job> - <job name="aggregate_sales_report_order_data" instance="Magento\Sales\Model\Observer\AggregateSalesReportOrderData" method="execute"> + <job name="aggregate_sales_report_order_data" instance="Magento\Sales\Model\CronJob\AggregateSalesReportOrderData" method="execute"> <schedule>0 0 * * *</schedule> </job> - <job name="aggregate_sales_report_shipment_data" instance="Magento\Sales\Model\Observer\AggregateSalesReportShipmentData" method="execute"> + <job name="aggregate_sales_report_invoiced_data" + instance="Magento\Sales\Model\CronJob\AggregateSalesReportInvoicedData" method="execute"> <schedule>0 0 * * *</schedule> </job> - <job name="aggregate_sales_report_invoiced_data" instance="Magento\Sales\Model\Observer\AggregateSalesReportInvoicedData" method="execute"> + <job name="aggregate_sales_report_refunded_data" instance="Magento\Sales\Model\CronJob\AggregateSalesReportRefundedData" method="execute"> <schedule>0 0 * * *</schedule> </job> - <job name="aggregate_sales_report_refunded_data" instance="Magento\Sales\Model\Observer\AggregateSalesReportRefundedData" method="execute"> + <job name="aggregate_sales_report_bestsellers_data" + instance="Magento\Sales\Model\CronJob\AggregateSalesReportBestsellersData" method="execute"> <schedule>0 0 * * *</schedule> </job> - <job name="aggregate_sales_report_bestsellers_data" instance="Magento\Sales\Model\Observer\AggregateSalesReportBestsellersData" method="execute"> - <schedule>0 0 * * *</schedule> - </job> - <job name="sales_grid_order_async_insert" instance="Magento\Sales\Model\Observer\Order\IndexGrid" method="asyncInsert"> + <job name="sales_grid_order_async_insert" instance="SalesOrderIndexGridAsyncInsertCron" method="execute"> <schedule>*/1 * * * *</schedule> </job> - <job name="sales_grid_order_invoice_async_insert" instance="Magento\Sales\Model\Observer\Order\Invoice\IndexGrid" method="asyncInsert"> + <job name="sales_grid_order_invoice_async_insert" instance="SalesInvoiceIndexGridAsyncInsertCron" method="execute"> <schedule>*/1 * * * *</schedule> </job> - <job name="sales_grid_order_shipment_async_insert" instance="Magento\Sales\Model\Observer\Order\Shipment\IndexGrid" method="asyncInsert"> + <job name="sales_grid_order_shipment_async_insert" instance="SalesShipmentIndexGridAsyncInsertCron" method="execute"> <schedule>*/1 * * * *</schedule> </job> - <job name="sales_grid_order_creditmemo_async_insert" instance="Magento\Sales\Model\Observer\Order\Creditmemo\IndexGrid" method="asyncInsert"> + <job name="sales_grid_order_creditmemo_async_insert" instance="SalesCreditmemoIndexGridAsyncInsertCron" method="execute"> <schedule>*/1 * * * *</schedule> </job> - <job name="sales_send_order_emails" instance="Magento\Sales\Model\Observer\Order\SendEmails" method="execute"> + <job name="sales_send_order_emails" instance="SalesOrderSendEmailsCron" method="execute"> <schedule>*/1 * * * *</schedule> </job> - <job name="sales_send_order_invoice_emails" instance="Magento\Sales\Model\Observer\Order\Invoice\SendEmails" method="execute"> + <job name="sales_send_order_invoice_emails" instance="SalesInvoiceSendEmailsCron" method="execute"> <schedule>*/1 * * * *</schedule> </job> - <job name="sales_send_order_shipment_emails" instance="Magento\Sales\Model\Observer\Order\Shipment\SendEmails" method="execute"> + <job name="sales_send_order_shipment_emails" instance="SalesShipmentSendEmailsCron" method="execute"> <schedule>*/1 * * * *</schedule> </job> - <job name="sales_send_order_creditmemo_emails" instance="Magento\Sales\Model\Observer\Order\Creditmemo\SendEmails" method="execute"> + <job name="sales_send_order_creditmemo_emails" instance="SalesCreditmemoSendEmailsCron" method="execute"> <schedule>*/1 * * * *</schedule> </job> </group> diff --git a/app/code/Magento/Sales/etc/di.xml b/app/code/Magento/Sales/etc/di.xml index 35024a13eaafd5d13643ef44feb358f591d61c21..61c7ea30be323950d132fa2ac362148104b35929 100644 --- a/app/code/Magento/Sales/etc/di.xml +++ b/app/code/Magento/Sales/etc/di.xml @@ -140,54 +140,181 @@ </argument> </arguments> </type> - <virtualType name="Magento\Sales\Model\Observer\Order\IndexGrid" type="Magento\Sales\Model\Observer\IndexGrid"> + <virtualType name="SalesOrderIndexGridSyncRemove" type="Magento\Sales\Observer\GridSyncRemoveObserver"> <arguments> <argument name="entityGrid" xsi:type="object">Magento\Sales\Model\ResourceModel\Order\Grid</argument> </arguments> </virtualType> - <virtualType name="Magento\Sales\Model\Observer\Order\Invoice\IndexGrid" type="Magento\Sales\Model\Observer\IndexGrid"> + <virtualType name="SalesInvoiceIndexGridSyncRemove" type="Magento\Sales\Observer\GridSyncRemoveObserver"> <arguments> <argument name="entityGrid" xsi:type="object">Magento\Sales\Model\ResourceModel\Order\Invoice\Grid</argument> </arguments> </virtualType> - <virtualType name="Magento\Sales\Model\Observer\Order\Shipment\IndexGrid" type="Magento\Sales\Model\Observer\IndexGrid"> + <virtualType name="SalesShipmentIndexGridSyncRemove" type="Magento\Sales\Observer\GridSyncRemoveObserver"> <arguments> <argument name="entityGrid" xsi:type="object">ShipmentGridAggregator</argument> </arguments> </virtualType> - <virtualType name="Magento\Sales\Model\Observer\Order\Creditmemo\IndexGrid" type="Magento\Sales\Model\Observer\IndexGrid"> + <virtualType name="SalesCreditmemoIndexGridSyncRemove" type="Magento\Sales\Observer\GridSyncRemoveObserver"> <arguments> <argument name="entityGrid" xsi:type="object">CreditmemoGridAggregator</argument> </arguments> </virtualType> - <virtualType name="Magento\Sales\Model\Observer\Order\SendEmails" type="Magento\Sales\Model\Observer\SendEmails"> + + <virtualType name="SalesOrderIndexGridSyncInsert" type="Magento\Sales\Observer\GridSyncInsertObserver"> + <arguments> + <argument name="entityGrid" xsi:type="object">Magento\Sales\Model\ResourceModel\Order\Grid</argument> + </arguments> + </virtualType> + <virtualType name="SalesInvoiceIndexGridSyncInsert" type="Magento\Sales\Observer\GridSyncInsertObserver"> + <arguments> + <argument name="entityGrid" xsi:type="object">Magento\Sales\Model\ResourceModel\Order\Invoice\Grid</argument> + </arguments> + </virtualType> + <virtualType name="SalesShipmentIndexGridSyncInsert" type="Magento\Sales\Observer\GridSyncInsertObserver"> + <arguments> + <argument name="entityGrid" xsi:type="object">ShipmentGridAggregator</argument> + </arguments> + </virtualType> + <virtualType name="SalesCreditmemoIndexGridSyncInsert" type="Magento\Sales\Observer\GridSyncInsertObserver"> + <arguments> + <argument name="entityGrid" xsi:type="object">CreditmemoGridAggregator</argument> + </arguments> + </virtualType> + + <virtualType name="SalesOrderIndexGridAsyncInsert" type="Magento\Sales\Model\GridAsyncInsert"> + <arguments> + <argument name="entityGrid" xsi:type="object">Magento\Sales\Model\ResourceModel\Order\Grid</argument> + </arguments> + </virtualType> + <virtualType name="SalesInvoiceIndexGridAsyncInsert" type="Magento\Sales\Model\GridAsyncInsert"> + <arguments> + <argument name="entityGrid" xsi:type="object">Magento\Sales\Model\ResourceModel\Order\Invoice\Grid</argument> + </arguments> + </virtualType> + <virtualType name="SalesShipmentIndexGridAsyncInsert" type="Magento\Sales\Model\GridAsyncInsert"> + <arguments> + <argument name="entityGrid" xsi:type="object">ShipmentGridAggregator</argument> + </arguments> + </virtualType> + <virtualType name="SalesCreditmemoIndexGridAsyncInsert" type="Magento\Sales\Model\GridAsyncInsert"> + <arguments> + <argument name="entityGrid" xsi:type="object">CreditmemoGridAggregator</argument> + </arguments> + </virtualType> + + <virtualType name="SalesOrderIndexGridAsyncInsertObserver" type="Magento\Sales\Observer\GridAsyncInsertObserver"> + <arguments> + <argument name="asyncInsert" xsi:type="object">SalesOrderIndexGridAsyncInsert</argument> + </arguments> + </virtualType> + <virtualType name="SalesInvoiceIndexGridAsyncInsertObserver" type="Magento\Sales\Observer\GridAsyncInsertObserver"> + <arguments> + <argument name="asyncInsert" xsi:type="object">SalesInvoiceIndexGridAsyncInsert</argument> + </arguments> + </virtualType> + <virtualType name="SalesShipmentIndexGridAsyncInsertObserver" type="Magento\Sales\Observer\GridAsyncInsertObserver"> + <arguments> + <argument name="asyncInsert" xsi:type="object">SalesShipmentIndexGridAsyncInsert</argument> + </arguments> + </virtualType> + <virtualType name="SalesCreditmemoIndexGridAsyncInsertObserver" type="Magento\Sales\Observer\GridAsyncInsertObserver"> + <arguments> + <argument name="asyncInsert" xsi:type="object">SalesCreditmemoIndexGridAsyncInsert</argument> + </arguments> + </virtualType> + + <virtualType name="SalesOrderIndexGridAsyncInsertCron" type="Magento\Sales\Cron\GridAsyncInsert"> + <arguments> + <argument name="asyncInsert" xsi:type="object">SalesOrderIndexGridAsyncInsert</argument> + </arguments> + </virtualType> + <virtualType name="SalesInvoiceIndexGridAsyncInsertCron" type="Magento\Sales\Cron\GridAsyncInsert"> + <arguments> + <argument name="asyncInsert" xsi:type="object">SalesInvoiceIndexGridAsyncInsert</argument> + </arguments> + </virtualType> + <virtualType name="SalesShipmentIndexGridAsyncInsertCron" type="Magento\Sales\Cron\GridAsyncInsert"> + <arguments> + <argument name="asyncInsert" xsi:type="object">SalesShipmentIndexGridAsyncInsert</argument> + </arguments> + </virtualType> + <virtualType name="SalesCreditmemoIndexGridAsyncInsertCron" type="Magento\Sales\Cron\GridAsyncInsert"> + <arguments> + <argument name="asyncInsert" xsi:type="object">SalesCreditmemoIndexGridAsyncInsert</argument> + </arguments> + </virtualType> + + <virtualType name="SalesOrderSendEmails" type="Magento\Sales\Model\EmailSenderHandler"> <arguments> <argument name="emailSender" xsi:type="object">Magento\Sales\Model\Order\Email\Sender\OrderSender</argument> <argument name="entityResource" xsi:type="object">Magento\Sales\Model\ResourceModel\Order</argument> <argument name="entityCollection" xsi:type="object" shared="false">Magento\Sales\Model\ResourceModel\Order\Collection</argument> </arguments> </virtualType> - <virtualType name="Magento\Sales\Model\Observer\Order\Invoice\SendEmails" type="Magento\Sales\Model\Observer\SendEmails"> + <virtualType name="SalesOrderInvoiceSendEmails" type="Magento\Sales\Model\EmailSenderHandler"> <arguments> <argument name="emailSender" xsi:type="object">Magento\Sales\Model\Order\Email\Sender\InvoiceSender</argument> <argument name="entityResource" xsi:type="object">Magento\Sales\Model\ResourceModel\Order\Invoice</argument> <argument name="entityCollection" xsi:type="object" shared="false">Magento\Sales\Model\ResourceModel\Order\Invoice\Collection</argument> </arguments> </virtualType> - <virtualType name="Magento\Sales\Model\Observer\Order\Shipment\SendEmails" type="Magento\Sales\Model\Observer\SendEmails"> + <virtualType name="SalesOrderShipmentSendEmails" type="Magento\Sales\Model\EmailSenderHandler"> <arguments> <argument name="emailSender" xsi:type="object">Magento\Sales\Model\Order\Email\Sender\ShipmentSender</argument> <argument name="entityResource" xsi:type="object">Magento\Sales\Model\ResourceModel\Order\Shipment</argument> <argument name="entityCollection" xsi:type="object" shared="false">Magento\Sales\Model\ResourceModel\Order\Shipment\Collection</argument> </arguments> </virtualType> - <virtualType name="Magento\Sales\Model\Observer\Order\Creditmemo\SendEmails" type="Magento\Sales\Model\Observer\SendEmails"> + <virtualType name="SalesOrderCreditmemoSendEmails" type="Magento\Sales\Model\EmailSenderHandler"> <arguments> <argument name="emailSender" xsi:type="object">Magento\Sales\Model\Order\Email\Sender\CreditmemoSender</argument> <argument name="entityResource" xsi:type="object">Magento\Sales\Model\ResourceModel\Order\Creditmemo</argument> <argument name="entityCollection" xsi:type="object" shared="false">Magento\Sales\Model\ResourceModel\Order\Creditmemo\Collection</argument> </arguments> </virtualType> + + <virtualType name="SalesOrderSendEmailsObserver" type="Magento\Sales\Observer\Virtual\SendEmails"> + <arguments> + <argument name="emailSenderHandler" xsi:type="object">SalesOrderSendEmails</argument> + </arguments> + </virtualType> + <virtualType name="SalesOrderInvoiceSendEmailsObserver" type="Magento\Sales\Observer\Virtual\SendEmails"> + <arguments> + <argument name="emailSenderHandler" xsi:type="object">SalesOrderInvoiceSendEmails</argument> + </arguments> + </virtualType> + <virtualType name="SalesOrderShipmentSendEmailsObserver" type="Magento\Sales\Observer\Virtual\SendEmails"> + <arguments> + <argument name="emailSenderHandler" xsi:type="object">SalesOrderShipmentSendEmails</argument> + </arguments> + </virtualType> + <virtualType name="SalesOrderCreditmemoSendEmailsObserver" type="Magento\Sales\Observer\Virtual\SendEmails"> + <arguments> + <argument name="emailSenderHandler" xsi:type="object">SalesOrderCreditmemoSendEmails</argument> + </arguments> + </virtualType> + + <virtualType name="SalesOrderSendEmailsCron" type="Magento\Sales\Cron\SendEmails"> + <arguments> + <argument name="emailSenderHandler" xsi:type="object">SalesOrderSendEmails</argument> + </arguments> + </virtualType> + <virtualType name="SalesInvoiceSendEmailsCron" type="Magento\Sales\Cron\SendEmails"> + <arguments> + <argument name="emailSenderHandler" xsi:type="object">SalesOrderInvoiceSendEmails</argument> + </arguments> + </virtualType> + <virtualType name="SalesShipmentSendEmailsCron" type="Magento\Sales\Cron\SendEmails"> + <arguments> + <argument name="emailSenderHandler" xsi:type="object">SalesOrderShipmentSendEmails</argument> + </arguments> + </virtualType> + <virtualType name="SalesCreditmemoSendEmailsCron" type="Magento\Sales\Cron\SendEmails"> + <arguments> + <argument name="emailSenderHandler" xsi:type="object">SalesOrderCreditmemoSendEmails</argument> + </arguments> + </virtualType> <type name="Magento\SalesSequence\Model\EntityPool"> <arguments> <argument name="entities" xsi:type="array"> @@ -223,7 +350,7 @@ <argument name="connectionName" xsi:type="string">sales</argument> </arguments> </type> - <virtualType name="OrderRelationsComposite" type="Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite"> + <virtualType name="OrderRelationsComposite" type="Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite"> <arguments> <argument name="relationProcessors" xsi:type="array"> <item name="default" xsi:type="object">Magento\Sales\Model\ResourceModel\Order\Relation</item> @@ -235,7 +362,7 @@ <argument name="entityRelationComposite" xsi:type="object">OrderRelationsComposite</argument> </arguments> </type> - <virtualType name="InvoiceRelationsComposite" type="Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite"> + <virtualType name="InvoiceRelationsComposite" type="Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite"> <arguments> <argument name="relationProcessors" xsi:type="array"> <item name="default" xsi:type="object">Magento\Sales\Model\ResourceModel\Order\Invoice\Relation</item> @@ -247,7 +374,7 @@ <argument name="entityRelationComposite" xsi:type="object">InvoiceRelationsComposite</argument> </arguments> </type> - <virtualType name="ShipmentRelationsComposite" type="Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite"> + <virtualType name="ShipmentRelationsComposite" type="Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite"> <arguments> <argument name="relationProcessors" xsi:type="array"> <item name="default" xsi:type="object">Magento\Sales\Model\ResourceModel\Order\Shipment\Relation</item> @@ -259,7 +386,7 @@ <argument name="entityRelationComposite" xsi:type="object">ShipmentRelationsComposite</argument> </arguments> </type> - <virtualType name="CreditmemoRelationsComposite" type="Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite"> + <virtualType name="CreditmemoRelationsComposite" type="Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite"> <arguments> <argument name="relationProcessors" xsi:type="array"> <item name="default" xsi:type="object">Magento\Sales\Model\ResourceModel\Order\Creditmemo\Relation</item> diff --git a/app/code/Magento/Sales/etc/events.xml b/app/code/Magento/Sales/etc/events.xml index 3650bd768afda158e9003f93932cb3eb06d834fe..f02fcdd77a5bcfc8b4fdbce4414cb6c7f6886759 100644 --- a/app/code/Magento/Sales/etc/events.xml +++ b/app/code/Magento/Sales/etc/events.xml @@ -7,45 +7,45 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="sales_order_place_after"> - <observer name="sales_vat_request_params_order_comment" instance="Magento\Sales\Model\Observer\Frontend\Quote\AddVatRequestParamsOrderComment" method="execute" /> + <observer name="sales_vat_request_params_order_comment" instance="Magento\Sales\Observer\Frontend\AddVatRequestParamsOrderComment" /> </event> <event name="sales_order_process_relation"> - <observer name="sales_grid_order_sync_insert" instance="Magento\Sales\Model\Observer\Order\IndexGrid" method="syncInsert" /> + <observer name="sales_grid_order_sync_insert" instance="SalesOrderIndexGridSyncInsert" /> </event> <event name="sales_order_invoice_process_relation"> - <observer name="sales_grid_order_invoice_sync_insert" instance="Magento\Sales\Model\Observer\Order\Invoice\IndexGrid" method="syncInsert" /> + <observer name="sales_grid_order_invoice_sync_insert" instance="SalesInvoiceIndexGridSyncInsert" /> </event> <event name="sales_order_shipment_process_relation"> - <observer name="sales_grid_order_shipment_sync_insert" instance="Magento\Sales\Model\Observer\Order\Shipment\IndexGrid" method="syncInsert" /> + <observer name="sales_grid_order_shipment_sync_insert" instance="SalesShipmentIndexGridSyncInsert" /> </event> <event name="sales_order_creditmemo_process_relation"> - <observer name="sales_grid_order_creditmemo_sync_insert" instance="Magento\Sales\Model\Observer\Order\Creditmemo\IndexGrid" method="syncInsert" /> + <observer name="sales_grid_order_creditmemo_sync_insert" instance="SalesCreditmemoIndexGridSyncInsert" /> </event> <event name="sales_order_delete_after"> - <observer name="sales_grid_order_sync_remove" instance="Magento\Sales\Model\Observer\Order\IndexGrid" method="syncRemove" /> + <observer name="sales_grid_order_sync_remove" instance="SalesOrderIndexGridSyncRemove" /> </event> <event name="sales_order_invoice_delete_after"> - <observer name="sales_grid_order_invoice_sync_remove" instance="Magento\Sales\Model\Observer\Order\Invoice\IndexGrid" method="syncRemove" /> + <observer name="sales_grid_order_invoice_sync_remove" instance="SalesInvoiceIndexGridSyncRemove" /> </event> <event name="sales_order_shipment_delete_after"> - <observer name="sales_grid_order_shipment_sync_remove" instance="Magento\Sales\Model\Observer\Order\Shipment\IndexGrid" method="syncRemove" /> + <observer name="sales_grid_order_shipment_sync_remove" instance="SalesShipmentIndexGridSyncRemove" /> </event> <event name="sales_order_creditmemo_delete_after"> - <observer name="sales_grid_order_creditmemo_sync_remove" instance="Magento\Sales\Model\Observer\Order\Creditmemo\IndexGrid" method="syncRemove" /> + <observer name="sales_grid_order_creditmemo_sync_remove" instance="SalesCreditmemoIndexGridSyncRemove" /> </event> <event name="config_data_dev_grid_async_indexing_disabled"> - <observer name="sales_grid_order_async_insert" instance="Magento\Sales\Model\Observer\Order\IndexGrid" method="asyncInsert" /> - <observer name="sales_grid_order_invoice_async_insert" instance="Magento\Sales\Model\Observer\Order\Invoice\IndexGrid" method="asyncInsert" /> - <observer name="sales_grid_order_shipment_async_insert" instance="Magento\Sales\Model\Observer\Order\Shipment\IndexGrid" method="asyncInsert" /> - <observer name="sales_grid_order_creditmemo_async_insert" instance="Magento\Sales\Model\Observer\Order\Creditmemo\IndexGrid" method="asyncInsert" /> + <observer name="sales_grid_order_async_insert" instance="SalesOrderIndexGridAsyncInsertObserver" /> + <observer name="sales_grid_order_invoice_async_insert" instance="SalesInvoiceIndexGridAsyncInsertObserver" /> + <observer name="sales_grid_order_shipment_async_insert" instance="SalesShipmentIndexGridAsyncInsertObserver" /> + <observer name="sales_grid_order_creditmemo_async_insert" instance="SalesCreditmemoIndexGridAsyncInsertObserver" /> </event> <event name="config_data_sales_email_general_async_sending_disabled"> - <observer name="sales_send_order_emails" instance="Magento\Sales\Model\Observer\Order\SendEmails" method="execute" /> - <observer name="sales_send_order_invoice_emails" instance="Magento\Sales\Model\Observer\Order\Invoice\SendEmails" method="execute" /> - <observer name="sales_send_order_shipment_emails" instance="Magento\Sales\Model\Observer\Order\Shipment\SendEmails" method="execute" /> - <observer name="sales_send_order_creditmemo_emails" instance="Magento\Sales\Model\Observer\Order\Creditmemo\SendEmails" method="execute" /> + <observer name="sales_send_order_emails" instance="SalesOrderSendEmailsObserver" /> + <observer name="sales_send_order_invoice_emails" instance="SalesOrderInvoiceSendEmailsObserver" /> + <observer name="sales_send_order_shipment_emails" instance="SalesOrderShipmentSendEmailsObserver" /> + <observer name="sales_send_order_creditmemo_emails" instance="SalesOrderCreditmemoSendEmailsObserver" /> </event> <event name="store_add"> - <observer name="magento_sequence" instance="Magento\SalesSequence\Observer\SequenceCreatorObserver" method="execute" /> + <observer name="magento_sequence" instance="Magento\SalesSequence\Observer\SequenceCreatorObserver" /> </event> </config> diff --git a/app/code/Magento/Sales/etc/frontend/events.xml b/app/code/Magento/Sales/etc/frontend/events.xml index 85c7449ce2dd685413f9a927d7043f1a2b0cae25..19148c286ca4fc993a5757bbe3f8580fda65f526 100644 --- a/app/code/Magento/Sales/etc/frontend/events.xml +++ b/app/code/Magento/Sales/etc/frontend/events.xml @@ -7,6 +7,6 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="sales_quote_address_collect_totals_after"> - <observer name="sales_customer_validate_vat_number" instance="Magento\Sales\Model\Observer\Frontend\Quote\RestoreCustomerGroupId" method="execute" /> + <observer name="sales_customer_validate_vat_number" instance="Magento\Sales\Observer\Frontend\RestoreCustomerGroupId" /> </event> </config> diff --git a/app/code/Magento/Sales/etc/module.xml b/app/code/Magento/Sales/etc/module.xml index 6ad917d859b9b403b2c2120aeb42deff3518130d..1239c5692db8756d769be1d617d17d1f1a736ade 100644 --- a/app/code/Magento/Sales/etc/module.xml +++ b/app/code/Magento/Sales/etc/module.xml @@ -6,7 +6,7 @@ */ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"> - <module name="Magento_Sales" setup_version="2.0.0"> + <module name="Magento_Sales" setup_version="2.0.1"> <sequence> <module name="Magento_Rule"/> <module name="Magento_Catalog"/> diff --git a/app/code/Magento/Sales/etc/webapi_rest/events.xml b/app/code/Magento/Sales/etc/webapi_rest/events.xml index 85c7449ce2dd685413f9a927d7043f1a2b0cae25..19148c286ca4fc993a5757bbe3f8580fda65f526 100644 --- a/app/code/Magento/Sales/etc/webapi_rest/events.xml +++ b/app/code/Magento/Sales/etc/webapi_rest/events.xml @@ -7,6 +7,6 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="sales_quote_address_collect_totals_after"> - <observer name="sales_customer_validate_vat_number" instance="Magento\Sales\Model\Observer\Frontend\Quote\RestoreCustomerGroupId" method="execute" /> + <observer name="sales_customer_validate_vat_number" instance="Magento\Sales\Observer\Frontend\RestoreCustomerGroupId" /> </event> </config> diff --git a/app/code/Magento/Sales/etc/webapi_soap/events.xml b/app/code/Magento/Sales/etc/webapi_soap/events.xml index 85c7449ce2dd685413f9a927d7043f1a2b0cae25..19148c286ca4fc993a5757bbe3f8580fda65f526 100644 --- a/app/code/Magento/Sales/etc/webapi_soap/events.xml +++ b/app/code/Magento/Sales/etc/webapi_soap/events.xml @@ -7,6 +7,6 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="sales_quote_address_collect_totals_after"> - <observer name="sales_customer_validate_vat_number" instance="Magento\Sales\Model\Observer\Frontend\Quote\RestoreCustomerGroupId" method="execute" /> + <observer name="sales_customer_validate_vat_number" instance="Magento\Sales\Observer\Frontend\RestoreCustomerGroupId" /> </event> </config> diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_creditmemo_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_creditmemo_grid.xml index 4978e771c151aacefb017501d8a388a0a86e0400..a7f92654a75d0223583291749c5d0dbb5d8a83d7 100644 --- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_creditmemo_grid.xml +++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_creditmemo_grid.xml @@ -40,17 +40,13 @@ <bookmark name="bookmarks"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/controls/bookmarks/bookmarks</item> - <item name="displayArea" xsi:type="string">dataGridActions</item> <item name="storageConfig" xsi:type="array"> - <item name="saveUrl" xsi:type="url" path="mui/bookmark/save"/> - <item name="deleteUrl" xsi:type="url" path="mui/bookmark/delete"/> <item name="namespace" xsi:type="string">sales_order_creditmemo_grid</item> </item> </item> </argument> </bookmark> - <container name="columns_controls"> + <component name="columns_controls"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> <item name="columnsData" xsi:type="array"> @@ -60,7 +56,7 @@ <item name="displayArea" xsi:type="string">dataGridActions</item> </item> </argument> - </container> + </component> <exportButton name="export_button"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> @@ -83,8 +79,7 @@ <filters name="listing_filters"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> - <item name="displayArea" xsi:type="string">dataGridFilters</item> - <item name="dataScope" xsi:type="string">filters</item> + <item name="columnsProvider" xsi:type="string">sales_order_creditmemo_grid.sales_order_creditmemo_grid.sales_order_creditmemo_columns</item> <item name="storageConfig" xsi:type="array"> <item name="provider" xsi:type="string">sales_order_creditmemo_grid.sales_order_creditmemo_grid.listing_top.bookmarks</item> <item name="namespace" xsi:type="string">current.filters</item> @@ -92,377 +87,28 @@ <item name="childDefaults" xsi:type="array"> <item name="provider" xsi:type="string">sales_order_creditmemo_grid.sales_order_creditmemo_grid.listing_top.listing_filters</item> <item name="imports" xsi:type="array"> - <item name="visible" xsi:type="string">sales_order_creditmemo_grid.sales_order_creditmemo_grid.listing_top.bookmarks:current.columns.${ $.index }.visible</item> + <item name="visible" xsi:type="string">sales_order_creditmemo_grid.sales_order_creditmemo_grid.sales_order_creditmemo_columns:${ $.index }.visible</item> </item> </item> </item> </argument> - <filterInput name="increment_id"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">increment_id</item> - <item name="label" xsi:type="string" translate="true">Credit Memo #</item> - </item> - </argument> - </filterInput> - <filterRange name="created_at" class="Magento\Ui\Component\Filters\Type\DateRange"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">created_at</item> - <item name="label" xsi:type="string" translate="true">Created</item> - <item name="childDefaults" xsi:type="array"> - <item name="provider" xsi:type="string">sales_order_creditmemo_grid.sales_order_creditmemo_grid.listing_top.listing_filters</item> - </item> - </item> - </argument> - <filterDate name="from"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">from</item> - <item name="label" xsi:type="string" translate="true">From</item> - <item name="placeholder" xsi:type="string" translate="true">From</item> - <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item> - </item> - </argument> - </filterDate> - <filterDate name="to"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">to</item> - <item name="label" xsi:type="string" translate="true">To</item> - <item name="placeholder" xsi:type="string" translate="true">To</item> - <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item> - </item> - </argument> - </filterDate> - </filterRange> - <filterInput name="order_increment_id"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">order_increment_id</item> - <item name="label" xsi:type="string" translate="true">Order #</item> - </item> - </argument> - </filterInput> - <filterRange name="order_created_at" class="Magento\Ui\Component\Filters\Type\DateRange"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">order_created_at</item> - <item name="label" xsi:type="string" translate="true">Order Date</item> - <item name="childDefaults" xsi:type="array"> - <item name="provider" xsi:type="string">sales_order_creditmemo_grid.sales_order_creditmemo_grid.listing_top.listing_filters</item> - </item> - </item> - </argument> - <filterDate name="from"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">from</item> - <item name="label" xsi:type="string" translate="true">From</item> - <item name="placeholder" xsi:type="string" translate="true">From</item> - <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item> - </item> - </argument> - </filterDate> - <filterDate name="to"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">to</item> - <item name="label" xsi:type="string" translate="true">To</item> - <item name="placeholder" xsi:type="string" translate="true">To</item> - <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item> - </item> - </argument> - </filterDate> - </filterRange> - <filterInput name="billing_name"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">billing_name</item> - <item name="label" xsi:type="string" translate="true">Bill-to Name</item> - </item> - </argument> - </filterInput> - <filterSelect name="state"> - <argument name="optionsProvider" xsi:type="configurableObject"> - <argument name="class" xsi:type="string">Magento\Sales\Ui\Component\Listing\Column\Creditmemo\State\Options</argument> - </argument> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="caption" xsi:type="string" translate="true">Select...</item> - <item name="dataScope" xsi:type="string">state</item> - <item name="label" xsi:type="string" translate="true">Status</item> - </item> - </argument> - </filterSelect> - <filterRange name="base_grand_total"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">base_grand_total</item> - <item name="label" xsi:type="string" translate="true">Refunded</item> - <item name="childDefaults" xsi:type="array"> - <item name="provider" xsi:type="string">sales_order_creditmemo_grid.sales_order_creditmemo_grid.listing_top.listing_filters</item> - </item> - </item> - </argument> - <filterInput name="from"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">from</item> - <item name="label" xsi:type="string" translate="true">From</item> - <item name="placeholder" xsi:type="string" translate="true">From</item> - </item> - </argument> - </filterInput> - <filterInput name="to"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">to</item> - <item name="label" xsi:type="string" translate="true">To</item> - <item name="placeholder" xsi:type="string" translate="true">To</item> - </item> - </argument> - </filterInput> - </filterRange> - <filterSelect name="order_status"> - <argument name="optionsProvider" xsi:type="configurableObject"> - <argument name="class" xsi:type="string">Magento\Sales\Ui\Component\Listing\Column\Status\Options</argument> - </argument> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="caption" xsi:type="string" translate="true">Select...</item> - <item name="dataScope" xsi:type="string">order_status</item> - <item name="label" xsi:type="string" translate="true">Order Status</item> - </item> - </argument> - </filterSelect> <filterSelect name="store_id"> <argument name="optionsProvider" xsi:type="configurableObject"> <argument name="class" xsi:type="string">Magento\Store\Ui\Component\Listing\Column\Store\Options</argument> </argument> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> - <item name="caption" xsi:type="string" translate="true">Select...</item> + <item name="caption" xsi:type="string" translate="true">All Store Views</item> <item name="dataScope" xsi:type="string">store_id</item> <item name="label" xsi:type="string" translate="true">Purchased From</item> </item> </argument> </filterSelect> - <filterInput name="billing_address"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">billing_address</item> - <item name="label" xsi:type="string" translate="true">Billing Address</item> - </item> - </argument> - </filterInput> - <filterInput name="shipping_address"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">shipping_address</item> - <item name="label" xsi:type="string" translate="true">Shipping Address</item> - </item> - </argument> - </filterInput> - <filterInput name="customer_name"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">customer_name</item> - <item name="label" xsi:type="string" translate="true">Customer Name</item> - </item> - </argument> - </filterInput> - <filterInput name="customer_email"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">customer_email</item> - <item name="label" xsi:type="string" translate="true">Customer Email</item> - </item> - </argument> - </filterInput> - <filterSelect name="customer_group_id"> - <argument name="optionsProvider" xsi:type="configurableObject"> - <argument name="class" xsi:type="string">Magento\Customer\Ui\Component\Listing\Column\Group\Options</argument> - </argument> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="caption" xsi:type="string" translate="true">Select...</item> - <item name="dataScope" xsi:type="string">customer_group_id</item> - <item name="label" xsi:type="string" translate="true">Customer Group</item> - </item> - </argument> - </filterSelect> - <filterSelect name="payment_method"> - <argument name="optionsProvider" xsi:type="configurableObject"> - <argument name="class" xsi:type="string">Magento\Payment\Ui\Component\Listing\Column\Method\Options</argument> - </argument> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="caption" xsi:type="string" translate="true">Select...</item> - <item name="dataScope" xsi:type="string">payment_method</item> - <item name="label" xsi:type="string" translate="true">Payment Method</item> - </item> - </argument> - </filterSelect> - <filterInput name="shipping_information"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">shipping_information</item> - <item name="label" xsi:type="string" translate="true">Shipping Information</item> - </item> - </argument> - </filterInput> - <filterRange name="subtotal"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">subtotal</item> - <item name="label" xsi:type="string" translate="true">Subtotal</item> - <item name="childDefaults" xsi:type="array"> - <item name="provider" xsi:type="string">sales_order_creditmemo_grid.sales_order_creditmemo_grid.listing_top.listing_filters</item> - </item> - </item> - </argument> - <filterInput name="from"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">from</item> - <item name="label" xsi:type="string" translate="true">From</item> - <item name="placeholder" xsi:type="string" translate="true">From</item> - </item> - </argument> - </filterInput> - <filterInput name="to"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">to</item> - <item name="label" xsi:type="string" translate="true">To</item> - <item name="placeholder" xsi:type="string" translate="true">To</item> - </item> - </argument> - </filterInput> - </filterRange> - <filterRange name="shipping_and_handling"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">shipping_and_handling</item> - <item name="label" xsi:type="string" translate="true">Shipping and Handling</item> - <item name="childDefaults" xsi:type="array"> - <item name="provider" xsi:type="string">sales_order_creditmemo_grid.sales_order_creditmemo_grid.listing_top.listing_filters</item> - </item> - </item> - </argument> - <filterInput name="from"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">from</item> - <item name="label" xsi:type="string" translate="true">From</item> - <item name="placeholder" xsi:type="string" translate="true">From</item> - </item> - </argument> - </filterInput> - <filterInput name="to"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">to</item> - <item name="label" xsi:type="string" translate="true">To</item> - <item name="placeholder" xsi:type="string" translate="true">To</item> - </item> - </argument> - </filterInput> - </filterRange> - <filterRange name="adjustment_positive"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">adjustment_positive</item> - <item name="label" xsi:type="string" translate="true">Adjustment Refund</item> - <item name="childDefaults" xsi:type="array"> - <item name="provider" xsi:type="string">sales_order_creditmemo_grid.sales_order_creditmemo_grid.listing_top.listing_filters</item> - </item> - </item> - </argument> - <filterInput name="from"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">from</item> - <item name="label" xsi:type="string" translate="true">From</item> - <item name="placeholder" xsi:type="string" translate="true">From</item> - </item> - </argument> - </filterInput> - <filterInput name="to"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">to</item> - <item name="label" xsi:type="string" translate="true">To</item> - <item name="placeholder" xsi:type="string" translate="true">To</item> - </item> - </argument> - </filterInput> - </filterRange> - <filterRange name="adjustment_negative"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">adjustment_negative</item> - <item name="label" xsi:type="string" translate="true">Adjustment Fee</item> - <item name="childDefaults" xsi:type="array"> - <item name="provider" xsi:type="string">sales_order_creditmemo_grid.sales_order_creditmemo_grid.listing_top.listing_filters</item> - </item> - </item> - </argument> - <filterInput name="from"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">from</item> - <item name="label" xsi:type="string" translate="true">From</item> - <item name="placeholder" xsi:type="string" translate="true">From</item> - </item> - </argument> - </filterInput> - <filterInput name="to"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">to</item> - <item name="label" xsi:type="string" translate="true">To</item> - <item name="placeholder" xsi:type="string" translate="true">To</item> - </item> - </argument> - </filterInput> - </filterRange> - <filterRange name="order_base_grand_total"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">order_base_grand_total</item> - <item name="label" xsi:type="string" translate="true">Grand Total</item> - <item name="childDefaults" xsi:type="array"> - <item name="provider" xsi:type="string">sales_order_creditmemo_grid.sales_order_creditmemo_grid.listing_top.listing_filters</item> - </item> - </item> - </argument> - <filterInput name="from"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">from</item> - <item name="label" xsi:type="string" translate="true">From</item> - <item name="placeholder" xsi:type="string" translate="true">From</item> - </item> - </argument> - </filterInput> - <filterInput name="to"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">to</item> - <item name="label" xsi:type="string" translate="true">To</item> - <item name="placeholder" xsi:type="string" translate="true">To</item> - </item> - </argument> - </filterInput> - </filterRange> </filters> <massaction name="listing_massaction"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> <item name="selectProvider" xsi:type="string">sales_order_creditmemo_grid.sales_order_creditmemo_grid.sales_order_creditmemo_columns.ids</item> - <item name="displayArea" xsi:type="string">bottom</item> <item name="indexField" xsi:type="string">entity_id</item> </item> </argument> @@ -484,7 +130,6 @@ <item name="namespace" xsi:type="string">current.paging</item> </item> <item name="selectProvider" xsi:type="string">sales_order_creditmemo_grid.sales_order_creditmemo_grid.sales_order_creditmemo_columns.ids</item> - <item name="displayArea" xsi:type="string">bottom</item> </item> </argument> </paging> @@ -497,9 +142,14 @@ <item name="namespace" xsi:type="string">current</item> </item> <item name="childDefaults" xsi:type="array"> - <item name="controlVisibility" xsi:type="boolean">true</item> - <item name="actionField" xsi:type="string">actions</item> - <item name="clickAction" xsi:type="string">view</item> + <item name="fieldAction" xsi:type="array"> + <item name="provider" xsi:type="string">sales_order_creditmemo_grid.sales_order_creditmemo_grid.sales_order_creditmemo_columns.actions</item> + <item name="target" xsi:type="string">applyAction</item> + <item name="params" xsi:type="array"> + <item name="0" xsi:type="string">view</item> + <item name="1" xsi:type="string">${ $.$data.rowIndex }</item> + </item> + </item> <item name="storageConfig" xsi:type="array"> <item name="provider" xsi:type="string">sales_order_creditmemo_grid.sales_order_creditmemo_grid.listing_top.bookmarks</item> <item name="root" xsi:type="string">columns.${ $.index }</item> @@ -508,303 +158,222 @@ </item> </item> </argument> - <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column"> + <selectionsColumn name="ids"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item> - </item> <item name="config" xsi:type="array"> - <item name="draggable" xsi:type="boolean">false</item> <item name="indexField" xsi:type="string">entity_id</item> - <item name="controlVisibility" xsi:type="boolean">false</item> </item> </argument> - </column> + </selectionsColumn> <column name="increment_id"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="filter" xsi:type="string">text</item> <item name="label" xsi:type="string" translate="true">Credit Memo</item> </item> </argument> </column> <column name="created_at"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">dateRange</item> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item> <item name="dataType" xsi:type="string">date</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Created</item> </item> </argument> </column> <column name="order_increment_id"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="filter" xsi:type="string">text</item> <item name="label" xsi:type="string" translate="true">Order</item> </item> </argument> </column> <column name="order_created_at"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">dateRange</item> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item> <item name="dataType" xsi:type="string">date</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Order Date</item> </item> </argument> </column> <column name="billing_name"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="filter" xsi:type="string">text</item> <item name="label" xsi:type="string" translate="true">Bill-to Name</item> </item> </argument> </column> - <column name="state" class="Magento\Sales\Ui\Component\Listing\Column\Creditmemo\State"> + <column name="state"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> - </item> + <item name="options" xsi:type="object">Magento\Sales\Ui\Component\Listing\Column\Creditmemo\State\Options</item> <item name="config" xsi:type="array"> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="filter" xsi:type="string">select</item> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> + <item name="dataType" xsi:type="string">select</item> <item name="label" xsi:type="string" translate="true">Status</item> </item> </argument> </column> <column name="base_grand_total" class="Magento\Sales\Ui\Component\Listing\Column\Price"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="filter" xsi:type="string">textRange</item> <item name="label" xsi:type="string" translate="true">Refunded</item> </item> </argument> </column> - <column name="order_status" class="Magento\Sales\Ui\Component\Listing\Column\Status"> + <column name="order_status"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> - </item> + <item name="options" xsi:type="object">Magento\Sales\Ui\Component\Listing\Column\Status\Options</item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">select</item> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="dataType" xsi:type="string">select</item> <item name="label" xsi:type="string" translate="true">Order Status</item> </item> </argument> </column> <column name="store_id" class="Magento\Store\Ui\Component\Listing\Column\Store"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item> <item name="visible" xsi:type="boolean">false</item> <item name="sortable" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Purchased From</item> </item> </argument> </column> <column name="billing_address" class="Magento\Sales\Ui\Component\Listing\Column\Address"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">text</item> <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Billing Address</item> </item> </argument> </column> <column name="shipping_address" class="Magento\Sales\Ui\Component\Listing\Column\Address"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">text</item> <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Shipping Address</item> </item> </argument> </column> <column name="customer_name"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">text</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Customer Name</item> </item> </argument> </column> <column name="customer_email"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">text</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Email</item> </item> </argument> </column> - <column name="customer_group_id" class="Magento\Sales\Ui\Component\Listing\Column\CustomerGroup"> + <column name="customer_group_id"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> + <item name="options" xsi:type="object">Magento\Customer\Ui\Component\Listing\Column\Group\Options</item> <item name="config" xsi:type="array"> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> + <item name="filter" xsi:type="string">select</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="dataType" xsi:type="string">select</item> <item name="label" xsi:type="string" translate="true">Customer Group</item> </item> </argument> </column> - <column name="payment_method" class="Magento\Sales\Ui\Component\Listing\Column\PaymentMethod"> + <column name="payment_method"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> + <item name="options" xsi:type="object">Magento\Payment\Ui\Component\Listing\Column\Method\Options</item> <item name="config" xsi:type="array"> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> + <item name="filter" xsi:type="string">select</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="dataType" xsi:type="string">select</item> <item name="label" xsi:type="string" translate="true">Payment Method</item> </item> </argument> </column> <column name="shipping_information"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">text</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Shipping Information</item> </item> </argument> </column> <column name="subtotal" class="Magento\Sales\Ui\Component\Listing\Column\Price"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">textRange</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Subtotal</item> </item> </argument> </column> <column name="shipping_and_handling" class="Magento\Sales\Ui\Component\Listing\Column\Price"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">textRange</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Shipping & Handling</item> </item> </argument> </column> <column name="adjustment_positive" class="Magento\Sales\Ui\Component\Listing\Column\Price"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">textRange</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Adjustment Refund</item> </item> </argument> </column> <column name="adjustment_negative" class="Magento\Sales\Ui\Component\Listing\Column\Price"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">textRange</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Adjustment Fee</item> </item> </argument> </column> <column name="order_base_grand_total" class="Magento\Sales\Ui\Component\Listing\Column\Price"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">textRange</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Grand Total</item> </item> </argument> </column> - <column name="actions" class="Magento\Sales\Ui\Component\Listing\Column\ViewAction"> + <actionsColumn name="actions" class="Magento\Sales\Ui\Component\Listing\Column\ViewAction"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> - <item name="draggable" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">actions</item> <item name="indexField" xsi:type="string">entity_id</item> - <item name="align" xsi:type="string">left</item> - <item name="label" xsi:type="string" translate="true">Action</item> - <item name="data_type" xsi:type="string">actions</item> - <item name="filterable" xsi:type="boolean">false</item> - <item name="sortable" xsi:type="boolean">false</item> <item name="viewUrlPath" xsi:type="string">sales/creditmemo/view</item> <item name="urlEntityParamName" xsi:type="string">creditmemo_id</item> </item> </argument> - </column> + </actionsColumn> </columns> </listing> diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_grid.xml index 7a1af6d531cc547532c7c758599a398ccfb18421..6e57da8d260845951285c1c6cedc3b2f6a0f003a 100644 --- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_grid.xml +++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_grid.xml @@ -48,17 +48,13 @@ <bookmark name="bookmarks"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/controls/bookmarks/bookmarks</item> - <item name="displayArea" xsi:type="string">dataGridActions</item> <item name="storageConfig" xsi:type="array"> - <item name="saveUrl" xsi:type="url" path="mui/bookmark/save"/> - <item name="deleteUrl" xsi:type="url" path="mui/bookmark/delete"/> <item name="namespace" xsi:type="string">sales_order_grid</item> </item> </item> </argument> </bookmark> - <container name="columns_controls"> + <component name="columns_controls"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> <item name="columnsData" xsi:type="array"> @@ -68,7 +64,7 @@ <item name="displayArea" xsi:type="string">dataGridActions</item> </item> </argument> - </container> + </component> <exportButton name="export_button"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> @@ -91,8 +87,7 @@ <filters name="listing_filters"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> - <item name="displayArea" xsi:type="string">dataGridFilters</item> - <item name="dataScope" xsi:type="string">filters</item> + <item name="columnsProvider" xsi:type="string">sales_order_grid.sales_order_grid.sales_order_columns</item> <item name="storageConfig" xsi:type="array"> <item name="provider" xsi:type="string">sales_order_grid.sales_order_grid.listing_top.bookmarks</item> <item name="namespace" xsi:type="string">current.filters</item> @@ -100,305 +95,28 @@ <item name="childDefaults" xsi:type="array"> <item name="provider" xsi:type="string">sales_order_grid.sales_order_grid.listing_top.listing_filters</item> <item name="imports" xsi:type="array"> - <item name="visible" xsi:type="string">sales_order_grid.sales_order_grid.listing_top.bookmarks:current.columns.${ $.index }.visible</item> + <item name="visible" xsi:type="string">sales_order_grid.sales_order_grid.sales_order_columns.${ $.index }:visible</item> </item> </item> </item> </argument> - <filterInput name="increment_id"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">increment_id</item> - <item name="label" xsi:type="string" translate="true">ID</item> - </item> - </argument> - </filterInput> <filterSelect name="store_id"> <argument name="optionsProvider" xsi:type="configurableObject"> <argument name="class" xsi:type="string">Magento\Store\Ui\Component\Listing\Column\Store\Options</argument> </argument> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> - <item name="caption" xsi:type="string" translate="true">Select...</item> + <item name="caption" xsi:type="string" translate="true">All Store Views</item> <item name="dataScope" xsi:type="string">store_id</item> <item name="label" xsi:type="string" translate="true">Purchase Point</item> </item> </argument> </filterSelect> - <filterRange name="created_at" class="Magento\Ui\Component\Filters\Type\DateRange"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">created_at</item> - <item name="label" xsi:type="string" translate="true">Purchase Date</item> - <item name="childDefaults" xsi:type="array"> - <item name="provider" xsi:type="string">sales_order_grid.sales_order_grid.listing_top.listing_filters</item> - </item> - </item> - </argument> - <filterDate name="from"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">from</item> - <item name="label" xsi:type="string" translate="true">From</item> - <item name="placeholder" xsi:type="string" translate="true">From</item> - <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item> - </item> - </argument> - </filterDate> - <filterDate name="to"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">to</item> - <item name="label" xsi:type="string" translate="true">To</item> - <item name="placeholder" xsi:type="string" translate="true">To</item> - <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item> - </item> - </argument> - </filterDate> - </filterRange> - <filterInput name="billing_name"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">billing_name</item> - <item name="label" xsi:type="string" translate="true">Bill-to Name</item> - </item> - </argument> - </filterInput> - <filterInput name="shipping_name"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">shipping_name</item> - <item name="label" xsi:type="string" translate="true">Ship-to Name</item> - </item> - </argument> - </filterInput> - <filterRange name="base_grand_total"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">base_grand_total</item> - <item name="label" xsi:type="string" translate="true">Grand Total (Base)</item> - <item name="childDefaults" xsi:type="array"> - <item name="provider" xsi:type="string">sales_order_grid.sales_order_grid.listing_top.listing_filters</item> - </item> - </item> - </argument> - <filterInput name="from"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">from</item> - <item name="label" xsi:type="string" translate="true">From</item> - <item name="placeholder" xsi:type="string" translate="true">From</item> - </item> - </argument> - </filterInput> - <filterInput name="to"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">to</item> - <item name="label" xsi:type="string" translate="true">To</item> - <item name="placeholder" xsi:type="string" translate="true">To</item> - </item> - </argument> - </filterInput> - </filterRange> - <filterRange name="grand_total"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">grand_total</item> - <item name="label" xsi:type="string" translate="true">Grand Total (Purchased)</item> - <item name="childDefaults" xsi:type="array"> - <item name="provider" xsi:type="string">sales_order_grid.sales_order_grid.listing_top.listing_filters</item> - </item> - </item> - </argument> - <filterInput name="from"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">from</item> - <item name="label" xsi:type="string" translate="true">From</item> - <item name="placeholder" xsi:type="string" translate="true">From</item> - </item> - </argument> - </filterInput> - <filterInput name="to"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">to</item> - <item name="label" xsi:type="string" translate="true">To</item> - <item name="placeholder" xsi:type="string" translate="true">To</item> - </item> - </argument> - </filterInput> - </filterRange> - <filterSelect name="status"> - <argument name="optionsProvider" xsi:type="configurableObject"> - <argument name="class" xsi:type="string">Magento\Sales\Ui\Component\Listing\Column\Status\Options</argument> - </argument> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="caption" xsi:type="string" translate="true">Select...</item> - <item name="dataScope" xsi:type="string">status</item> - <item name="label" xsi:type="string" translate="true">Status</item> - </item> - </argument> - </filterSelect> - <filterInput name="billing_address"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">billing_address</item> - <item name="label" xsi:type="string" translate="true">Bill-to Name</item> - </item> - </argument> - </filterInput> - <filterInput name="shipping_address"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">shipping_address</item> - <item name="label" xsi:type="string" translate="true">Shipping Address</item> - </item> - </argument> - </filterInput> - <filterInput name="shipping_information"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">shipping_information</item> - <item name="label" xsi:type="string" translate="true">Shipping Information</item> - </item> - </argument> - </filterInput> - <filterInput name="customer_email"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">customer_email</item> - <item name="label" xsi:type="string" translate="true">Customer Email</item> - </item> - </argument> - </filterInput> - <filterSelect name="customer_group"> - <argument name="optionsProvider" xsi:type="configurableObject"> - <argument name="class" xsi:type="string">Magento\Customer\Ui\Component\Listing\Column\Group\Options</argument> - </argument> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="caption" xsi:type="string" translate="true">Select...</item> - <item name="dataScope" xsi:type="string">customer_group</item> - <item name="label" xsi:type="string" translate="true">Customer Group</item> - </item> - </argument> - </filterSelect> - <filterRange name="subtotal"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">subtotal</item> - <item name="label" xsi:type="string" translate="true">Subtotal</item> - <item name="childDefaults" xsi:type="array"> - <item name="provider" xsi:type="string">sales_order_grid.sales_order_grid.listing_top.listing_filters</item> - </item> - </item> - </argument> - <filterInput name="from"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">from</item> - <item name="label" xsi:type="string" translate="true">From</item> - <item name="placeholder" xsi:type="string" translate="true">From</item> - </item> - </argument> - </filterInput> - <filterInput name="to"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">to</item> - <item name="label" xsi:type="string" translate="true">To</item> - <item name="placeholder" xsi:type="string" translate="true">To</item> - </item> - </argument> - </filterInput> - </filterRange> - <filterRange name="shipping_and_handling"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">shipping_and_handling</item> - <item name="label" xsi:type="string" translate="true">Shipping and Handling</item> - <item name="childDefaults" xsi:type="array"> - <item name="provider" xsi:type="string">sales_order_grid.sales_order_grid.listing_top.listing_filters</item> - </item> - </item> - </argument> - <filterInput name="from"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">from</item> - <item name="label" xsi:type="string" translate="true">From</item> - <item name="placeholder" xsi:type="string" translate="true">From</item> - </item> - </argument> - </filterInput> - <filterInput name="to"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">to</item> - <item name="label" xsi:type="string" translate="true">To</item> - <item name="placeholder" xsi:type="string" translate="true">To</item> - </item> - </argument> - </filterInput> - </filterRange> - <filterInput name="customer_name"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">customer_name</item> - <item name="label" xsi:type="string" translate="true">Customer Name</item> - </item> - </argument> - </filterInput> - <filterSelect name="payment_method"> - <argument name="optionsProvider" xsi:type="configurableObject"> - <argument name="class" xsi:type="string">Magento\Payment\Ui\Component\Listing\Column\Method\Options</argument> - </argument> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="caption" xsi:type="string" translate="true">Select...</item> - <item name="dataScope" xsi:type="string">payment_method</item> - <item name="label" xsi:type="string" translate="true">Payment Method</item> - </item> - </argument> - </filterSelect> - <filterRange name="total_refunded"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">total_refunded</item> - <item name="label" xsi:type="string" translate="true">Total Refunded</item> - <item name="childDefaults" xsi:type="array"> - <item name="provider" xsi:type="string">sales_order_grid.sales_order_grid.listing_top.listing_filters</item> - </item> - </item> - </argument> - <filterInput name="from"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">from</item> - <item name="label" xsi:type="string" translate="true">From</item> - <item name="placeholder" xsi:type="string" translate="true">From</item> - </item> - </argument> - </filterInput> - <filterInput name="to"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">to</item> - <item name="label" xsi:type="string" translate="true">To</item> - <item name="placeholder" xsi:type="string" translate="true">To</item> - </item> - </argument> - </filterInput> - </filterRange> </filters> <massaction name="listing_massaction"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> <item name="selectProvider" xsi:type="string">sales_order_grid.sales_order_grid.sales_order_columns.ids</item> - <item name="displayArea" xsi:type="string">bottom</item> <item name="indexField" xsi:type="string">entity_id</item> </item> </argument> @@ -483,7 +201,6 @@ <item name="namespace" xsi:type="string">current.paging</item> </item> <item name="selectProvider" xsi:type="string">sales_order_grid.sales_order_grid.sales_order_columns.ids</item> - <item name="displayArea" xsi:type="string">bottom</item> </item> </argument> </paging> @@ -496,9 +213,14 @@ <item name="namespace" xsi:type="string">current</item> </item> <item name="childDefaults" xsi:type="array"> - <item name="controlVisibility" xsi:type="boolean">true</item> - <item name="actionField" xsi:type="string">actions</item> - <item name="clickAction" xsi:type="string">view</item> + <item name="fieldAction" xsi:type="array"> + <item name="provider" xsi:type="string">sales_order_grid.sales_order_grid.sales_order_columns.actions</item> + <item name="target" xsi:type="string">applyAction</item> + <item name="params" xsi:type="array"> + <item name="0" xsi:type="string">view</item> + <item name="1" xsi:type="string">${ $.$data.rowIndex }</item> + </item> + </item> <item name="storageConfig" xsi:type="array"> <item name="provider" xsi:type="string">sales_order_grid.sales_order_grid.listing_top.bookmarks</item> <item name="root" xsi:type="string">columns.${ $.index }</item> @@ -507,264 +229,190 @@ </item> </item> </argument> - <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column"> + <selectionsColumn name="ids"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item> - </item> <item name="config" xsi:type="array"> - <item name="draggable" xsi:type="boolean">false</item> <item name="indexField" xsi:type="string">entity_id</item> - <item name="controlVisibility" xsi:type="boolean">false</item> </item> </argument> - </column> + </selectionsColumn> <column name="increment_id"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> - <item name="dataType" xsi:type="string">text</item> + <item name="filter" xsi:type="string">text</item> <item name="sorting" xsi:type="string">desc</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">ID</item> </item> </argument> </column> <column name="store_id" class="Magento\Store\Ui\Component\Listing\Column\Store"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item> <item name="sortable" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Purchase Point</item> </item> </argument> </column> <column name="created_at"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">dateRange</item> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item> <item name="dataType" xsi:type="string">date</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Purchase Date</item> </item> </argument> </column> <column name="billing_name"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="filter" xsi:type="string">text</item> <item name="label" xsi:type="string" translate="true">Bill-to Name</item> </item> </argument> </column> <column name="shipping_name"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="filter" xsi:type="string">text</item> <item name="label" xsi:type="string" translate="true">Ship-to Name</item> </item> </argument> </column> <column name="base_grand_total" class="Magento\Sales\Ui\Component\Listing\Column\Price"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="filter" xsi:type="string">textRange</item> <item name="label" xsi:type="string" translate="true">Grand Total (Base)</item> </item> </argument> </column> <column name="grand_total" class="Magento\Sales\Ui\Component\Listing\Column\Price"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="filter" xsi:type="string">textRange</item> <item name="label" xsi:type="string" translate="true">Grand Total (Purchased)</item> </item> </argument> </column> - <column name="status" class="Magento\Sales\Ui\Component\Listing\Column\Status"> + <column name="status"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> - </item> + <item name="options" xsi:type="object">Magento\Sales\Ui\Component\Listing\Column\Status\Options</item> <item name="config" xsi:type="array"> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="filter" xsi:type="string">select</item> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> + <item name="dataType" xsi:type="string">select</item> <item name="label" xsi:type="string" translate="true">Status</item> </item> </argument> </column> <column name="billing_address" class="Magento\Sales\Ui\Component\Listing\Column\Address"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">text</item> <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Billing Address</item> </item> </argument> </column> <column name="shipping_address" class="Magento\Sales\Ui\Component\Listing\Column\Address"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">text</item> <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Shipping Address</item> </item> </argument> </column> <column name="shipping_information"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">text</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Shipping Information</item> </item> </argument> </column> <column name="customer_email"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">text</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Customer Email</item> </item> </argument> </column> - <column name="customer_group" class="Magento\Sales\Ui\Component\Listing\Column\CustomerGroup"> + <column name="customer_group"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> + <item name="options" xsi:type="object">Magento\Customer\Ui\Component\Listing\Column\Group\Options</item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">select</item> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="dataType" xsi:type="string">select</item> <item name="label" xsi:type="string" translate="true">Customer Group</item> </item> </argument> </column> <column name="subtotal" class="Magento\Sales\Ui\Component\Listing\Column\Price"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">textRange</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Subtotal</item> </item> </argument> </column> <column name="shipping_and_handling" class="Magento\Sales\Ui\Component\Listing\Column\Price"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">textRange</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Shipping and Handling</item> </item> </argument> </column> <column name="customer_name"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">text</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Customer Name</item> </item> </argument> </column> - <column name="payment_method" class="Magento\Sales\Ui\Component\Listing\Column\PaymentMethod"> + <column name="payment_method"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> + <item name="options" xsi:type="object">Magento\Payment\Ui\Component\Listing\Column\Method\Options</item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">select</item> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="dataType" xsi:type="string">select</item> <item name="label" xsi:type="string" translate="true">Payment Method</item> </item> </argument> </column> <column name="total_refunded" class="Magento\Sales\Ui\Component\Listing\Column\Price"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">textRange</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Total Refunded</item> </item> </argument> </column> - <column name="actions" class="Magento\Sales\Ui\Component\Listing\Column\ViewAction"> + <actionsColumn name="actions" class="Magento\Sales\Ui\Component\Listing\Column\ViewAction"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> - <item name="draggable" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">actions</item> <item name="indexField" xsi:type="string">entity_id</item> - <item name="align" xsi:type="string">left</item> - <item name="label" xsi:type="string" translate="true">Action</item> - <item name="data_type" xsi:type="string">actions</item> - <item name="filterable" xsi:type="boolean">false</item> - <item name="sortable" xsi:type="boolean">false</item> <item name="viewUrlPath" xsi:type="string">sales/order/view</item> <item name="urlEntityParamName" xsi:type="string">order_id</item> </item> </argument> - </column> + </actionsColumn> </columns> </listing> diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_invoice_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_invoice_grid.xml index a64f53bf8a8054d456bc104da68334e5ef19b902..2022ef7f1d5847b84dafdf368c065b0672acfc8c 100644 --- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_invoice_grid.xml +++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_invoice_grid.xml @@ -40,17 +40,13 @@ <bookmark name="bookmarks"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/controls/bookmarks/bookmarks</item> - <item name="displayArea" xsi:type="string">dataGridActions</item> <item name="storageConfig" xsi:type="array"> - <item name="saveUrl" xsi:type="url" path="mui/bookmark/save"/> - <item name="deleteUrl" xsi:type="url" path="mui/bookmark/delete"/> <item name="namespace" xsi:type="string">sales_order_invoice_grid</item> </item> </item> </argument> </bookmark> - <container name="columns_controls"> + <component name="columns_controls"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> <item name="columnsData" xsi:type="array"> @@ -60,7 +56,7 @@ <item name="displayArea" xsi:type="string">dataGridActions</item> </item> </argument> - </container> + </component> <exportButton name="export_button"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> @@ -83,8 +79,7 @@ <filters name="listing_filters"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> - <item name="displayArea" xsi:type="string">dataGridFilters</item> - <item name="dataScope" xsi:type="string">filters</item> + <item name="columnsProvider" xsi:type="string">sales_order_invoice_grid.sales_order_invoice_grid.sales_order_invoice_columns</item> <item name="storageConfig" xsi:type="array"> <item name="provider" xsi:type="string">sales_order_invoice_grid.sales_order_invoice_grid.listing_top.bookmarks</item> <item name="namespace" xsi:type="string">current.filters</item> @@ -92,278 +87,28 @@ <item name="childDefaults" xsi:type="array"> <item name="provider" xsi:type="string">sales_order_invoice_grid.sales_order_invoice_grid.listing_top.listing_filters</item> <item name="imports" xsi:type="array"> - <item name="visible" xsi:type="string">sales_order_invoice_grid.sales_order_invoice_grid.listing_top.bookmarks:current.columns.${ $.index }.visible</item> + <item name="visible" xsi:type="string">sales_order_invoice_grid.sales_order_invoice_grid.sales_order_invoice_columns.${ $.index }:visible</item> </item> </item> </item> </argument> - <filterInput name="increment_id"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">increment_id</item> - <item name="label" xsi:type="string" translate="true">Invoice #</item> - </item> - </argument> - </filterInput> - <filterRange name="created_at" class="Magento\Ui\Component\Filters\Type\DateRange"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">created_at</item> - <item name="label" xsi:type="string" translate="true">Invoice Date</item> - <item name="childDefaults" xsi:type="array"> - <item name="provider" xsi:type="string">sales_order_invoice_grid.sales_order_invoice_grid.listing_top.listing_filters</item> - </item> - </item> - </argument> - <filterDate name="from"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">from</item> - <item name="label" xsi:type="string" translate="true">From</item> - <item name="placeholder" xsi:type="string" translate="true">From</item> - <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item> - </item> - </argument> - </filterDate> - <filterDate name="to"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">to</item> - <item name="label" xsi:type="string" translate="true">To</item> - <item name="placeholder" xsi:type="string" translate="true">To</item> - <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item> - </item> - </argument> - </filterDate> - </filterRange> - <filterInput name="order_increment_id"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">order_increment_id</item> - <item name="label" xsi:type="string" translate="true">Order #</item> - </item> - </argument> - </filterInput> - <filterRange name="order_created_at" class="Magento\Ui\Component\Filters\Type\DateRange"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">order_created_at</item> - <item name="label" xsi:type="string" translate="true">Order Date</item> - <item name="childDefaults" xsi:type="array"> - <item name="provider" xsi:type="string">sales_order_invoice_grid.sales_order_invoice_grid.listing_top.listing_filters</item> - </item> - </item> - </argument> - <filterDate name="from"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">from</item> - <item name="label" xsi:type="string" translate="true">From</item> - <item name="placeholder" xsi:type="string" translate="true">From</item> - <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item> - </item> - </argument> - </filterDate> - <filterDate name="to"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">to</item> - <item name="label" xsi:type="string" translate="true">To</item> - <item name="placeholder" xsi:type="string" translate="true">To</item> - <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item> - </item> - </argument> - </filterDate> - </filterRange> - <filterInput name="billing_name"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">billing_name</item> - <item name="label" xsi:type="string" translate="true">Bill-to Name</item> - </item> - </argument> - </filterInput> - <filterSelect name="state"> - <argument name="optionsProvider" xsi:type="configurableObject"> - <argument name="class" xsi:type="string">Magento\Sales\Ui\Component\Listing\Column\Invoice\State\Options</argument> - </argument> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="caption" xsi:type="string" translate="true">Select...</item> - <item name="dataScope" xsi:type="string">state</item> - <item name="label" xsi:type="string" translate="true">Status</item> - </item> - </argument> - </filterSelect> <filterSelect name="store_id"> <argument name="optionsProvider" xsi:type="configurableObject"> <argument name="class" xsi:type="string">Magento\Store\Ui\Component\Listing\Column\Store\Options</argument> </argument> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> - <item name="caption" xsi:type="string" translate="true">Select...</item> + <item name="caption" xsi:type="string" translate="true">All Store Views</item> <item name="dataScope" xsi:type="string">store_id</item> <item name="label" xsi:type="string" translate="true">Purchased From</item> </item> </argument> </filterSelect> - <filterInput name="billing_address"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">billing_address</item> - <item name="label" xsi:type="string" translate="true">Billing Address</item> - </item> - </argument> - </filterInput> - <filterInput name="shipping_address"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">shipping_address</item> - <item name="label" xsi:type="string" translate="true">Shipping Address</item> - </item> - </argument> - </filterInput> - <filterInput name="customer_name"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">customer_name</item> - <item name="label" xsi:type="string" translate="true">Customer Name</item> - </item> - </argument> - </filterInput> - <filterInput name="customer_email"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">customer_email</item> - <item name="label" xsi:type="string" translate="true">Customer Email</item> - </item> - </argument> - </filterInput> - <filterSelect name="customer_group_id"> - <argument name="optionsProvider" xsi:type="configurableObject"> - <argument name="class" xsi:type="string">Magento\Customer\Ui\Component\Listing\Column\Group\Options</argument> - </argument> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="caption" xsi:type="string" translate="true">Select...</item> - <item name="dataScope" xsi:type="string">customer_group_id</item> - <item name="label" xsi:type="string" translate="true">Customer Group</item> - </item> - </argument> - </filterSelect> - <filterSelect name="payment_method"> - <argument name="optionsProvider" xsi:type="configurableObject"> - <argument name="class" xsi:type="string">Magento\Payment\Ui\Component\Listing\Column\Method\Options</argument> - </argument> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="caption" xsi:type="string" translate="true">Select...</item> - <item name="dataScope" xsi:type="string">payment_method</item> - <item name="label" xsi:type="string" translate="true">Payment Method</item> - </item> - </argument> - </filterSelect> - <filterInput name="shipping_information"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">shipping_information</item> - <item name="label" xsi:type="string" translate="true">Shipping Information</item> - </item> - </argument> - </filterInput> - <filterRange name="subtotal"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">subtotal</item> - <item name="label" xsi:type="string" translate="true">Subtotal</item> - <item name="childDefaults" xsi:type="array"> - <item name="provider" xsi:type="string">sales_order_invoice_grid.sales_order_invoice_grid.listing_top.listing_filters</item> - </item> - </item> - </argument> - <filterInput name="from"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">from</item> - <item name="label" xsi:type="string" translate="true">From</item> - <item name="placeholder" xsi:type="string" translate="true">From</item> - </item> - </argument> - </filterInput> - <filterInput name="to"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">to</item> - <item name="label" xsi:type="string" translate="true">To</item> - <item name="placeholder" xsi:type="string" translate="true">To</item> - </item> - </argument> - </filterInput> - </filterRange> - <filterRange name="shipping_and_handling"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">shipping_and_handling</item> - <item name="label" xsi:type="string" translate="true">Shipping and Handling</item> - <item name="childDefaults" xsi:type="array"> - <item name="provider" xsi:type="string">sales_order_invoice_grid.sales_order_invoice_grid.listing_top.listing_filters</item> - </item> - </item> - </argument> - <filterInput name="from"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">from</item> - <item name="label" xsi:type="string" translate="true">From</item> - <item name="placeholder" xsi:type="string" translate="true">From</item> - </item> - </argument> - </filterInput> - <filterInput name="to"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">to</item> - <item name="label" xsi:type="string" translate="true">To</item> - <item name="placeholder" xsi:type="string" translate="true">To</item> - </item> - </argument> - </filterInput> - </filterRange> - <filterRange name="grand_total"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">grand_total</item> - <item name="label" xsi:type="string" translate="true">Grand Total</item> - <item name="childDefaults" xsi:type="array"> - <item name="provider" xsi:type="string">sales_order_invoice_grid.sales_order_invoice_grid.listing_top.listing_filters</item> - </item> - </item> - </argument> - <filterInput name="from"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">from</item> - <item name="label" xsi:type="string" translate="true">From</item> - <item name="placeholder" xsi:type="string" translate="true">From</item> - </item> - </argument> - </filterInput> - <filterInput name="to"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">to</item> - <item name="label" xsi:type="string" translate="true">To</item> - <item name="placeholder" xsi:type="string" translate="true">To</item> - </item> - </argument> - </filterInput> - </filterRange> </filters> <massaction name="listing_massaction"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> <item name="selectProvider" xsi:type="string">sales_order_invoice_grid.sales_order_invoice_grid.sales_order_invoice_columns.ids</item> - <item name="displayArea" xsi:type="string">bottom</item> <item name="indexField" xsi:type="string">entity_id</item> </item> </argument> @@ -385,7 +130,6 @@ <item name="namespace" xsi:type="string">current.paging</item> </item> <item name="selectProvider" xsi:type="string">sales_order_invoice_grid.sales_order_invoice_grid.sales_order_invoice_columns.ids</item> - <item name="displayArea" xsi:type="string">bottom</item> </item> </argument> </paging> @@ -398,9 +142,14 @@ <item name="namespace" xsi:type="string">current</item> </item> <item name="childDefaults" xsi:type="array"> - <item name="controlVisibility" xsi:type="boolean">true</item> - <item name="actionField" xsi:type="string">actions</item> - <item name="clickAction" xsi:type="string">view</item> + <item name="fieldAction" xsi:type="array"> + <item name="provider" xsi:type="string">sales_order_invoice_grid.sales_order_invoice_grid.sales_order_invoice_columns.actions</item> + <item name="target" xsi:type="string">applyAction</item> + <item name="params" xsi:type="array"> + <item name="0" xsi:type="string">view</item> + <item name="1" xsi:type="string">${ $.$data.rowIndex }</item> + </item> + </item> <item name="storageConfig" xsi:type="array"> <item name="provider" xsi:type="string">sales_order_invoice_grid.sales_order_invoice_grid.listing_top.bookmarks</item> <item name="root" xsi:type="string">columns.${ $.index }</item> @@ -409,253 +158,183 @@ </item> </item> </argument> - <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column"> + <selectionsColumn name="ids"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item> - </item> <item name="config" xsi:type="array"> - <item name="draggable" xsi:type="boolean">false</item> <item name="indexField" xsi:type="string">entity_id</item> - <item name="controlVisibility" xsi:type="boolean">false</item> </item> </argument> - </column> + </selectionsColumn> <column name="increment_id"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> - <item name="dataType" xsi:type="string">text</item> + <item name="filter" xsi:type="string">text</item> <item name="sorting" xsi:type="string">asc</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Invoice</item> </item> </argument> </column> <column name="created_at"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">dateRange</item> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item> <item name="dataType" xsi:type="string">date</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Invoice Date</item> </item> </argument> </column> <column name="order_increment_id"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> - <item name="dataType" xsi:type="string">text</item> - <item name="sorting" xsi:type="string">asc</item> - <item name="align" xsi:type="string">left</item> + <item name="filter" xsi:type="string">text</item> <item name="label" xsi:type="string" translate="true">Order #</item> </item> </argument> </column> <column name="order_created_at"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">dateRange</item> <item name="dataType" xsi:type="string">date</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Order Date</item> </item> </argument> </column> <column name="billing_name"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="filter" xsi:type="string">text</item> <item name="label" xsi:type="string" translate="true">Bill-to Name</item> </item> </argument> </column> - <column name="state" class="Magento\Sales\Ui\Component\Listing\Column\Invoice\State"> + <column name="state"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> - </item> + <item name="options" xsi:type="object">Magento\Sales\Ui\Component\Listing\Column\Invoice\State\Options</item> <item name="config" xsi:type="array"> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="filter" xsi:type="string">select</item> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> + <item name="dataType" xsi:type="string">select</item> <item name="label" xsi:type="string" translate="true">Status</item> </item> </argument> </column> <column name="grand_total" class="Magento\Sales\Ui\Component\Listing\Column\Price"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="filter" xsi:type="string">textRange</item> <item name="label" xsi:type="string" translate="true">Amount</item> </item> </argument> </column> <column name="store_id" class="Magento\Store\Ui\Component\Listing\Column\Store"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item> <item name="visible" xsi:type="boolean">false</item> <item name="sortable" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Purchased From</item> </item> </argument> </column> <column name="billing_address" class="Magento\Sales\Ui\Component\Listing\Column\Address"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">text</item> <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Billing Address</item> </item> </argument> </column> <column name="shipping_address" class="Magento\Sales\Ui\Component\Listing\Column\Address"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">text</item> <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Shipping Address</item> </item> </argument> </column> <column name="customer_name"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">text</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Customer Name</item> </item> </argument> </column> <column name="customer_email"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">text</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Email</item> </item> </argument> </column> - <column name="customer_group_id" class="Magento\Sales\Ui\Component\Listing\Column\CustomerGroup"> + <column name="customer_group_id"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> + <item name="options" xsi:type="object">Magento\Customer\Ui\Component\Listing\Column\Group\Options</item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">select</item> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="dataType" xsi:type="string">select</item> <item name="label" xsi:type="string" translate="true">Customer Group</item> </item> </argument> </column> - <column name="payment_method" class="Magento\Sales\Ui\Component\Listing\Column\PaymentMethod"> + <column name="payment_method"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> + <item name="options" xsi:type="object">Magento\Payment\Ui\Component\Listing\Column\Method\Options</item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">select</item> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="dataType" xsi:type="string">select</item> <item name="label" xsi:type="string" translate="true">Payment Method</item> </item> </argument> </column> <column name="shipping_information"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">text</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Shipping Information</item> </item> </argument> </column> <column name="subtotal" class="Magento\Sales\Ui\Component\Listing\Column\Price"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">textRange</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Subtotal</item> </item> </argument> </column> <column name="shipping_and_handling" class="Magento\Sales\Ui\Component\Listing\Column\Price"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">textRange</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Shipping and Handling</item> </item> </argument> </column> - <column name="actions" class="Magento\Sales\Ui\Component\Listing\Column\ViewAction"> + <actionsColumn name="actions" class="Magento\Sales\Ui\Component\Listing\Column\ViewAction"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> - <item name="draggable" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">actions</item> <item name="indexField" xsi:type="string">increment_id</item> - <item name="align" xsi:type="string">left</item> - <item name="label" xsi:type="string" translate="true">Action</item> - <item name="data_type" xsi:type="string">actions</item> - <item name="filterable" xsi:type="boolean">false</item> - <item name="sortable" xsi:type="boolean">false</item> <item name="viewUrlPath" xsi:type="string">sales/invoice/view</item> <item name="urlEntityParamName" xsi:type="string">invoice_id</item> </item> </argument> - </column> + </actionsColumn> </columns> </listing> diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_shipment_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_shipment_grid.xml index 17af032838e21d16fcda7b863c369ed3dd01ee5e..7fed1927717889996266120fc16e4d31db073391 100644 --- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_shipment_grid.xml +++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_shipment_grid.xml @@ -40,17 +40,13 @@ <bookmark name="bookmarks"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/controls/bookmarks/bookmarks</item> - <item name="displayArea" xsi:type="string">dataGridActions</item> <item name="storageConfig" xsi:type="array"> - <item name="saveUrl" xsi:type="url" path="mui/bookmark/save"/> - <item name="deleteUrl" xsi:type="url" path="mui/bookmark/delete"/> <item name="namespace" xsi:type="string">sales_order_shipment_grid</item> </item> </item> </argument> </bookmark> - <container name="columns_controls"> + <component name="columns_controls"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> <item name="columnsData" xsi:type="array"> @@ -60,7 +56,7 @@ <item name="displayArea" xsi:type="string">dataGridActions</item> </item> </argument> - </container> + </component> <exportButton name="export_button"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> @@ -83,8 +79,7 @@ <filters name="listing_filters"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> - <item name="displayArea" xsi:type="string">dataGridFilters</item> - <item name="dataScope" xsi:type="string">filters</item> + <item name="columnsProvider" xsi:type="string">sales_order_shipment_grid.sales_order_shipment_grid.sales_order_shipment_columns</item> <item name="storageConfig" xsi:type="array"> <item name="provider" xsi:type="string">sales_order_shipment_grid.sales_order_shipment_grid.listing_top.bookmarks</item> <item name="namespace" xsi:type="string">current.filters</item> @@ -92,220 +87,28 @@ <item name="childDefaults" xsi:type="array"> <item name="provider" xsi:type="string">sales_order_shipment_grid.sales_order_shipment_grid.listing_top.listing_filters</item> <item name="imports" xsi:type="array"> - <item name="visible" xsi:type="string">sales_order_shipment_grid.sales_order_shipment_grid.listing_top.bookmarks:current.columns.${ $.index }.visible</item> + <item name="visible" xsi:type="string">sales_order_shipment_grid.sales_order_shipment_grid.sales_order_shipment_columns.${ $.index }:visible</item> </item> </item> </item> </argument> - <filterInput name="increment_id"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">increment_id</item> - <item name="label" xsi:type="string" translate="true">Shipment #</item> - </item> - </argument> - </filterInput> - <filterRange name="created_at" class="Magento\Ui\Component\Filters\Type\DateRange"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">created_at</item> - <item name="label" xsi:type="string" translate="true">Ship Date</item> - <item name="childDefaults" xsi:type="array"> - <item name="provider" xsi:type="string">sales_order_shipment_grid.sales_order_shipment_grid.listing_top.listing_filters</item> - </item> - </item> - </argument> - <filterDate name="from"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">from</item> - <item name="label" xsi:type="string" translate="true">From</item> - <item name="placeholder" xsi:type="string" translate="true">From</item> - <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item> - </item> - </argument> - </filterDate> - <filterDate name="to"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">to</item> - <item name="label" xsi:type="string" translate="true">To</item> - <item name="placeholder" xsi:type="string" translate="true">To</item> - <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item> - </item> - </argument> - </filterDate> - </filterRange> - <filterInput name="order_increment_id"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">order_increment_id</item> - <item name="label" xsi:type="string" translate="true">Order #</item> - </item> - </argument> - </filterInput> - <filterRange name="order_created_at" class="Magento\Ui\Component\Filters\Type\DateRange"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">order_created_at</item> - <item name="label" xsi:type="string" translate="true">Order Date</item> - <item name="childDefaults" xsi:type="array"> - <item name="provider" xsi:type="string">sales_order_shipment_grid.sales_order_shipment_grid.listing_top.listing_filters</item> - </item> - </item> - </argument> - <filterDate name="from"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">from</item> - <item name="label" xsi:type="string" translate="true">From</item> - <item name="placeholder" xsi:type="string" translate="true">From</item> - <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item> - </item> - </argument> - </filterDate> - <filterDate name="to"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">to</item> - <item name="label" xsi:type="string" translate="true">To</item> - <item name="placeholder" xsi:type="string" translate="true">To</item> - <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item> - </item> - </argument> - </filterDate> - </filterRange> - <filterInput name="shipping_name"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">shipping_name</item> - <item name="label" xsi:type="string" translate="true">Ship-to Name</item> - </item> - </argument> - </filterInput> - <filterRange name="total_qty"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">total_qty</item> - <item name="label" xsi:type="string" translate="true">Total Quantity</item> - <item name="childDefaults" xsi:type="array"> - <item name="provider" xsi:type="string">sales_order_shipment_grid.sales_order_shipment_grid.listing_top.listing_filters</item> - </item> - </item> - </argument> - <filterInput name="from"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">from</item> - <item name="label" xsi:type="string" translate="true">From</item> - <item name="placeholder" xsi:type="string" translate="true">From</item> - </item> - </argument> - </filterInput> - <filterInput name="to"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">to</item> - <item name="label" xsi:type="string" translate="true">To</item> - <item name="placeholder" xsi:type="string" translate="true">To</item> - </item> - </argument> - </filterInput> - </filterRange> - <filterSelect name="order_status"> - <argument name="optionsProvider" xsi:type="configurableObject"> - <argument name="class" xsi:type="string">Magento\Sales\Ui\Component\Listing\Column\Status\Options</argument> - </argument> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="caption" xsi:type="string" translate="true">Select...</item> - <item name="dataScope" xsi:type="string">order_status</item> - <item name="label" xsi:type="string" translate="true">Order Status</item> - </item> - </argument> - </filterSelect> <filterSelect name="store_id"> <argument name="optionsProvider" xsi:type="configurableObject"> <argument name="class" xsi:type="string">Magento\Store\Ui\Component\Listing\Column\Store\Options</argument> </argument> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> - <item name="caption" xsi:type="string" translate="true">Select...</item> + <item name="caption" xsi:type="string" translate="true">All Store Views</item> <item name="dataScope" xsi:type="string">store_id</item> <item name="label" xsi:type="string" translate="true">Purchased From</item> </item> </argument> </filterSelect> - <filterInput name="customer_name"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">customer_name</item> - <item name="label" xsi:type="string" translate="true">Customer Name</item> - </item> - </argument> - </filterInput> - <filterInput name="customer_email"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">customer_email</item> - <item name="label" xsi:type="string" translate="true">Customer Email</item> - </item> - </argument> - </filterInput> - <filterSelect name="customer_group_id"> - <argument name="optionsProvider" xsi:type="configurableObject"> - <argument name="class" xsi:type="string">Magento\Customer\Ui\Component\Listing\Column\Group\Options</argument> - </argument> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="caption" xsi:type="string" translate="true">Select...</item> - <item name="dataScope" xsi:type="string">customer_group_id</item> - <item name="label" xsi:type="string" translate="true">Customer Group</item> - </item> - </argument> - </filterSelect> - <filterInput name="billing_address"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">billing_address</item> - <item name="label" xsi:type="string" translate="true">Billing Address</item> - </item> - </argument> - </filterInput> - <filterInput name="shipping_address"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">shipping_address</item> - <item name="label" xsi:type="string" translate="true">Shipping Address</item> - </item> - </argument> - </filterInput> - <filterSelect name="payment_method"> - <argument name="optionsProvider" xsi:type="configurableObject"> - <argument name="class" xsi:type="string">Magento\Payment\Ui\Component\Listing\Column\Method\Options</argument> - </argument> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="caption" xsi:type="string" translate="true">Select...</item> - <item name="dataScope" xsi:type="string">payment_method</item> - <item name="label" xsi:type="string" translate="true">Payment Method</item> - </item> - </argument> - </filterSelect> - <filterInput name="shipping_information"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">shipping_information</item> - <item name="label" xsi:type="string" translate="true">Shipping Information</item> - </item> - </argument> - </filterInput> </filters> <massaction name="listing_massaction"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> <item name="selectProvider" xsi:type="string">sales_order_shipment_grid.sales_order_shipment_grid.sales_order_shipment_columns.ids</item> - <item name="displayArea" xsi:type="string">bottom</item> <item name="indexField" xsi:type="string">entity_id</item> </item> </argument> @@ -336,7 +139,6 @@ <item name="namespace" xsi:type="string">current.paging</item> </item> <item name="selectProvider" xsi:type="string">sales_order_shipment_grid.sales_order_shipment_grid.sales_order_shipment_columns.ids</item> - <item name="displayArea" xsi:type="string">bottom</item> </item> </argument> </paging> @@ -349,9 +151,14 @@ <item name="namespace" xsi:type="string">current</item> </item> <item name="childDefaults" xsi:type="array"> - <item name="controlVisibility" xsi:type="boolean">true</item> - <item name="actionField" xsi:type="string">actions</item> - <item name="clickAction" xsi:type="string">view</item> + <item name="fieldAction" xsi:type="array"> + <item name="provider" xsi:type="string">sales_order_shipment_grid.sales_order_shipment_grid.sales_order_shipment_columns.actions</item> + <item name="target" xsi:type="string">applyAction</item> + <item name="params" xsi:type="array"> + <item name="0" xsi:type="string">view</item> + <item name="1" xsi:type="string">${ $.$data.rowIndex }</item> + </item> + </item> <item name="storageConfig" xsi:type="array"> <item name="provider" xsi:type="string">sales_order_shipment_grid.sales_order_shipment_grid.listing_top.bookmarks</item> <item name="root" xsi:type="string">columns.${ $.index }</item> @@ -360,228 +167,167 @@ </item> </item> </argument> - <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column"> + <selectionsColumn name="ids"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item> - </item> <item name="config" xsi:type="array"> - <item name="draggable" xsi:type="boolean">false</item> <item name="indexField" xsi:type="string">entity_id</item> - <item name="controlVisibility" xsi:type="boolean">false</item> </item> </argument> - </column> + </selectionsColumn> <column name="increment_id"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> - <item name="dataType" xsi:type="string">text</item> + <item name="filter" xsi:type="string">text</item> <item name="sorting" xsi:type="string">asc</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Shipment</item> </item> </argument> </column> <column name="created_at"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">dateRange</item> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item> <item name="dataType" xsi:type="string">date</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Ship Date</item> </item> </argument> </column> <column name="order_increment_id"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> - <item name="dataType" xsi:type="string">text</item> - <item name="sorting" xsi:type="string">asc</item> - <item name="align" xsi:type="string">left</item> + <item name="filter" xsi:type="string">text</item> <item name="label" xsi:type="string" translate="true">Order</item> </item> </argument> </column> <column name="order_created_at"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">dateRange</item> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item> <item name="dataType" xsi:type="string">date</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Order Date</item> </item> </argument> </column> <column name="shipping_name"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="filter" xsi:type="string">text</item> <item name="label" xsi:type="string" translate="true">Ship-to Name</item> </item> </argument> </column> <column name="total_qty"> - <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> + <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="filter" xsi:type="string">textRange</item> <item name="label" xsi:type="string" translate="true">Total Quantity</item> </item> </argument> </column> - <column name="order_status" class="Magento\Sales\Ui\Component\Listing\Column\Status"> + <column name="order_status"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> - </item> + <item name="options" xsi:type="object">Magento\Sales\Ui\Component\Listing\Column\Status\Options</item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">select</item> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="dataType" xsi:type="string">select</item> <item name="label" xsi:type="string" translate="true">Order Status</item> </item> </argument> </column> <column name="store_id" class="Magento\Store\Ui\Component\Listing\Column\Store"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item> <item name="visible" xsi:type="boolean">false</item> <item name="sortable" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Purchased From</item> </item> </argument> </column> <column name="customer_name"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">text</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Customer Name</item> </item> </argument> </column> <column name="customer_email"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">text</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Email</item> </item> </argument> </column> - <column name="customer_group_id" class="Magento\Sales\Ui\Component\Listing\Column\CustomerGroup"> + <column name="customer_group_id"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> + <item name="options" xsi:type="object">Magento\Customer\Ui\Component\Listing\Column\Group\Options</item> <item name="config" xsi:type="array"> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> + <item name="filter" xsi:type="string">select</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="dataType" xsi:type="string">select</item> <item name="label" xsi:type="string" translate="true">Customer Group</item> </item> </argument> </column> <column name="billing_address" class="Magento\Sales\Ui\Component\Listing\Column\Address"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">text</item> <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Billing Address</item> </item> </argument> </column> <column name="shipping_address" class="Magento\Sales\Ui\Component\Listing\Column\Address"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">text</item> <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Shipping Address</item> </item> </argument> </column> - <column name="payment_method" class="Magento\Sales\Ui\Component\Listing\Column\PaymentMethod"> + <column name="payment_method"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> + <item name="options" xsi:type="object">Magento\Payment\Ui\Component\Listing\Column\Method\Options</item> <item name="config" xsi:type="array"> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> + <item name="filter" xsi:type="string">select</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="dataType" xsi:type="string">select</item> <item name="label" xsi:type="string" translate="true">Payment Method</item> </item> </argument> </column> <column name="shipping_information"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">text</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Shipping Information</item> </item> </argument> </column> - <column name="actions" class="Magento\Sales\Ui\Component\Listing\Column\ViewAction"> + <actionsColumn name="actions" class="Magento\Sales\Ui\Component\Listing\Column\ViewAction"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> - <item name="draggable" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">actions</item> <item name="indexField" xsi:type="string">entity_id</item> - <item name="align" xsi:type="string">left</item> - <item name="label" xsi:type="string" translate="true">Action</item> - <item name="data_type" xsi:type="string">actions</item> - <item name="filterable" xsi:type="boolean">false</item> - <item name="sortable" xsi:type="boolean">false</item> <item name="viewUrlPath" xsi:type="string">sales/shipment/view</item> <item name="urlEntityParamName" xsi:type="string">shipment_id</item> </item> </argument> - </column> + </actionsColumn> </columns> </listing> diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_creditmemo_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_creditmemo_grid.xml index d48507f8beac9ecdc6b0125dd0c08a1433794b5c..4377aefc1b19b007bf3b9922994ba114cbb1add9 100644 --- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_creditmemo_grid.xml +++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_creditmemo_grid.xml @@ -43,17 +43,13 @@ <bookmark name="bookmarks"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/controls/bookmarks/bookmarks</item> - <item name="displayArea" xsi:type="string">dataGridActions</item> <item name="storageConfig" xsi:type="array"> - <item name="saveUrl" xsi:type="url" path="mui/bookmark/save"/> - <item name="deleteUrl" xsi:type="url" path="mui/bookmark/delete"/> <item name="namespace" xsi:type="string">sales_order_view_creditmemo_grid</item> </item> </item> </argument> </bookmark> - <container name="columns_controls"> + <component name="columns_controls"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> <item name="columnsData" xsi:type="array"> @@ -63,7 +59,7 @@ <item name="displayArea" xsi:type="string">dataGridActions</item> </item> </argument> - </container> + </component> <exportButton name="export_button"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> @@ -86,8 +82,7 @@ <filters name="listing_filters"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> - <item name="displayArea" xsi:type="string">dataGridFilters</item> - <item name="dataScope" xsi:type="string">filters</item> + <item name="columnsProvider" xsi:type="string">sales_order_view_creditmemo_grid.sales_order_view_creditmemo_grid.sales_order_creditmemo_columns</item> <item name="storageConfig" xsi:type="array"> <item name="provider" xsi:type="string">sales_order_view_creditmemo_grid.sales_order_view_creditmemo_grid.listing_top.bookmarks</item> <item name="namespace" xsi:type="string">current.filters</item> @@ -95,319 +90,28 @@ <item name="childDefaults" xsi:type="array"> <item name="provider" xsi:type="string">sales_order_view_creditmemo_grid.sales_order_view_creditmemo_grid.listing_top.listing_filters</item> <item name="imports" xsi:type="array"> - <item name="visible" xsi:type="string">sales_order_view_creditmemo_grid.sales_order_view_creditmemo_grid.listing_top.bookmarks:current.columns.${ $.index }.visible</item> + <item name="visible" xsi:type="string">sales_order_view_creditmemo_grid.sales_order_view_creditmemo_grid.sales_order_creditmemo_columns.${ $.index }:visible</item> </item> </item> </item> </argument> - <filterInput name="increment_id"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">increment_id</item> - <item name="label" xsi:type="string" translate="true">Credit Memo</item> - </item> - </argument> - </filterInput> - <filterRange name="created_at" class="Magento\Ui\Component\Filters\Type\DateRange"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">created_at</item> - <item name="label" xsi:type="string" translate="true">Created</item> - <item name="childDefaults" xsi:type="array"> - <item name="provider" xsi:type="string">sales_order_view_creditmemo_grid.sales_order_view_creditmemo_grid.listing_top.listing_filters</item> - </item> - </item> - </argument> - <filterDate name="from"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">from</item> - <item name="label" xsi:type="string" translate="true">From</item> - <item name="placeholder" xsi:type="string" translate="true">From</item> - <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item> - </item> - </argument> - </filterDate> - <filterDate name="to"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">to</item> - <item name="label" xsi:type="string" translate="true">To</item> - <item name="placeholder" xsi:type="string" translate="true">To</item> - <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item> - </item> - </argument> - </filterDate> - </filterRange> - <filterInput name="order_increment_id"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">order_increment_id</item> - <item name="label" xsi:type="string" translate="true">Order</item> - </item> - </argument> - </filterInput> - <filterRange name="order_created_at" class="Magento\Ui\Component\Filters\Type\DateRange"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">order_created_at</item> - <item name="label" xsi:type="string" translate="true">Order Date</item> - <item name="childDefaults" xsi:type="array"> - <item name="provider" xsi:type="string">sales_order_view_creditmemo_grid.sales_order_view_creditmemo_grid.listing_top.listing_filters</item> - </item> - </item> - </argument> - <filterDate name="from"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">from</item> - <item name="label" xsi:type="string" translate="true">From</item> - <item name="placeholder" xsi:type="string" translate="true">From</item> - <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item> - </item> - </argument> - </filterDate> - <filterDate name="to"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">to</item> - <item name="label" xsi:type="string" translate="true">To</item> - <item name="placeholder" xsi:type="string" translate="true">To</item> - <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item> - </item> - </argument> - </filterDate> - </filterRange> - <filterInput name="billing_name"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">billing_name</item> - <item name="label" xsi:type="string" translate="true">Bill-to Name</item> - </item> - </argument> - </filterInput> - <filterSelect name="state"> - <argument name="optionsProvider" xsi:type="configurableObject"> - <argument name="class" xsi:type="string">Magento\Sales\Ui\Component\Listing\Column\Creditmemo\State\Options</argument> - </argument> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="caption" xsi:type="string" translate="true">Select...</item> - <item name="dataScope" xsi:type="string">state</item> - <item name="label" xsi:type="string" translate="true">Status</item> - </item> - </argument> - </filterSelect> - <filterRange name="base_grand_total"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">base_grand_total</item> - <item name="label" xsi:type="string" translate="true">Refunded</item> - <item name="childDefaults" xsi:type="array"> - <item name="provider" xsi:type="string">sales_order_view_creditmemo_grid.sales_order_view_creditmemo_grid.listing_top.listing_filters</item> - </item> - </item> - </argument> - <filterInput name="from"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">from</item> - <item name="label" xsi:type="string" translate="true">From</item> - <item name="placeholder" xsi:type="string" translate="true">From</item> - </item> - </argument> - </filterInput> - <filterInput name="to"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">to</item> - <item name="label" xsi:type="string" translate="true">To</item> - <item name="placeholder" xsi:type="string" translate="true">To</item> - </item> - </argument> - </filterInput> - </filterRange> - <filterSelect name="order_status"> - <argument name="optionsProvider" xsi:type="configurableObject"> - <argument name="class" xsi:type="string">Magento\Sales\Ui\Component\Listing\Column\Status\Options</argument> - </argument> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="caption" xsi:type="string" translate="true">Select...</item> - <item name="dataScope" xsi:type="string">order_status</item> - <item name="label" xsi:type="string" translate="true">Order Status</item> - </item> - </argument> - </filterSelect> <filterSelect name="store_id"> <argument name="optionsProvider" xsi:type="configurableObject"> <argument name="class" xsi:type="string">Magento\Store\Ui\Component\Listing\Column\Store\Options</argument> </argument> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> - <item name="caption" xsi:type="string" translate="true">Select...</item> + <item name="caption" xsi:type="string" translate="true">All Store Views</item> <item name="dataScope" xsi:type="string">store_id</item> <item name="label" xsi:type="string" translate="true">Purchased From</item> </item> </argument> </filterSelect> - <filterInput name="billing_address"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">billing_address</item> - <item name="label" xsi:type="string" translate="true">Billing Address</item> - </item> - </argument> - </filterInput> - <filterInput name="shipping_address"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">shipping_address</item> - <item name="label" xsi:type="string" translate="true">Shipping Address</item> - </item> - </argument> - </filterInput> - <filterInput name="customer_name"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">customer_name</item> - <item name="label" xsi:type="string" translate="true">Customer Name</item> - </item> - </argument> - </filterInput> - <filterInput name="customer_email"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">customer_email</item> - <item name="label" xsi:type="string" translate="true">Customer Email</item> - </item> - </argument> - </filterInput> - <filterSelect name="customer_group_id"> - <argument name="optionsProvider" xsi:type="configurableObject"> - <argument name="class" xsi:type="string">Magento\Customer\Ui\Component\Listing\Column\Group\Options</argument> - </argument> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="caption" xsi:type="string" translate="true">Select...</item> - <item name="dataScope" xsi:type="string">customer_group_id</item> - <item name="label" xsi:type="string" translate="true">Customer Group</item> - </item> - </argument> - </filterSelect> - <filterSelect name="payment_method"> - <argument name="optionsProvider" xsi:type="configurableObject"> - <argument name="class" xsi:type="string">Magento\Payment\Ui\Component\Listing\Column\Method\Options</argument> - </argument> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="caption" xsi:type="string" translate="true">Select...</item> - <item name="dataScope" xsi:type="string">payment_method</item> - <item name="label" xsi:type="string" translate="true">Payment Method</item> - </item> - </argument> - </filterSelect> - <filterInput name="shipping_information"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">shipping_information</item> - <item name="label" xsi:type="string" translate="true">Shipping Information</item> - </item> - </argument> - </filterInput> - <filterRange name="subtotal"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">subtotal</item> - <item name="label" xsi:type="string" translate="true">Subtotal</item> - <item name="childDefaults" xsi:type="array"> - <item name="provider" xsi:type="string">sales_order_view_creditmemo_grid.sales_order_view_creditmemo_grid.listing_top.listing_filters</item> - </item> - </item> - </argument> - <filterInput name="from"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">from</item> - <item name="label" xsi:type="string" translate="true">From</item> - <item name="placeholder" xsi:type="string" translate="true">From</item> - </item> - </argument> - </filterInput> - <filterInput name="to"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">to</item> - <item name="label" xsi:type="string" translate="true">To</item> - <item name="placeholder" xsi:type="string" translate="true">To</item> - </item> - </argument> - </filterInput> - </filterRange> - <filterRange name="shipping_and_handling"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">shipping_and_handling</item> - <item name="label" xsi:type="string" translate="true">Shipping and Handling</item> - <item name="childDefaults" xsi:type="array"> - <item name="provider" xsi:type="string">sales_order_view_creditmemo_grid.sales_order_view_creditmemo_grid.listing_top.listing_filters</item> - </item> - </item> - </argument> - <filterInput name="from"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">from</item> - <item name="label" xsi:type="string" translate="true">From</item> - <item name="placeholder" xsi:type="string" translate="true">From</item> - </item> - </argument> - </filterInput> - <filterInput name="to"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">to</item> - <item name="label" xsi:type="string" translate="true">To</item> - <item name="placeholder" xsi:type="string" translate="true">To</item> - </item> - </argument> - </filterInput> - </filterRange> - <filterRange name="order_base_grand_total"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">order_base_grand_total</item> - <item name="label" xsi:type="string" translate="true">Grand Total</item> - <item name="childDefaults" xsi:type="array"> - <item name="provider" xsi:type="string">sales_order_view_creditmemo_grid.sales_order_view_creditmemo_grid.listing_top.listing_filters</item> - </item> - </item> - </argument> - <filterInput name="from"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">from</item> - <item name="label" xsi:type="string" translate="true">From</item> - <item name="placeholder" xsi:type="string" translate="true">From</item> - </item> - </argument> - </filterInput> - <filterInput name="to"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">to</item> - <item name="label" xsi:type="string" translate="true">To</item> - <item name="placeholder" xsi:type="string" translate="true">To</item> - </item> - </argument> - </filterInput> - </filterRange> </filters> <massaction name="listing_massaction"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> <item name="selectProvider" xsi:type="string">sales_order_view_creditmemo_grid.sales_order_view_creditmemo_grid.sales_order_creditmemo_columns.ids</item> - <item name="displayArea" xsi:type="string">bottom</item> <item name="indexField" xsi:type="string">entity_id</item> </item> </argument> @@ -429,7 +133,6 @@ <item name="namespace" xsi:type="string">current.paging</item> </item> <item name="selectProvider" xsi:type="string">sales_order_view_creditmemo_grid.sales_order_view_creditmemo_grid.sales_order_creditmemo_columns.ids</item> - <item name="displayArea" xsi:type="string">bottom</item> </item> </argument> </paging> @@ -442,9 +145,14 @@ <item name="namespace" xsi:type="string">current</item> </item> <item name="childDefaults" xsi:type="array"> - <item name="controlVisibility" xsi:type="boolean">true</item> - <item name="actionField" xsi:type="string">actions</item> - <item name="clickAction" xsi:type="string">view</item> + <item name="fieldAction" xsi:type="array"> + <item name="provider" xsi:type="string">sales_order_view_creditmemo_grid.sales_order_view_creditmemo_grid.sales_order_creditmemo_columns.actions</item> + <item name="target" xsi:type="string">applyAction</item> + <item name="params" xsi:type="array"> + <item name="0" xsi:type="string">view</item> + <item name="1" xsi:type="string">${ $.$data.rowIndex }</item> + </item> + </item> <item name="storageConfig" xsi:type="array"> <item name="provider" xsi:type="string">sales_order_view_creditmemo_grid.sales_order_view_creditmemo_grid.listing_top.bookmarks</item> <item name="root" xsi:type="string">columns.${ $.index }</item> @@ -453,303 +161,222 @@ </item> </item> </argument> - <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column"> + <selectionsColumn name="ids"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item> - </item> <item name="config" xsi:type="array"> - <item name="draggable" xsi:type="boolean">false</item> <item name="indexField" xsi:type="string">entity_id</item> - <item name="controlVisibility" xsi:type="boolean">false</item> </item> </argument> - </column> + </selectionsColumn> <column name="increment_id"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="filter" xsi:type="string">text</item> <item name="label" xsi:type="string" translate="true">Credit Memo</item> </item> </argument> </column> <column name="created_at"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">dateRange</item> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item> <item name="dataType" xsi:type="string">date</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Created</item> </item> </argument> </column> <column name="order_increment_id"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="filter" xsi:type="string">text</item> <item name="label" xsi:type="string" translate="true">Order</item> </item> </argument> </column> <column name="order_created_at"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">dateRange</item> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item> <item name="dataType" xsi:type="string">date</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Order Date</item> </item> </argument> </column> <column name="billing_name"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="filter" xsi:type="string">text</item> <item name="label" xsi:type="string" translate="true">Bill-to Name</item> </item> </argument> </column> - <column name="state" class="Magento\Sales\Ui\Component\Listing\Column\Creditmemo\State"> + <column name="state"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> - </item> + <item name="options" xsi:type="object">Magento\Sales\Ui\Component\Listing\Column\Creditmemo\State\Options</item> <item name="config" xsi:type="array"> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="filter" xsi:type="string">select</item> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> + <item name="dataType" xsi:type="string">select</item> <item name="label" xsi:type="string" translate="true">Status</item> </item> </argument> </column> <column name="base_grand_total" class="Magento\Sales\Ui\Component\Listing\Column\Price"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="filter" xsi:type="string">textRange</item> <item name="label" xsi:type="string" translate="true">Refunded</item> </item> </argument> </column> - <column name="order_status" class="Magento\Sales\Ui\Component\Listing\Column\Status"> + <column name="order_status"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> - </item> + <item name="options" xsi:type="object">Magento\Sales\Ui\Component\Listing\Column\Status\Options</item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">select</item> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="dataType" xsi:type="string">select</item> <item name="label" xsi:type="string" translate="true">Order Status</item> </item> </argument> </column> <column name="store_id" class="Magento\Store\Ui\Component\Listing\Column\Store"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item> <item name="visible" xsi:type="boolean">false</item> <item name="sortable" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Purchased From</item> </item> </argument> </column> <column name="billing_address" class="Magento\Sales\Ui\Component\Listing\Column\Address"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">text</item> <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Billing Address</item> </item> </argument> </column> <column name="shipping_address" class="Magento\Sales\Ui\Component\Listing\Column\Address"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">text</item> <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Shipping Address</item> </item> </argument> </column> <column name="customer_name"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">text</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Customer Name</item> </item> </argument> </column> <column name="customer_email"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">text</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Email</item> </item> </argument> </column> - <column name="customer_group_id" class="Magento\Sales\Ui\Component\Listing\Column\CustomerGroup"> + <column name="customer_group_id"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> + <item name="options" xsi:type="object">Magento\Customer\Ui\Component\Listing\Column\Group\Options</item> <item name="config" xsi:type="array"> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> + <item name="filter" xsi:type="string">select</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="dataType" xsi:type="string">select</item> <item name="label" xsi:type="string" translate="true">Customer Group</item> </item> </argument> </column> - <column name="payment_method" class="Magento\Sales\Ui\Component\Listing\Column\PaymentMethod"> + <column name="payment_method"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> + <item name="options" xsi:type="object">Magento\Payment\Ui\Component\Listing\Column\Method\Options</item> <item name="config" xsi:type="array"> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> + <item name="filter" xsi:type="string">select</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="dataType" xsi:type="string">select</item> <item name="label" xsi:type="string" translate="true">Payment Method</item> </item> </argument> </column> <column name="shipping_information"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">text</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Shipping Information</item> </item> </argument> </column> <column name="subtotal" class="Magento\Sales\Ui\Component\Listing\Column\Price"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">textRange</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Subtotal</item> </item> </argument> </column> <column name="shipping_and_handling" class="Magento\Sales\Ui\Component\Listing\Column\Price"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">textRange</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Shipping & Handling</item> </item> </argument> </column> <column name="adjustment_positive" class="Magento\Sales\Ui\Component\Listing\Column\Price"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">textRange</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Adjustment Refund</item> </item> </argument> </column> <column name="adjustment_negative" class="Magento\Sales\Ui\Component\Listing\Column\Price"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">textRange</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Adjustment Fee</item> </item> </argument> </column> <column name="order_base_grand_total" class="Magento\Sales\Ui\Component\Listing\Column\Price"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">textRange</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Grand Total</item> </item> </argument> </column> - <column name="actions" class="Magento\Sales\Ui\Component\Listing\Column\ViewAction"> + <actionsColumn name="actions" class="Magento\Sales\Ui\Component\Listing\Column\ViewAction"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> - <item name="draggable" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">actions</item> <item name="indexField" xsi:type="string">entity_id</item> - <item name="align" xsi:type="string">left</item> - <item name="label" xsi:type="string" translate="true">Action</item> - <item name="data_type" xsi:type="string">actions</item> - <item name="filterable" xsi:type="boolean">false</item> - <item name="sortable" xsi:type="boolean">false</item> <item name="viewUrlPath" xsi:type="string">sales/order_creditmemo/view</item> <item name="urlEntityParamName" xsi:type="string">creditmemo_id</item> </item> </argument> - </column> + </actionsColumn> </columns> </listing> diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_invoice_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_invoice_grid.xml index 9b5fe06dcac634070dc3d618a8f99f8cad876647..9ea839d31c23a9dea465d9806109c4e2a2ca6320 100644 --- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_invoice_grid.xml +++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_invoice_grid.xml @@ -43,17 +43,13 @@ <bookmark name="bookmarks"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/controls/bookmarks/bookmarks</item> - <item name="displayArea" xsi:type="string">dataGridActions</item> <item name="storageConfig" xsi:type="array"> - <item name="saveUrl" xsi:type="url" path="mui/bookmark/save"/> - <item name="deleteUrl" xsi:type="url" path="mui/bookmark/delete"/> <item name="namespace" xsi:type="string">sales_order_view_invoice_grid</item> </item> </item> </argument> </bookmark> - <container name="columns_controls"> + <component name="columns_controls"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> <item name="columnsData" xsi:type="array"> @@ -63,7 +59,7 @@ <item name="displayArea" xsi:type="string">dataGridActions</item> </item> </argument> - </container> + </component> <exportButton name="export_button"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> @@ -86,8 +82,7 @@ <filters name="listing_filters"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> - <item name="displayArea" xsi:type="string">dataGridFilters</item> - <item name="dataScope" xsi:type="string">filters</item> + <item name="columnsProvider" xsi:type="string">sales_order_view_invoice_grid.sales_order_view_invoice_grid.sales_order_invoice_columns</item> <item name="storageConfig" xsi:type="array"> <item name="provider" xsi:type="string">sales_order_view_invoice_grid.sales_order_view_invoice_grid.listing_top.bookmarks</item> <item name="namespace" xsi:type="string">current.filters</item> @@ -100,273 +95,23 @@ </item> </item> </argument> - <filterInput name="increment_id"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">increment_id</item> - <item name="label" xsi:type="string" translate="true">Invoice #</item> - </item> - </argument> - </filterInput> - <filterRange name="created_at" class="Magento\Ui\Component\Filters\Type\DateRange"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">created_at</item> - <item name="label" xsi:type="string" translate="true">Invoice Date</item> - <item name="childDefaults" xsi:type="array"> - <item name="provider" xsi:type="string">sales_order_view_invoice_grid.sales_order_view_invoice_grid.listing_top.listing_filters</item> - </item> - </item> - </argument> - <filterDate name="from"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">from</item> - <item name="label" xsi:type="string" translate="true">From</item> - <item name="placeholder" xsi:type="string" translate="true">From</item> - <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item> - </item> - </argument> - </filterDate> - <filterDate name="to"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">to</item> - <item name="label" xsi:type="string" translate="true">To</item> - <item name="placeholder" xsi:type="string" translate="true">To</item> - <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item> - </item> - </argument> - </filterDate> - </filterRange> - <filterInput name="order_increment_id"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">order_increment_id</item> - <item name="label" xsi:type="string" translate="true">Order #</item> - </item> - </argument> - </filterInput> - <filterRange name="order_created_at" class="Magento\Ui\Component\Filters\Type\DateRange"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">order_created_at</item> - <item name="label" xsi:type="string" translate="true">Order Date</item> - <item name="childDefaults" xsi:type="array"> - <item name="provider" xsi:type="string">sales_order_view_invoice_grid.sales_order_view_invoice_grid.listing_top.listing_filters</item> - </item> - </item> - </argument> - <filterDate name="from"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">from</item> - <item name="label" xsi:type="string" translate="true">From</item> - <item name="placeholder" xsi:type="string" translate="true">From</item> - <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item> - </item> - </argument> - </filterDate> - <filterDate name="to"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">to</item> - <item name="label" xsi:type="string" translate="true">To</item> - <item name="placeholder" xsi:type="string" translate="true">To</item> - <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item> - </item> - </argument> - </filterDate> - </filterRange> - <filterInput name="billing_name"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">billing_name</item> - <item name="label" xsi:type="string" translate="true">Bill-to Name</item> - </item> - </argument> - </filterInput> - <filterSelect name="state"> - <argument name="optionsProvider" xsi:type="configurableObject"> - <argument name="class" xsi:type="string">Magento\Sales\Ui\Component\Listing\Column\Invoice\State\Options</argument> - </argument> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="caption" xsi:type="string" translate="true">Select...</item> - <item name="dataScope" xsi:type="string">state</item> - <item name="label" xsi:type="string" translate="true">Status</item> - </item> - </argument> - </filterSelect> <filterSelect name="store_id"> <argument name="optionsProvider" xsi:type="configurableObject"> <argument name="class" xsi:type="string">Magento\Store\Ui\Component\Listing\Column\Store\Options</argument> </argument> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> - <item name="caption" xsi:type="string" translate="true">Select...</item> + <item name="caption" xsi:type="string" translate="true">All Store Views</item> <item name="dataScope" xsi:type="string">store_id</item> <item name="label" xsi:type="string" translate="true">Purchased From</item> </item> </argument> </filterSelect> - <filterInput name="billing_address"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">billing_address</item> - <item name="label" xsi:type="string" translate="true">Billing Address</item> - </item> - </argument> - </filterInput> - <filterInput name="shipping_address"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">shipping_address</item> - <item name="label" xsi:type="string" translate="true">Shipping Address</item> - </item> - </argument> - </filterInput> - <filterInput name="customer_name"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">customer_name</item> - <item name="label" xsi:type="string" translate="true">Customer Name</item> - </item> - </argument> - </filterInput> - <filterInput name="customer_email"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">customer_email</item> - <item name="label" xsi:type="string" translate="true">Customer Email</item> - </item> - </argument> - </filterInput> - <filterSelect name="customer_group_id"> - <argument name="optionsProvider" xsi:type="configurableObject"> - <argument name="class" xsi:type="string">Magento\Customer\Ui\Component\Listing\Column\Group\Options</argument> - </argument> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="caption" xsi:type="string" translate="true">Select...</item> - <item name="dataScope" xsi:type="string">customer_group_id</item> - <item name="label" xsi:type="string" translate="true">Customer Group</item> - </item> - </argument> - </filterSelect> - <filterSelect name="payment_method"> - <argument name="optionsProvider" xsi:type="configurableObject"> - <argument name="class" xsi:type="string">Magento\Payment\Ui\Component\Listing\Column\Method\Options</argument> - </argument> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="caption" xsi:type="string" translate="true">Select...</item> - <item name="dataScope" xsi:type="string">payment_method</item> - <item name="label" xsi:type="string" translate="true">Payment Method</item> - </item> - </argument> - </filterSelect> - <filterInput name="shipping_information"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">shipping_information</item> - <item name="label" xsi:type="string" translate="true">Shipping Information</item> - </item> - </argument> - </filterInput> - <filterRange name="subtotal"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">subtotal</item> - <item name="label" xsi:type="string" translate="true">Subtotal</item> - <item name="childDefaults" xsi:type="array"> - <item name="provider" xsi:type="string">sales_order_view_invoice_grid.sales_order_view_invoice_grid.listing_top.listing_filters</item> - </item> - </item> - </argument> - <filterInput name="from"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">from</item> - <item name="label" xsi:type="string" translate="true">From</item> - <item name="placeholder" xsi:type="string" translate="true">From</item> - </item> - </argument> - </filterInput> - <filterInput name="to"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">to</item> - <item name="label" xsi:type="string" translate="true">To</item> - <item name="placeholder" xsi:type="string" translate="true">To</item> - </item> - </argument> - </filterInput> - </filterRange> - <filterRange name="shipping_and_handling"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">shipping_and_handling</item> - <item name="label" xsi:type="string" translate="true">Shipping and Handling</item> - <item name="childDefaults" xsi:type="array"> - <item name="provider" xsi:type="string">sales_order_view_invoice_grid.sales_order_view_invoice_grid.listing_top.listing_filters</item> - </item> - </item> - </argument> - <filterInput name="from"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">from</item> - <item name="label" xsi:type="string" translate="true">From</item> - <item name="placeholder" xsi:type="string" translate="true">From</item> - </item> - </argument> - </filterInput> - <filterInput name="to"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">to</item> - <item name="label" xsi:type="string" translate="true">To</item> - <item name="placeholder" xsi:type="string" translate="true">To</item> - </item> - </argument> - </filterInput> - </filterRange> - <filterRange name="grand_total"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">grand_total</item> - <item name="label" xsi:type="string" translate="true">Grand Total</item> - <item name="childDefaults" xsi:type="array"> - <item name="provider" xsi:type="string">sales_order_view_invoice_grid.sales_order_view_invoice_grid.listing_top.listing_filters</item> - </item> - </item> - </argument> - <filterInput name="from"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">from</item> - <item name="label" xsi:type="string" translate="true">From</item> - <item name="placeholder" xsi:type="string" translate="true">From</item> - </item> - </argument> - </filterInput> - <filterInput name="to"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">to</item> - <item name="label" xsi:type="string" translate="true">To</item> - <item name="placeholder" xsi:type="string" translate="true">To</item> - </item> - </argument> - </filterInput> - </filterRange> </filters> <massaction name="listing_massaction"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> <item name="selectProvider" xsi:type="string">sales_order_view_invoice_grid.sales_order_view_invoice_grid.sales_order_invoice_columns.ids</item> - <item name="displayArea" xsi:type="string">bottom</item> <item name="indexField" xsi:type="string">entity_id</item> </item> </argument> @@ -388,7 +133,6 @@ <item name="namespace" xsi:type="string">current.paging</item> </item> <item name="selectProvider" xsi:type="string">sales_order_view_invoice_grid.sales_order_view_invoice_grid.sales_order_invoice_columns.ids</item> - <item name="displayArea" xsi:type="string">bottom</item> </item> </argument> </paging> @@ -401,9 +145,14 @@ <item name="namespace" xsi:type="string">current</item> </item> <item name="childDefaults" xsi:type="array"> - <item name="controlVisibility" xsi:type="boolean">true</item> - <item name="actionField" xsi:type="string">actions</item> - <item name="clickAction" xsi:type="string">view</item> + <item name="fieldAction" xsi:type="array"> + <item name="provider" xsi:type="string">sales_order_view_invoice_grid.sales_order_view_invoice_grid.sales_order_invoice_columns.actions</item> + <item name="target" xsi:type="string">applyAction</item> + <item name="params" xsi:type="array"> + <item name="0" xsi:type="string">view</item> + <item name="1" xsi:type="string">${ $.$data.rowIndex }</item> + </item> + </item> <item name="storageConfig" xsi:type="array"> <item name="provider" xsi:type="string">sales_order_view_invoice_grid.sales_order_view_invoice_grid.listing_top.bookmarks</item> <item name="root" xsi:type="string">columns.${ $.index }</item> @@ -412,253 +161,183 @@ </item> </item> </argument> - <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column"> + <selectionsColumn name="ids"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item> - </item> <item name="config" xsi:type="array"> - <item name="draggable" xsi:type="boolean">false</item> <item name="indexField" xsi:type="string">entity_id</item> - <item name="controlVisibility" xsi:type="boolean">false</item> </item> </argument> - </column> + </selectionsColumn> <column name="increment_id"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> - <item name="dataType" xsi:type="string">text</item> + <item name="filter" xsi:type="string">text</item> <item name="sorting" xsi:type="string">asc</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Invoice</item> </item> </argument> </column> <column name="created_at"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">dateRange</item> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item> <item name="dataType" xsi:type="string">date</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Invoice Date</item> </item> </argument> </column> <column name="order_increment_id"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> - <item name="dataType" xsi:type="string">text</item> - <item name="sorting" xsi:type="string">asc</item> - <item name="align" xsi:type="string">left</item> + <item name="filter" xsi:type="string">text</item> <item name="label" xsi:type="string" translate="true">Order #</item> </item> </argument> </column> <column name="order_created_at"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">dateRange</item> <item name="dataType" xsi:type="string">date</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Order Date</item> </item> </argument> </column> <column name="billing_name"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="filter" xsi:type="string">text</item> <item name="label" xsi:type="string" translate="true">Bill-to Name</item> </item> </argument> </column> - <column name="state" class="Magento\Sales\Ui\Component\Listing\Column\Invoice\State"> + <column name="state"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> - </item> + <item name="options" xsi:type="object">Magento\Sales\Ui\Component\Listing\Column\Invoice\State\Options</item> <item name="config" xsi:type="array"> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="filter" xsi:type="string">select</item> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> + <item name="dataType" xsi:type="string">select</item> <item name="label" xsi:type="string" translate="true">Status</item> </item> </argument> </column> <column name="grand_total" class="Magento\Sales\Ui\Component\Listing\Column\Price"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="filter" xsi:type="string">textRange</item> <item name="label" xsi:type="string" translate="true">Amount</item> </item> </argument> </column> <column name="store_id" class="Magento\Store\Ui\Component\Listing\Column\Store"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item> <item name="visible" xsi:type="boolean">false</item> <item name="sortable" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Purchased From</item> </item> </argument> </column> <column name="billing_address" class="Magento\Sales\Ui\Component\Listing\Column\Address"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">text</item> <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Billing Address</item> </item> </argument> </column> <column name="shipping_address" class="Magento\Sales\Ui\Component\Listing\Column\Address"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">text</item> <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Shipping Address</item> </item> </argument> </column> <column name="customer_name"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">text</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Customer Name</item> </item> </argument> </column> <column name="customer_email"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">text</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Email</item> </item> </argument> </column> - <column name="customer_group_id" class="Magento\Sales\Ui\Component\Listing\Column\CustomerGroup"> + <column name="customer_group_id"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> + <item name="options" xsi:type="object">Magento\Customer\Ui\Component\Listing\Column\Group\Options</item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">select</item> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="dataType" xsi:type="string">select</item> <item name="label" xsi:type="string" translate="true">Customer Group</item> </item> </argument> </column> - <column name="payment_method" class="Magento\Sales\Ui\Component\Listing\Column\PaymentMethod"> + <column name="payment_method"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> + <item name="options" xsi:type="object">Magento\Payment\Ui\Component\Listing\Column\Method\Options</item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">select</item> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="dataType" xsi:type="string">select</item> <item name="label" xsi:type="string" translate="true">Payment Method</item> </item> </argument> </column> <column name="shipping_information"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">text</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Shipping Information</item> </item> </argument> </column> <column name="subtotal" class="Magento\Sales\Ui\Component\Listing\Column\Price"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">textRange</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Subtotal</item> </item> </argument> </column> <column name="shipping_and_handling" class="Magento\Sales\Ui\Component\Listing\Column\Price"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">textRange</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Shipping and Handling</item> </item> </argument> </column> - <column name="actions" class="Magento\Sales\Ui\Component\Listing\Column\ViewAction"> + <actionsColumn name="actions" class="Magento\Sales\Ui\Component\Listing\Column\ViewAction"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> - <item name="draggable" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">actions</item> <item name="indexField" xsi:type="string">increment_id</item> - <item name="align" xsi:type="string">left</item> - <item name="label" xsi:type="string" translate="true">Action</item> - <item name="data_type" xsi:type="string">actions</item> - <item name="filterable" xsi:type="boolean">false</item> - <item name="sortable" xsi:type="boolean">false</item> <item name="viewUrlPath" xsi:type="string">sales/order_invoice/view</item> <item name="urlEntityParamName" xsi:type="string">invoice_id</item> </item> </argument> - </column> + </actionsColumn> </columns> </listing> diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_shipment_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_shipment_grid.xml index 399b0827be9d5b4ea7fb7a64b1b562c9a6959ee6..43539e5c20ccba9f758f5daab99fe880cb1c682e 100644 --- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_shipment_grid.xml +++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_shipment_grid.xml @@ -43,17 +43,13 @@ <bookmark name="bookmarks"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/controls/bookmarks/bookmarks</item> - <item name="displayArea" xsi:type="string">dataGridActions</item> <item name="storageConfig" xsi:type="array"> - <item name="saveUrl" xsi:type="url" path="mui/bookmark/save"/> - <item name="deleteUrl" xsi:type="url" path="mui/bookmark/delete"/> <item name="namespace" xsi:type="string">sales_order_view_shipment_grid</item> </item> </item> </argument> </bookmark> - <container name="columns_controls"> + <component name="columns_controls"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> <item name="columnsData" xsi:type="array"> @@ -63,7 +59,7 @@ <item name="displayArea" xsi:type="string">dataGridActions</item> </item> </argument> - </container> + </component> <exportButton name="export_button"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> @@ -86,8 +82,7 @@ <filters name="listing_filters"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> - <item name="displayArea" xsi:type="string">dataGridFilters</item> - <item name="dataScope" xsi:type="string">filters</item> + <item name="columnsProvider" xsi:type="string">sales_order_view_shipment_grid.sales_order_view_shipment_grid.sales_order_shipment_columns</item> <item name="storageConfig" xsi:type="array"> <item name="provider" xsi:type="string">sales_order_view_shipment_grid.sales_order_view_shipment_grid.listing_top.bookmarks</item> <item name="namespace" xsi:type="string">current.filters</item> @@ -100,219 +95,23 @@ </item> </item> </argument> - <filterInput name="increment_id"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">increment_id</item> - <item name="label" xsi:type="string" translate="true">Shipment #</item> - </item> - </argument> - </filterInput> - <filterRange name="created_at" class="Magento\Ui\Component\Filters\Type\DateRange"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">created_at</item> - <item name="label" xsi:type="string" translate="true">Ship Date</item> - <item name="childDefaults" xsi:type="array"> - <item name="provider" xsi:type="string">sales_order_view_shipment_grid.sales_order_view_shipment_grid.listing_top.listing_filters</item> - </item> - </item> - </argument> - <filterDate name="from"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">from</item> - <item name="label" xsi:type="string" translate="true">From</item> - <item name="placeholder" xsi:type="string" translate="true">From</item> - <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item> - </item> - </argument> - </filterDate> - <filterDate name="to"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">to</item> - <item name="label" xsi:type="string" translate="true">To</item> - <item name="placeholder" xsi:type="string" translate="true">To</item> - <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item> - </item> - </argument> - </filterDate> - </filterRange> - <filterInput name="order_increment_id"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">order_increment_id</item> - <item name="label" xsi:type="string" translate="true">Order #</item> - </item> - </argument> - </filterInput> - <filterRange name="order_created_at" class="Magento\Ui\Component\Filters\Type\DateRange"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">order_created_at</item> - <item name="label" xsi:type="string" translate="true">Order Date</item> - <item name="childDefaults" xsi:type="array"> - <item name="provider" xsi:type="string">sales_order_view_shipment_grid.sales_order_view_shipment_grid.listing_top.listing_filters</item> - </item> - </item> - </argument> - <filterDate name="from"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">from</item> - <item name="label" xsi:type="string" translate="true">From</item> - <item name="placeholder" xsi:type="string" translate="true">From</item> - <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item> - </item> - </argument> - </filterDate> - <filterDate name="to"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">to</item> - <item name="label" xsi:type="string" translate="true">To</item> - <item name="placeholder" xsi:type="string" translate="true">To</item> - <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item> - </item> - </argument> - </filterDate> - </filterRange> - <filterInput name="shipping_name"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">shipping_name</item> - <item name="label" xsi:type="string" translate="true">Ship-to Name</item> - </item> - </argument> - </filterInput> - <filterRange name="total_qty"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">total_qty</item> - <item name="label" xsi:type="string" translate="true">Total Quantity</item> - <item name="childDefaults" xsi:type="array"> - <item name="provider" xsi:type="string">sales_order_view_shipment_grid.sales_order_view_shipment_grid.listing_top.listing_filters</item> - </item> - </item> - </argument> - <filterInput name="from"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">from</item> - <item name="label" xsi:type="string" translate="true">From</item> - <item name="placeholder" xsi:type="string" translate="true">From</item> - </item> - </argument> - </filterInput> - <filterInput name="to"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">to</item> - <item name="label" xsi:type="string" translate="true">To</item> - <item name="placeholder" xsi:type="string" translate="true">To</item> - </item> - </argument> - </filterInput> - </filterRange> - <filterSelect name="order_status"> - <argument name="optionsProvider" xsi:type="configurableObject"> - <argument name="class" xsi:type="string">Magento\Sales\Ui\Component\Listing\Column\Status\Options</argument> - </argument> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="caption" xsi:type="string" translate="true">Select...</item> - <item name="dataScope" xsi:type="string">order_status</item> - <item name="label" xsi:type="string" translate="true">Order Status</item> - </item> - </argument> - </filterSelect> <filterSelect name="store_id"> <argument name="optionsProvider" xsi:type="configurableObject"> <argument name="class" xsi:type="string">Magento\Store\Ui\Component\Listing\Column\Store\Options</argument> </argument> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> - <item name="caption" xsi:type="string" translate="true">Select...</item> + <item name="caption" xsi:type="string" translate="true">All Store Views</item> <item name="dataScope" xsi:type="string">store_id</item> <item name="label" xsi:type="string" translate="true">Purchased From</item> </item> </argument> </filterSelect> - <filterInput name="customer_name"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">customer_name</item> - <item name="label" xsi:type="string" translate="true">Customer Name</item> - </item> - </argument> - </filterInput> - <filterInput name="customer_email"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">customer_email</item> - <item name="label" xsi:type="string" translate="true">Customer Email</item> - </item> - </argument> - </filterInput> - <filterSelect name="customer_group_id"> - <argument name="optionsProvider" xsi:type="configurableObject"> - <argument name="class" xsi:type="string">Magento\Customer\Ui\Component\Listing\Column\Group\Options</argument> - </argument> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="caption" xsi:type="string" translate="true">Select...</item> - <item name="dataScope" xsi:type="string">customer_group_id</item> - <item name="label" xsi:type="string" translate="true">Customer Group</item> - </item> - </argument> - </filterSelect> - <filterInput name="billing_address"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">billing_address</item> - <item name="label" xsi:type="string" translate="true">Billing Address</item> - </item> - </argument> - </filterInput> - <filterInput name="shipping_address"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">shipping_address</item> - <item name="label" xsi:type="string" translate="true">Shipping Address</item> - </item> - </argument> - </filterInput> - <filterSelect name="payment_method"> - <argument name="optionsProvider" xsi:type="configurableObject"> - <argument name="class" xsi:type="string">Magento\Payment\Ui\Component\Listing\Column\Method\Options</argument> - </argument> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="caption" xsi:type="string" translate="true">Select...</item> - <item name="dataScope" xsi:type="string">payment_method</item> - <item name="label" xsi:type="string" translate="true">Payment Method</item> - </item> - </argument> - </filterSelect> - <filterInput name="shipping_information"> - <argument name="data" xsi:type="array"> - <item name="config" xsi:type="array"> - <item name="dataScope" xsi:type="string">shipping_information</item> - <item name="label" xsi:type="string" translate="true">Shipping Information</item> - </item> - </argument> - </filterInput> </filters> <massaction name="listing_massaction"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> <item name="selectProvider" xsi:type="string">sales_order_view_shipment_grid.sales_order_view_shipment_grid.sales_order_shipment_columns.ids</item> - <item name="displayArea" xsi:type="string">bottom</item> - <item name="actions" xsi:type="array"> - <item name="pdfshipments_order" xsi:type="array"> - </item> - </item> <item name="indexField" xsi:type="string">entity_id</item> </item> </argument> @@ -334,7 +133,6 @@ <item name="namespace" xsi:type="string">current.paging</item> </item> <item name="selectProvider" xsi:type="string">sales_order_view_shipment_grid.sales_order_view_shipment_grid.sales_order_shipment_columns.ids</item> - <item name="displayArea" xsi:type="string">bottom</item> </item> </argument> </paging> @@ -347,9 +145,14 @@ <item name="namespace" xsi:type="string">current</item> </item> <item name="childDefaults" xsi:type="array"> - <item name="controlVisibility" xsi:type="boolean">true</item> - <item name="actionField" xsi:type="string">actions</item> - <item name="clickAction" xsi:type="string">view</item> + <item name="fieldAction" xsi:type="array"> + <item name="provider" xsi:type="string">sales_order_view_shipment_grid.sales_order_view_shipment_grid.sales_order_shipment_columns.actions</item> + <item name="target" xsi:type="string">applyAction</item> + <item name="params" xsi:type="array"> + <item name="0" xsi:type="string">view</item> + <item name="1" xsi:type="string">${ $.$data.rowIndex }</item> + </item> + </item> <item name="storageConfig" xsi:type="array"> <item name="provider" xsi:type="string">sales_order_view_shipment_grid.sales_order_view_shipment_grid.listing_top.bookmarks</item> <item name="root" xsi:type="string">columns.${ $.index }</item> @@ -358,228 +161,167 @@ </item> </item> </argument> - <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column"> + <selectionsColumn name="ids"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item> - </item> <item name="config" xsi:type="array"> - <item name="draggable" xsi:type="boolean">false</item> <item name="indexField" xsi:type="string">entity_id</item> - <item name="controlVisibility" xsi:type="boolean">false</item> </item> </argument> - </column> + </selectionsColumn> <column name="increment_id"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> - <item name="dataType" xsi:type="string">text</item> + <item name="filter" xsi:type="string">text</item> <item name="sorting" xsi:type="string">asc</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Shipment</item> </item> </argument> </column> <column name="created_at"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">dateRange</item> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item> <item name="dataType" xsi:type="string">date</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Ship Date</item> </item> </argument> </column> <column name="order_increment_id"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> - <item name="dataType" xsi:type="string">text</item> - <item name="sorting" xsi:type="string">asc</item> - <item name="align" xsi:type="string">left</item> + <item name="filter" xsi:type="string">textRange</item> <item name="label" xsi:type="string" translate="true">Order</item> </item> </argument> </column> <column name="order_created_at"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">dateRange</item> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item> <item name="dataType" xsi:type="string">date</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Order Date</item> </item> </argument> </column> <column name="shipping_name"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="filter" xsi:type="string">text</item> <item name="label" xsi:type="string" translate="true">Ship-to Name</item> </item> </argument> </column> <column name="total_qty"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="filter" xsi:type="string">textRange</item> <item name="label" xsi:type="string" translate="true">Total Quantity</item> </item> </argument> </column> - <column name="order_status" class="Magento\Sales\Ui\Component\Listing\Column\Status"> + <column name="order_status"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> - </item> + <item name="options" xsi:type="object">Magento\Sales\Ui\Component\Listing\Column\Status\Options</item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">select</item> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="dataType" xsi:type="string">select</item> <item name="label" xsi:type="string" translate="true">Order Status</item> </item> </argument> </column> <column name="store_id" class="Magento\Store\Ui\Component\Listing\Column\Store"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item> <item name="visible" xsi:type="boolean">false</item> <item name="sortable" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Purchased From</item> </item> </argument> </column> <column name="customer_name"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">text</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Customer Name</item> </item> </argument> </column> <column name="customer_email"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">text</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Email</item> </item> </argument> </column> - <column name="customer_group_id" class="Magento\Sales\Ui\Component\Listing\Column\CustomerGroup"> + <column name="customer_group_id"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> + <item name="options" xsi:type="object">Magento\Customer\Ui\Component\Listing\Column\Group\Options</item> <item name="config" xsi:type="array"> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> + <item name="filter" xsi:type="string">select</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="dataType" xsi:type="string">select</item> <item name="label" xsi:type="string" translate="true">Customer Group</item> </item> </argument> </column> <column name="billing_address" class="Magento\Sales\Ui\Component\Listing\Column\Address"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">text</item> <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Billing Address</item> </item> </argument> </column> <column name="shipping_address" class="Magento\Sales\Ui\Component\Listing\Column\Address"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">text</item> <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Shipping Address</item> </item> </argument> </column> - <column name="payment_method" class="Magento\Sales\Ui\Component\Listing\Column\PaymentMethod"> + <column name="payment_method"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> + <item name="options" xsi:type="object">Magento\Payment\Ui\Component\Listing\Column\Method\Options</item> <item name="config" xsi:type="array"> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item> + <item name="filter" xsi:type="string">select</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> + <item name="dataType" xsi:type="string">select</item> <item name="label" xsi:type="string" translate="true">Payment Method</item> </item> </argument> </column> <column name="shipping_information"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> - </item> <item name="config" xsi:type="array"> + <item name="filter" xsi:type="string">text</item> <item name="visible" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">text</item> - <item name="align" xsi:type="string">left</item> <item name="label" xsi:type="string" translate="true">Shipping Information</item> </item> </argument> </column> - <column name="actions" class="Magento\Sales\Ui\Component\Listing\Column\ViewAction"> + <actionsColumn name="actions" class="Magento\Sales\Ui\Component\Listing\Column\ViewAction"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> - <item name="draggable" xsi:type="boolean">false</item> - <item name="dataType" xsi:type="string">actions</item> <item name="indexField" xsi:type="string">entity_id</item> - <item name="align" xsi:type="string">left</item> - <item name="label" xsi:type="string" translate="true">Action</item> - <item name="data_type" xsi:type="string">actions</item> - <item name="filterable" xsi:type="boolean">false</item> - <item name="sortable" xsi:type="boolean">false</item> <item name="viewUrlPath" xsi:type="string">adminhtml/order_shipment/view</item> <item name="urlEntityParamName" xsi:type="string">shipment_id</item> </item> </argument> - </column> + </actionsColumn> </columns> </listing> diff --git a/app/code/Magento/Sales/view/adminhtml/web/order/create/form.js b/app/code/Magento/Sales/view/adminhtml/web/order/create/form.js index 6d88d084c36635f2c6d0f8f54e04dd491edd9730..1bcd3103237e7d2763d30036bb58bc2fcb73fa44 100644 --- a/app/code/Magento/Sales/view/adminhtml/web/order/create/form.js +++ b/app/code/Magento/Sales/view/adminhtml/web/order/create/form.js @@ -4,16 +4,18 @@ */ define([ - "jquery", - "Magento_Sales/order/create/scripts" -], function(jQuery){ - var $el = jQuery('#edit_form'), - config, - baseUrl, + 'jquery', + 'Magento_Sales/order/create/scripts' +], function (jQuery) { + 'use strict'; + + var $el = jQuery('#edit_form'), + config, + baseUrl, order, payment; - if( !$el.length || !$el.data('order-config') ){ + if (!$el.length || !$el.data('order-config')) { return; } @@ -22,7 +24,7 @@ define([ order = new AdminOrder(config); order.setLoadBaseUrl(baseUrl); - + payment = { switchMethod: order.switchPaymentMethod.bind(order) }; diff --git a/app/code/Magento/Sales/view/adminhtml/web/order/create/scripts.js b/app/code/Magento/Sales/view/adminhtml/web/order/create/scripts.js index da408242575901a134ea5af0fbd6cc7f550b4d1a..90f8b04c5c70b9d4d9fbb88d70e08bd307c83d04 100644 --- a/app/code/Magento/Sales/view/adminhtml/web/order/create/scripts.js +++ b/app/code/Magento/Sales/view/adminhtml/web/order/create/scripts.js @@ -4,1367 +4,1385 @@ */ define([ "jquery", + 'Magento_Ui/js/modal/confirm', + 'Magento_Ui/js/modal/alert', "mage/translate", "prototype", - "Magento_Catalog/catalog/product/composite/configure" -], function(jQuery){ - -window.AdminOrder = new Class.create(); - -AdminOrder.prototype = { - initialize : function(data){ - if(!data) data = {}; - this.loadBaseUrl = false; - this.customerId = data.customer_id ? data.customer_id : false; - this.storeId = data.store_id ? data.store_id : false; - this.currencyId = false; - this.currencySymbol = data.currency_symbol ? data.currency_symbol : ''; - this.addresses = data.addresses ? data.addresses : $H({}); - this.shippingAsBilling = data.shippingAsBilling ? data.shippingAsBilling : false; - this.gridProducts = $H({}); - this.gridProductsGift = $H({}); - this.billingAddressContainer = ''; - this.shippingAddressContainer= ''; - this.isShippingMethodReseted = data.shipping_method_reseted ? data.shipping_method_reseted : false; - this.overlayData = $H({}); - this.giftMessageDataChanged = false; - this.productConfigureAddFields = {}; - this.productPriceBase = {}; - this.collectElementsValue = true; - this.isOnlyVirtualProduct = false; - this.excludedPaymentMethods = []; - this.summarizePrice = true; - Event.observe(window, 'load', (function(){ - this.dataArea = new OrderFormArea('data', $(this.getAreaId('data')), this); - this.itemsArea = Object.extend(new OrderFormArea('items', $(this.getAreaId('items')), this), { - addControlButton: function(button){ - var controlButtonArea = $(this.node).select('.actions')[0]; - if (typeof controlButtonArea != 'undefined') { - var buttons = controlButtonArea.childElements(); - for (var i = 0; i < buttons.length; i++) { - if (buttons[i].innerHTML.include(button.label)) { - return ; + "Magento_Catalog/catalog/product/composite/configure", + 'Magento_Ui/js/lib/view/utils/async' +], function(jQuery, confirm, alert){ + + window.AdminOrder = new Class.create(); + + AdminOrder.prototype = { + initialize : function(data){ + if(!data) data = {}; + this.loadBaseUrl = false; + this.customerId = data.customer_id ? data.customer_id : false; + this.storeId = data.store_id ? data.store_id : false; + this.currencyId = false; + this.currencySymbol = data.currency_symbol ? data.currency_symbol : ''; + this.addresses = data.addresses ? data.addresses : $H({}); + this.shippingAsBilling = data.shippingAsBilling ? data.shippingAsBilling : false; + this.gridProducts = $H({}); + this.gridProductsGift = $H({}); + this.billingAddressContainer = ''; + this.shippingAddressContainer= ''; + this.isShippingMethodReseted = data.shipping_method_reseted ? data.shipping_method_reseted : false; + this.overlayData = $H({}); + this.giftMessageDataChanged = false; + this.productConfigureAddFields = {}; + this.productPriceBase = {}; + this.collectElementsValue = true; + this.isOnlyVirtualProduct = false; + this.excludedPaymentMethods = []; + this.summarizePrice = true; + jQuery.async('#order-items', (function(){ + this.dataArea = new OrderFormArea('data', $(this.getAreaId('data')), this); + this.itemsArea = Object.extend(new OrderFormArea('items', $(this.getAreaId('items')), this), { + addControlButton: function(button){ + var controlButtonArea = $(this.node).select('.actions')[0]; + if (typeof controlButtonArea != 'undefined') { + var buttons = controlButtonArea.childElements(); + for (var i = 0; i < buttons.length; i++) { + if (buttons[i].innerHTML.include(button.label)) { + return ; + } } + button.insertIn(controlButtonArea, 'top'); } - button.insertIn(controlButtonArea, 'top'); } - } - }); - - var searchButton = new ControlButton(jQuery.mage.__('Add Products')), - searchAreaId = this.getAreaId('search'); - searchButton.onClick = function() { - $(searchAreaId).show(); - var el = this; - window.setTimeout(function () { - el.remove(); - }, 10); - }; + }); - this.dataArea.onLoad = this.dataArea.onLoad.wrap(function(proceed) { - proceed(); - this._parent.itemsArea.setNode($(this._parent.getAreaId('items'))); - this._parent.itemsArea.onLoad(); - }); + var searchButton = new ControlButton(jQuery.mage.__('Add Products')), + searchAreaId = this.getAreaId('search'); + searchButton.onClick = function() { + $(searchAreaId).show(); + var el = this; + window.setTimeout(function () { + el.remove(); + }, 10); + }; + + this.dataArea.onLoad = this.dataArea.onLoad.wrap(function(proceed) { + proceed(); + this._parent.itemsArea.setNode($(this._parent.getAreaId('items'))); + this._parent.itemsArea.onLoad(); + }); - this.itemsArea.onLoad = this.itemsArea.onLoad.wrap(function(proceed) { - proceed(); - if ($(searchAreaId) && !$(searchAreaId).visible()) { - this.addControlButton(searchButton); - } - }); - this.areasLoaded(); - this.itemsArea.onLoad(); - }).bind(this)); - - jQuery('#edit_form') - .on('submitOrder', function(){ - jQuery(this).trigger('realOrder'); - }) - .on('realOrder', this._realSubmit.bind(this)); - - }, - - areasLoaded: function(){ - }, - - itemsLoaded: function(){ - }, - - dataLoaded: function(){ - this.dataShow(); - }, - - setLoadBaseUrl : function(url){ - this.loadBaseUrl = url; - }, - - setAddresses : function(addresses){ - this.addresses = addresses; - }, - - addExcludedPaymentMethod : function(method){ - this.excludedPaymentMethods.push(method); - }, - - setCustomerId : function(id){ - this.customerId = id; - this.loadArea('header', true); - $(this.getAreaId('header')).callback = 'setCustomerAfter'; - $('back_order_top_button').hide(); - $('reset_order_top_button').show(); - }, - - setCustomerAfter : function () { - this.customerSelectorHide(); - if (this.storeId) { - $(this.getAreaId('data')).callback = 'dataLoaded'; + this.itemsArea.onLoad = this.itemsArea.onLoad.wrap(function(proceed) { + proceed(); + if ($(searchAreaId) && !$(searchAreaId).visible()) { + this.addControlButton(searchButton); + } + }); + this.areasLoaded(); + this.itemsArea.onLoad(); + }).bind(this)); + + jQuery('#edit_form') + .on('submitOrder', function(){ + jQuery(this).trigger('realOrder'); + }) + .on('realOrder', this._realSubmit.bind(this)); + + }, + + areasLoaded: function(){ + }, + + itemsLoaded: function(){ + }, + + dataLoaded: function(){ + this.dataShow(); + }, + + setLoadBaseUrl : function(url){ + this.loadBaseUrl = url; + }, + + setAddresses : function(addresses){ + this.addresses = addresses; + }, + + addExcludedPaymentMethod : function(method){ + this.excludedPaymentMethods.push(method); + }, + + setCustomerId : function(id){ + this.customerId = id; + this.loadArea('header', true); + $(this.getAreaId('header')).callback = 'setCustomerAfter'; + $('back_order_top_button').hide(); + $('reset_order_top_button').show(); + }, + + setCustomerAfter : function () { + this.customerSelectorHide(); + if (this.storeId) { + $(this.getAreaId('data')).callback = 'dataLoaded'; + this.loadArea(['data'], true); + } + else { + this.storeSelectorShow(); + } + }, + + setStoreId : function(id){ + this.storeId = id; + this.storeSelectorHide(); + this.sidebarShow(); + //this.loadArea(['header', 'sidebar','data'], true); + this.dataShow(); + this.loadArea(['header', 'data'], true); + }, + + setCurrencyId : function(id){ + this.currencyId = id; + //this.loadArea(['sidebar', 'data'], true); this.loadArea(['data'], true); - } - else { - this.storeSelectorShow(); - } - }, - - setStoreId : function(id){ - this.storeId = id; - this.storeSelectorHide(); - this.sidebarShow(); - //this.loadArea(['header', 'sidebar','data'], true); - this.dataShow(); - this.loadArea(['header', 'data'], true); - }, - - setCurrencyId : function(id){ - this.currencyId = id; - //this.loadArea(['sidebar', 'data'], true); - this.loadArea(['data'], true); - }, - - setCurrencySymbol : function(symbol){ - this.currencySymbol = symbol; - }, - - selectAddress : function(el, container){ - id = el.value; - if (id.length == 0) { - id = '0'; - } - if(this.addresses[id]){ - this.fillAddressFields(container, this.addresses[id]); - } - else{ - this.fillAddressFields(container, {}); - } + }, - var data = this.serializeData(container); - data[el.name] = id; - if(this.isShippingField(container) && !this.isShippingMethodReseted){ - this.resetShippingMethod(data); - } - else{ - this.saveData(data); - } - }, + setCurrencySymbol : function(symbol){ + this.currencySymbol = symbol; + }, - isShippingField : function(fieldId){ - if(this.shippingAsBilling){ - return fieldId.include('billing'); - } - return fieldId.include('shipping'); - }, + selectAddress : function(el, container){ + id = el.value; + if (id.length == 0) { + id = '0'; + } + if(this.addresses[id]){ + this.fillAddressFields(container, this.addresses[id]); + } + else{ + this.fillAddressFields(container, {}); + } - isBillingField : function(fieldId){ - return fieldId.include('billing'); - }, + var data = this.serializeData(container); + data[el.name] = id; + if(this.isShippingField(container) && !this.isShippingMethodReseted){ + this.resetShippingMethod(data); + } + else{ + this.saveData(data); + } + }, - bindAddressFields : function(container) { - var fields = $(container).select('input', 'select', 'textarea'); - for(var i=0;i<fields.length;i++){ - Event.observe(fields[i], 'change', this.changeAddressField.bind(this)); - } - }, + isShippingField : function(fieldId){ + if(this.shippingAsBilling){ + return fieldId.include('billing'); + } + return fieldId.include('shipping'); + }, - changeAddressField : function(event){ - var field = Event.element(event); - var re = /[^\[]*\[([^\]]*)_address\]\[([^\]]*)\](\[(\d)\])?/; - var matchRes = field.name.match(re); + isBillingField : function(fieldId){ + return fieldId.include('billing'); + }, - if (!matchRes) { - return; - } + bindAddressFields : function(container) { + var fields = $(container).select('input', 'select', 'textarea'); + for(var i=0;i<fields.length;i++){ + Event.observe(fields[i], 'change', this.changeAddressField.bind(this)); + } + }, - var type = matchRes[1]; - var name = matchRes[2]; - var data; + changeAddressField : function(event){ + var field = Event.element(event); + var re = /[^\[]*\[([^\]]*)_address\]\[([^\]]*)\](\[(\d)\])?/; + var matchRes = field.name.match(re); - if(this.isBillingField(field.id)){ - data = this.serializeData(this.billingAddressContainer) - } - else{ - data = this.serializeData(this.shippingAddressContainer) - } - data = data.toObject(); + if (!matchRes) { + return; + } - if( (type == 'billing' && this.shippingAsBilling) - || (type == 'shipping' && !this.shippingAsBilling) ) { - data['reset_shipping'] = true; - } + var type = matchRes[1]; + var name = matchRes[2]; + var data; - data['order['+type+'_address][customer_address_id]'] = $('order-'+type+'_address_customer_address_id').value; + if(this.isBillingField(field.id)){ + data = this.serializeData(this.billingAddressContainer) + } + else{ + data = this.serializeData(this.shippingAddressContainer) + } + data = data.toObject(); - if (data['reset_shipping']) { - this.resetShippingMethod(data); - } else { - this.saveData(data); - if (name == 'country_id' || name == 'customer_address_id') { - this.loadArea(['shipping_method', 'billing_method', 'totals', 'items'], true, data); + if( (type == 'billing' && this.shippingAsBilling) + || (type == 'shipping' && !this.shippingAsBilling) ) { + data['reset_shipping'] = true; } - // added for reloading of default sender and default recipient for giftmessages - //this.loadArea(['giftmessage'], true, data); - } - }, - - fillAddressFields : function(container, data){ - var regionIdElem = false; - var regionIdElemValue = false; - - var fields = $(container).select('input', 'select', 'textarea'); - var re = /[^\[]*\[[^\]]*\]\[([^\]]*)\](\[(\d)\])?/; - for(var i=0;i<fields.length;i++){ - // skip input type file @Security error code: 1000 - if (fields[i].tagName.toLowerCase() == 'input' && fields[i].type.toLowerCase() == 'file') { - continue; - } - var matchRes = fields[i].name.match(re); - if (matchRes === null) { - continue; - } - var name = matchRes[1]; - var index = matchRes[3]; - - if (index){ - // multiply line - if (data[name]){ - var values = data[name].split("\n"); - fields[i].value = values[index] ? values[index] : ''; + + data['order['+type+'_address][customer_address_id]'] = $('order-'+type+'_address_customer_address_id').value; + + if (data['reset_shipping']) { + this.resetShippingMethod(data); + } else { + this.saveData(data); + if (name == 'country_id' || name == 'customer_address_id') { + this.loadArea(['shipping_method', 'billing_method', 'totals', 'items'], true, data); + } + // added for reloading of default sender and default recipient for giftmessages + //this.loadArea(['giftmessage'], true, data); + } + }, + + fillAddressFields : function(container, data){ + var regionIdElem = false; + var regionIdElemValue = false; + + var fields = $(container).select('input', 'select', 'textarea'); + var re = /[^\[]*\[[^\]]*\]\[([^\]]*)\](\[(\d)\])?/; + for(var i=0;i<fields.length;i++){ + // skip input type file @Security error code: 1000 + if (fields[i].tagName.toLowerCase() == 'input' && fields[i].type.toLowerCase() == 'file') { + continue; + } + var matchRes = fields[i].name.match(re); + if (matchRes === null) { + continue; + } + var name = matchRes[1]; + var index = matchRes[3]; + + if (index){ + // multiply line + if (data[name]){ + var values = data[name].split("\n"); + fields[i].value = values[index] ? values[index] : ''; + } else { + fields[i].value = ''; + } + } else if (fields[i].tagName.toLowerCase() == 'select' && fields[i].multiple) { + // multiselect + if (data[name]) { + values = ['']; + if (Object.isString(data[name])) { + values = data[name].split(','); + } else if (Object.isArray(data[name])) { + values = data[name]; + } + fields[i].setValue(values); + } } else { - fields[i].value = ''; + fields[i].setValue(data[name] ? data[name] : ''); } - } else if (fields[i].tagName.toLowerCase() == 'select' && fields[i].multiple) { - // multiselect - if (data[name]) { - values = ['']; - if (Object.isString(data[name])) { - values = data[name].split(','); - } else if (Object.isArray(data[name])) { - values = data[name]; + + if (fields[i].changeUpdater) fields[i].changeUpdater(); + if (name == 'region' && data['region_id'] && !data['region']){ + fields[i].value = data['region_id']; + } + } + }, + + disableShippingAddress : function(flag) { + this.shippingAsBilling = flag; + if ($('order-shipping_address_customer_address_id')) { + $('order-shipping_address_customer_address_id').disabled = flag; + } + if ($(this.shippingAddressContainer)) { + var dataFields = $(this.shippingAddressContainer).select('input', 'select', 'textarea'); + for (var i = 0; i < dataFields.length; i++) { + dataFields[i].disabled = flag; + + if(this.isOnlyVirtualProduct) { + dataFields[i].setValue(''); } - fields[i].setValue(values); } + var buttons = $(this.shippingAddressContainer).select('button'); + // Add corresponding class to buttons while disabling them + for (i = 0; i < buttons.length; i++) { + buttons[i].disabled = flag; + if (flag) { + buttons[i].addClassName('disabled'); + } else { + buttons[i].removeClassName('disabled'); + } + } + } + }, + + setShippingAsBilling : function(flag){ + var data; + var areasToLoad = ['billing_method', 'shipping_address', 'totals', 'giftmessage']; + this.disableShippingAddress(flag); + if(flag){ + data = this.serializeData(this.billingAddressContainer); } else { - fields[i].setValue(data[name] ? data[name] : ''); + data = this.serializeData(this.shippingAddressContainer); + areasToLoad.push('shipping_method'); } + data = data.toObject(); + data['shipping_as_billing'] = flag ? 1 : 0; + data['reset_shipping'] = 1; + this.loadArea( areasToLoad, true, data); + }, + + resetShippingMethod : function(data){ + var areasToLoad = ['billing_method', 'shipping_address', 'totals', 'giftmessage', 'items']; + if(!this.isOnlyVirtualProduct) { + areasToLoad.push('shipping_method'); + areasToLoad.push('shipping_address'); + } + + data['reset_shipping'] = 1; + this.isShippingMethodReseted = true; + this.loadArea(areasToLoad, true, data); + }, + + loadShippingRates : function(){ + this.isShippingMethodReseted = false; + this.loadArea(['shipping_method', 'totals'], true, {collect_shipping_rates: 1}); + }, + + setShippingMethod : function(method){ + var data = {}; + data['order[shipping_method]'] = method; + this.loadArea(['shipping_method', 'totals', 'billing_method'], true, data); + }, - if (fields[i].changeUpdater) fields[i].changeUpdater(); - if (name == 'region' && data['region_id'] && !data['region']){ - fields[i].value = data['region_id']; + switchPaymentMethod : function(method){ + jQuery('#edit_form').trigger('changePaymentMethod', [method]); + this.setPaymentMethod(method); + var data = {}; + data['order[payment_method]'] = method; + this.loadArea(['card_validation'], true, data); + }, + + setPaymentMethod : function(method){ + if (this.paymentMethod && $('payment_form_'+this.paymentMethod)) { + var form = 'payment_form_'+this.paymentMethod; + [form + '_before', form, form + '_after'].each(function(el) { + var block = $(el); + if (block) { + block.hide(); + block.select('input', 'select', 'textarea').each(function(field) { + field.disabled = true; + }); + } + }); } - } - }, - disableShippingAddress : function(flag) { - this.shippingAsBilling = flag; - if ($('order-shipping_address_customer_address_id')) { - $('order-shipping_address_customer_address_id').disabled = flag; - } - if ($(this.shippingAddressContainer)) { - var dataFields = $(this.shippingAddressContainer).select('input', 'select', 'textarea'); - for (var i = 0; i < dataFields.length; i++) { - dataFields[i].disabled = flag; + if(!this.paymentMethod || method){ + $('order-billing_method_form').select('input', 'select', 'textarea').each(function(elem){ + if(elem.type != 'radio') elem.disabled = true; + }) + } - if(this.isOnlyVirtualProduct) { - dataFields[i].setValue(''); - } + if ($('payment_form_'+method)){ + jQuery('#' + this.getAreaId('billing_method')).trigger('contentUpdated'); + this.paymentMethod = method; + var form = 'payment_form_'+method; + [form + '_before', form, form + '_after'].each(function(el) { + var block = $(el); + if (block) { + block.show(); + block.select('input', 'select', 'textarea').each(function(field) { + field.disabled = false; + if (!el.include('_before') && !el.include('_after') && !field.bindChange) { + field.bindChange = true; + field.paymentContainer = form; + field.method = method; + field.observe('change', this.changePaymentData.bind(this)) + } + },this); + } + },this); } - var buttons = $(this.shippingAddressContainer).select('button'); - // Add corresponding class to buttons while disabling them - for (i = 0; i < buttons.length; i++) { - buttons[i].disabled = flag; - if (flag) { - buttons[i].addClassName('disabled'); + }, + + changePaymentData : function(event){ + var elem = Event.element(event); + if(elem && elem.method){ + var data = this.getPaymentData(elem.method); + if (data) { + this.loadArea(['card_validation'], true, data); } else { - buttons[i].removeClassName('disabled'); + return; } } - } - }, - - setShippingAsBilling : function(flag){ - var data; - var areasToLoad = ['billing_method', 'shipping_address', 'totals', 'giftmessage']; - this.disableShippingAddress(flag); - if(flag){ - data = this.serializeData(this.billingAddressContainer); - } else { - data = this.serializeData(this.shippingAddressContainer); - areasToLoad.push('shipping_method'); - } - data = data.toObject(); - data['shipping_as_billing'] = flag ? 1 : 0; - data['reset_shipping'] = 1; - this.loadArea( areasToLoad, true, data); - }, - - resetShippingMethod : function(data){ - var areasToLoad = ['billing_method', 'shipping_address', 'totals', 'giftmessage', 'items']; - if(!this.isOnlyVirtualProduct) { - areasToLoad.push('shipping_method'); - areasToLoad.push('shipping_address'); - } + }, - data['reset_shipping'] = 1; - this.isShippingMethodReseted = true; - this.loadArea(areasToLoad, true, data); - }, - - loadShippingRates : function(){ - this.isShippingMethodReseted = false; - this.loadArea(['shipping_method', 'totals'], true, {collect_shipping_rates: 1}); - }, - - setShippingMethod : function(method){ - var data = {}; - data['order[shipping_method]'] = method; - this.loadArea(['shipping_method', 'totals', 'billing_method'], true, data); - }, - - switchPaymentMethod : function(method){ - jQuery('#edit_form').trigger('changePaymentMethod', [method]); - this.setPaymentMethod(method); - var data = {}; - data['order[payment_method]'] = method; - this.loadArea(['card_validation'], true, data); - }, - - setPaymentMethod : function(method){ - if (this.paymentMethod && $('payment_form_'+this.paymentMethod)) { - var form = 'payment_form_'+this.paymentMethod; - [form + '_before', form, form + '_after'].each(function(el) { - var block = $(el); - if (block) { - block.hide(); - block.select('input', 'select', 'textarea').each(function(field) { - field.disabled = true; - }); - } - }); - } - - if(!this.paymentMethod || method){ - $('order-billing_method_form').select('input', 'select', 'textarea').each(function(elem){ - if(elem.type != 'radio') elem.disabled = true; - }) - } - - if ($('payment_form_'+method)){ - jQuery('#' + this.getAreaId('billing_method')).trigger('contentUpdated'); - this.paymentMethod = method; - var form = 'payment_form_'+method; - [form + '_before', form, form + '_after'].each(function(el) { - var block = $(el); - if (block) { - block.show(); - block.select('input', 'select', 'textarea').each(function(field) { - field.disabled = false; - if (!el.include('_before') && !el.include('_after') && !field.bindChange) { - field.bindChange = true; - field.paymentContainer = form; - field.method = method; - field.observe('change', this.changePaymentData.bind(this)) - } - },this); + getPaymentData : function(currentMethod){ + if (typeof(currentMethod) == 'undefined') { + if (this.paymentMethod) { + currentMethod = this.paymentMethod; + } else { + return false; } - },this); - } - }, - - changePaymentData : function(event){ - var elem = Event.element(event); - if(elem && elem.method){ - var data = this.getPaymentData(elem.method); - if (data) { - this.loadArea(['card_validation'], true, data); - } else { - return; } - } - }, - - getPaymentData : function(currentMethod){ - if (typeof(currentMethod) == 'undefined') { - if (this.paymentMethod) { - currentMethod = this.paymentMethod; - } else { + if (this.isPaymentValidationAvailable() == false) { return false; } - } - if (this.isPaymentValidationAvailable() == false) { - return false; - } - var data = {}; - var fields = $('payment_form_' + currentMethod).select('input', 'select'); - for(var i=0;i<fields.length;i++){ - data[fields[i].name] = fields[i].getValue(); - } - if ((typeof data['payment[cc_type]']) != 'undefined' && (!data['payment[cc_type]'] || !data['payment[cc_number]'])) { - return false; - } - return data; - }, - - applyCoupon : function(code){ - this.loadArea(['items', 'shipping_method', 'totals', 'billing_method'], true, {'order[coupon][code]':code, reset_shipping: true}); - this.orderItemChanged = false; - }, - - addProduct : function(id){ - this.loadArea(['items', 'shipping_method', 'totals', 'billing_method'], true, {add_product:id, reset_shipping: true}); - }, - - removeQuoteItem : function(id){ - this.loadArea(['items', 'shipping_method', 'totals', 'billing_method'], true, - {remove_item:id, from:'quote',reset_shipping: true}); - }, - - moveQuoteItem : function(id, to){ - this.loadArea(['sidebar_'+to, 'items', 'shipping_method', 'totals', 'billing_method'], this.getAreaId('items'), - {move_item:id, to:to, reset_shipping: true}); - }, - - productGridShow : function(buttonElement){ - this.productGridShowButton = buttonElement; - Element.hide(buttonElement); - this.showArea('search'); - }, - - productGridRowInit : function(grid, row){ - var checkbox = $(row).select('.checkbox')[0]; - var inputs = $(row).select('.input-text'); - if (checkbox && inputs.length > 0) { - checkbox.inputElements = inputs; - for (var i = 0; i < inputs.length; i++) { - var input = inputs[i]; - input.checkboxElement = checkbox; - - var product = this.gridProducts.get(checkbox.value); - if (product) { - var defaultValue = product[input.name]; - if (defaultValue) { - if (input.name == 'giftmessage') { - input.checked = true; - } else { - input.value = defaultValue; + var data = {}; + var fields = $('payment_form_' + currentMethod).select('input', 'select'); + for(var i=0;i<fields.length;i++){ + data[fields[i].name] = fields[i].getValue(); + } + if ((typeof data['payment[cc_type]']) != 'undefined' && (!data['payment[cc_type]'] || !data['payment[cc_number]'])) { + return false; + } + return data; + }, + + applyCoupon : function(code){ + this.loadArea(['items', 'shipping_method', 'totals', 'billing_method'], true, {'order[coupon][code]':code, reset_shipping: true}); + this.orderItemChanged = false; + }, + + addProduct : function(id){ + this.loadArea(['items', 'shipping_method', 'totals', 'billing_method'], true, {add_product:id, reset_shipping: true}); + }, + + removeQuoteItem : function(id){ + this.loadArea(['items', 'shipping_method', 'totals', 'billing_method'], true, + {remove_item:id, from:'quote',reset_shipping: true}); + }, + + moveQuoteItem : function(id, to){ + this.loadArea(['sidebar_'+to, 'items', 'shipping_method', 'totals', 'billing_method'], this.getAreaId('items'), + {move_item:id, to:to, reset_shipping: true}); + }, + + productGridShow : function(buttonElement){ + this.productGridShowButton = buttonElement; + Element.hide(buttonElement); + this.showArea('search'); + }, + + productGridRowInit : function(grid, row){ + var checkbox = $(row).select('.checkbox')[0]; + var inputs = $(row).select('.input-text'); + if (checkbox && inputs.length > 0) { + checkbox.inputElements = inputs; + for (var i = 0; i < inputs.length; i++) { + var input = inputs[i]; + input.checkboxElement = checkbox; + + var product = this.gridProducts.get(checkbox.value); + if (product) { + var defaultValue = product[input.name]; + if (defaultValue) { + if (input.name == 'giftmessage') { + input.checked = true; + } else { + input.value = defaultValue; + } } } - } - input.disabled = !checkbox.checked || input.hasClassName('input-inactive'); + input.disabled = !checkbox.checked || input.hasClassName('input-inactive'); - Event.observe(input,'keyup', this.productGridRowInputChange.bind(this)); - Event.observe(input,'change',this.productGridRowInputChange.bind(this)); + Event.observe(input,'keyup', this.productGridRowInputChange.bind(this)); + Event.observe(input,'change',this.productGridRowInputChange.bind(this)); + } } - } - }, - - productGridRowInputChange : function(event){ - var element = Event.element(event); - if (element && element.checkboxElement && element.checkboxElement.checked){ - if (element.name!='giftmessage' || element.checked) { - this.gridProducts.get(element.checkboxElement.value)[element.name] = element.value; - } else if (element.name=='giftmessage' && this.gridProducts.get(element.checkboxElement.value)[element.name]) { - delete(this.gridProducts.get(element.checkboxElement.value)[element.name]); + }, + + productGridRowInputChange : function(event){ + var element = Event.element(event); + if (element && element.checkboxElement && element.checkboxElement.checked){ + if (element.name!='giftmessage' || element.checked) { + this.gridProducts.get(element.checkboxElement.value)[element.name] = element.value; + } else if (element.name=='giftmessage' && this.gridProducts.get(element.checkboxElement.value)[element.name]) { + delete(this.gridProducts.get(element.checkboxElement.value)[element.name]); + } } - } - }, - - productGridRowClick : function(grid, event){ - var trElement = Event.findElement(event, 'tr'); - var qtyElement = trElement.select('input[name="qty"]')[0]; - var eventElement = Event.element(event); - var isInputCheckbox = eventElement.tagName == 'INPUT' && eventElement.type == 'checkbox'; - var isInputQty = eventElement.tagName == 'INPUT' && eventElement.name == 'qty'; - if (trElement && !isInputQty) { - var checkbox = Element.select(trElement, 'input[type="checkbox"]')[0]; - var confLink = Element.select(trElement, 'a')[0]; - var priceColl = Element.select(trElement, '.price')[0]; - if (checkbox) { - // processing non composite product - if (confLink.readAttribute('disabled')) { - var checked = isInputCheckbox ? checkbox.checked : !checkbox.checked; - grid.setCheckboxChecked(checkbox, checked); - // processing composite product - } else if (isInputCheckbox && !checkbox.checked) { - grid.setCheckboxChecked(checkbox, false); - // processing composite product - } else if (!isInputCheckbox || (isInputCheckbox && checkbox.checked)) { - var listType = confLink.readAttribute('list_type'); - var productId = confLink.readAttribute('product_id'); - if (typeof this.productPriceBase[productId] == 'undefined') { - var priceBase = priceColl.innerHTML.match(/.*?([\d,]+\.?\d*)/); - if (!priceBase) { - this.productPriceBase[productId] = 0; - } else { - this.productPriceBase[productId] = parseFloat(priceBase[1].replace(/,/g,'')); + }, + + productGridRowClick : function(grid, event){ + var trElement = Event.findElement(event, 'tr'); + var qtyElement = trElement.select('input[name="qty"]')[0]; + var eventElement = Event.element(event); + var isInputCheckbox = eventElement.tagName == 'INPUT' && eventElement.type == 'checkbox'; + var isInputQty = eventElement.tagName == 'INPUT' && eventElement.name == 'qty'; + if (trElement && !isInputQty) { + var checkbox = Element.select(trElement, 'input[type="checkbox"]')[0]; + var confLink = Element.select(trElement, 'a')[0]; + var priceColl = Element.select(trElement, '.price')[0]; + if (checkbox) { + // processing non composite product + if (confLink.readAttribute('disabled')) { + var checked = isInputCheckbox ? checkbox.checked : !checkbox.checked; + grid.setCheckboxChecked(checkbox, checked); + // processing composite product + } else if (isInputCheckbox && !checkbox.checked) { + grid.setCheckboxChecked(checkbox, false); + // processing composite product + } else if (!isInputCheckbox || (isInputCheckbox && checkbox.checked)) { + var listType = confLink.readAttribute('list_type'); + var productId = confLink.readAttribute('product_id'); + if (typeof this.productPriceBase[productId] == 'undefined') { + var priceBase = priceColl.innerHTML.match(/.*?([\d,]+\.?\d*)/); + if (!priceBase) { + this.productPriceBase[productId] = 0; + } else { + this.productPriceBase[productId] = parseFloat(priceBase[1].replace(/,/g,'')); + } } + productConfigure.setConfirmCallback(listType, function() { + // sync qty of popup and qty of grid + var confirmedCurrentQty = productConfigure.getCurrentConfirmedQtyElement(); + if (qtyElement && confirmedCurrentQty && !isNaN(confirmedCurrentQty.value)) { + qtyElement.value = confirmedCurrentQty.value; + } + // calc and set product price + var productPrice = this._calcProductPrice(); + if (this._isSummarizePrice()) { + productPrice += this.productPriceBase[productId]; + } + productPrice = parseFloat(productPrice); + priceColl.innerHTML = this.currencySymbol + productPrice.toFixed(2); + // and set checkbox checked + grid.setCheckboxChecked(checkbox, true); + }.bind(this)); + productConfigure.setCancelCallback(listType, function() { + if (!$(productConfigure.confirmedCurrentId) || !$(productConfigure.confirmedCurrentId).innerHTML) { + grid.setCheckboxChecked(checkbox, false); + } + }); + productConfigure.setShowWindowCallback(listType, function() { + // sync qty of grid and qty of popup + var formCurrentQty = productConfigure.getCurrentFormQtyElement(); + if (formCurrentQty && qtyElement && !isNaN(qtyElement.value)) { + formCurrentQty.value = qtyElement.value; + } + }.bind(this)); + productConfigure.showItemConfiguration(listType, productId); } - productConfigure.setConfirmCallback(listType, function() { - // sync qty of popup and qty of grid - var confirmedCurrentQty = productConfigure.getCurrentConfirmedQtyElement(); - if (qtyElement && confirmedCurrentQty && !isNaN(confirmedCurrentQty.value)) { - qtyElement.value = confirmedCurrentQty.value; - } - // calc and set product price - var productPrice = this._calcProductPrice(); - if (this._isSummarizePrice()) { - productPrice += this.productPriceBase[productId]; - } - productPrice = parseFloat(productPrice); - priceColl.innerHTML = this.currencySymbol + productPrice.toFixed(2); - // and set checkbox checked - grid.setCheckboxChecked(checkbox, true); - }.bind(this)); - productConfigure.setCancelCallback(listType, function() { - if (!$(productConfigure.confirmedCurrentId) || !$(productConfigure.confirmedCurrentId).innerHTML) { - grid.setCheckboxChecked(checkbox, false); - } - }); - productConfigure.setShowWindowCallback(listType, function() { - // sync qty of grid and qty of popup - var formCurrentQty = productConfigure.getCurrentFormQtyElement(); - if (formCurrentQty && qtyElement && !isNaN(qtyElement.value)) { - formCurrentQty.value = qtyElement.value; - } - }.bind(this)); - productConfigure.showItemConfiguration(listType, productId); } } - } - }, - - /** - * Is need to summarize price - */ - _isSummarizePrice: function(elm) { - if (elm && elm.hasAttribute('summarizePrice')) { - this.summarizePrice = parseInt(elm.readAttribute('summarizePrice')); - } - return this.summarizePrice; - }, - /** - * Calc product price through its options - */ - _calcProductPrice: function () { - var productPrice = 0; - var getPriceFields = function (elms) { + }, + + /** + * Is need to summarize price + */ + _isSummarizePrice: function(elm) { + if (elm && elm.hasAttribute('summarizePrice')) { + this.summarizePrice = parseInt(elm.readAttribute('summarizePrice')); + } + return this.summarizePrice; + }, + /** + * Calc product price through its options + */ + _calcProductPrice: function () { var productPrice = 0; - var getPrice = function (elm) { - var optQty = 1; - if (elm.hasAttribute('qtyId')) { - if (!$(elm.getAttribute('qtyId')).value) { - return 0; - } else { - optQty = parseFloat($(elm.getAttribute('qtyId')).value); + var getPriceFields = function (elms) { + var productPrice = 0; + var getPrice = function (elm) { + var optQty = 1; + if (elm.hasAttribute('qtyId')) { + if (!$(elm.getAttribute('qtyId')).value) { + return 0; + } else { + optQty = parseFloat($(elm.getAttribute('qtyId')).value); + } } - } - if (elm.hasAttribute('price') && !elm.disabled) { - return parseFloat(elm.readAttribute('price')) * optQty; - } - return 0; - }; - for(var i = 0; i < elms.length; i++) { - if (elms[i].type == 'select-one' || elms[i].type == 'select-multiple') { - for(var ii = 0; ii < elms[i].options.length; ii++) { - if (elms[i].options[ii].selected) { - if (this._isSummarizePrice(elms[i].options[ii])) { - productPrice += getPrice(elms[i].options[ii]); - } else { - productPrice = getPrice(elms[i].options[ii]); + if (elm.hasAttribute('price') && !elm.disabled) { + return parseFloat(elm.readAttribute('price')) * optQty; + } + return 0; + }; + for(var i = 0; i < elms.length; i++) { + if (elms[i].type == 'select-one' || elms[i].type == 'select-multiple') { + for(var ii = 0; ii < elms[i].options.length; ii++) { + if (elms[i].options[ii].selected) { + if (this._isSummarizePrice(elms[i].options[ii])) { + productPrice += getPrice(elms[i].options[ii]); + } else { + productPrice = getPrice(elms[i].options[ii]); + } } } } - } - else if (((elms[i].type == 'checkbox' || elms[i].type == 'radio') && elms[i].checked) + else if (((elms[i].type == 'checkbox' || elms[i].type == 'radio') && elms[i].checked) || ((elms[i].type == 'file' || elms[i].type == 'text' || elms[i].type == 'textarea' || elms[i].type == 'hidden') - && Form.Element.getValue(elms[i])) - ) { - if (this._isSummarizePrice(elms[i])) { - productPrice += getPrice(elms[i]); - } else { - productPrice = getPrice(elms[i]); + && Form.Element.getValue(elms[i])) + ) { + if (this._isSummarizePrice(elms[i])) { + productPrice += getPrice(elms[i]); + } else { + productPrice = getPrice(elms[i]); + } } } - } + return productPrice; + }.bind(this); + productPrice += getPriceFields($(productConfigure.confirmedCurrentId).getElementsByTagName('input')); + productPrice += getPriceFields($(productConfigure.confirmedCurrentId).getElementsByTagName('select')); + productPrice += getPriceFields($(productConfigure.confirmedCurrentId).getElementsByTagName('textarea')); return productPrice; - }.bind(this); - productPrice += getPriceFields($(productConfigure.confirmedCurrentId).getElementsByTagName('input')); - productPrice += getPriceFields($(productConfigure.confirmedCurrentId).getElementsByTagName('select')); - productPrice += getPriceFields($(productConfigure.confirmedCurrentId).getElementsByTagName('textarea')); - return productPrice; - }, - - productGridCheckboxCheck : function(grid, element, checked){ - if (checked) { - if(element.inputElements) { - this.gridProducts.set(element.value, {}); - var product = this.gridProducts.get(element.value); - for (var i = 0; i < element.inputElements.length; i++) { - var input = element.inputElements[i]; - if (!input.hasClassName('input-inactive')) { - input.disabled = false; - if (input.name == 'qty' && !input.value) { - input.value = 1; + }, + + productGridCheckboxCheck : function(grid, element, checked){ + if (checked) { + if(element.inputElements) { + this.gridProducts.set(element.value, {}); + var product = this.gridProducts.get(element.value); + for (var i = 0; i < element.inputElements.length; i++) { + var input = element.inputElements[i]; + if (!input.hasClassName('input-inactive')) { + input.disabled = false; + if (input.name == 'qty' && !input.value) { + input.value = 1; + } } - } - if (input.checked || input.name != 'giftmessage') { - product[input.name] = input.value; - } else if (product[input.name]) { - delete(product[input.name]); + if (input.checked || input.name != 'giftmessage') { + product[input.name] = input.value; + } else if (product[input.name]) { + delete(product[input.name]); + } + } + } + } else { + if(element.inputElements){ + for(var i = 0; i < element.inputElements.length; i++) { + element.inputElements[i].disabled = true; } } + this.gridProducts.unset(element.value); } - } else { - if(element.inputElements){ - for(var i = 0; i < element.inputElements.length; i++) { - element.inputElements[i].disabled = true; + grid.reloadParams = {'products[]':this.gridProducts.keys()}; + }, + + /** + * Submit configured products to quote + */ + productGridAddSelected : function(){ + if(this.productGridShowButton) Element.show(this.productGridShowButton); + var area = ['search', 'items', 'shipping_method', 'totals', 'giftmessage','billing_method']; + // prepare additional fields and filtered items of products + var fieldsPrepare = {}; + var itemsFilter = []; + var products = this.gridProducts.toObject(); + for (var productId in products) { + itemsFilter.push(productId); + var paramKey = 'item['+productId+']'; + for (var productParamKey in products[productId]) { + paramKey += '['+productParamKey+']'; + fieldsPrepare[paramKey] = products[productId][productParamKey]; } } - this.gridProducts.unset(element.value); - } - grid.reloadParams = {'products[]':this.gridProducts.keys()}; - }, - - /** - * Submit configured products to quote - */ - productGridAddSelected : function(){ - if(this.productGridShowButton) Element.show(this.productGridShowButton); - var area = ['search', 'items', 'shipping_method', 'totals', 'giftmessage','billing_method']; - // prepare additional fields and filtered items of products - var fieldsPrepare = {}; - var itemsFilter = []; - var products = this.gridProducts.toObject(); - for (var productId in products) { - itemsFilter.push(productId); - var paramKey = 'item['+productId+']'; - for (var productParamKey in products[productId]) { - paramKey += '['+productParamKey+']'; - fieldsPrepare[paramKey] = products[productId][productParamKey]; + this.productConfigureSubmit('product_to_add', area, fieldsPrepare, itemsFilter); + productConfigure.clean('quote_items'); + this.hideArea('search'); + this.gridProducts = $H({}); + }, + + selectCustomer : function(grid, event){ + var element = Event.findElement(event, 'tr'); + if (element.title){ + this.setCustomerId(element.title); } - } - this.productConfigureSubmit('product_to_add', area, fieldsPrepare, itemsFilter); - productConfigure.clean('quote_items'); - this.hideArea('search'); - this.gridProducts = $H({}); - }, - - selectCustomer : function(grid, event){ - var element = Event.findElement(event, 'tr'); - if (element.title){ - this.setCustomerId(element.title); - } - }, - - customerSelectorHide : function(){ - this.hideArea('customer-selector'); - }, + }, - customerSelectorShow : function(){ - this.showArea('customer-selector'); - }, + customerSelectorHide : function(){ + this.hideArea('customer-selector'); + }, - storeSelectorHide : function(){ - this.hideArea('store-selector'); - }, + customerSelectorShow : function(){ + this.showArea('customer-selector'); + }, - storeSelectorShow : function(){ - this.showArea('store-selector'); - }, + storeSelectorHide : function(){ + this.hideArea('store-selector'); + }, - dataHide : function(){ - this.hideArea('data'); - }, + storeSelectorShow : function(){ + this.showArea('store-selector'); + }, - dataShow : function(){ - if ($('submit_order_top_button')) { - $('submit_order_top_button').show(); - } - this.showArea('data'); - }, - - clearShoppingCart : function(confirmMessage){ - if (confirm(confirmMessage)) { - this.collectElementsValue = false; - order.sidebarApplyChanges({'sidebar[empty_customer_cart]': 1}); - this.collectElementsValue = true; - } - }, + dataHide : function(){ + this.hideArea('data'); + }, - sidebarApplyChanges : function(auxiliaryParams) { - if ($(this.getAreaId('sidebar'))) { - var data = {}; - if (this.collectElementsValue) { - var elems = $(this.getAreaId('sidebar')).select('input'); - for (var i=0; i < elems.length; i++) { - if (elems[i].getValue()) { - data[elems[i].name] = elems[i].getValue(); + dataShow : function(){ + if ($('submit_order_top_button')) { + $('submit_order_top_button').show(); + } + this.showArea('data'); + }, + + clearShoppingCart : function(confirmMessage){ + var self = this; + + confirm({ + content: confirmMessage, + actions: { + confirm: function() { + self.collectElementsValue = false; + order.sidebarApplyChanges({'sidebar[empty_customer_cart]': 1}); + self.collectElementsValue = true; } } - } - if (auxiliaryParams instanceof Object) { - for (var paramName in auxiliaryParams) { - data[paramName] = String(auxiliaryParams[paramName]); + }); + }, + + sidebarApplyChanges : function(auxiliaryParams) { + if ($(this.getAreaId('sidebar'))) { + var data = {}; + if (this.collectElementsValue) { + var elems = $(this.getAreaId('sidebar')).select('input'); + for (var i=0; i < elems.length; i++) { + if (elems[i].getValue()) { + data[elems[i].name] = elems[i].getValue(); + } + } + } + if (auxiliaryParams instanceof Object) { + for (var paramName in auxiliaryParams) { + data[paramName] = String(auxiliaryParams[paramName]); + } } + data.reset_shipping = true; + this.loadArea(['sidebar', 'items', 'shipping_method', 'billing_method','totals', 'giftmessage'], true, data); } - data.reset_shipping = true; - this.loadArea(['sidebar', 'items', 'shipping_method', 'billing_method','totals', 'giftmessage'], true, data); - } - }, + }, - sidebarHide : function(){ - if(this.storeId === false && $('page:left') && $('page:container')){ - $('page:left').hide(); - $('page:container').removeClassName('container'); - $('page:container').addClassName('container-collapsed'); - } - }, + sidebarHide : function(){ + if(this.storeId === false && $('page:left') && $('page:container')){ + $('page:left').hide(); + $('page:container').removeClassName('container'); + $('page:container').addClassName('container-collapsed'); + } + }, - sidebarShow : function(){ - if($('page:left') && $('page:container')){ - $('page:left').show(); - $('page:container').removeClassName('container-collapsed'); - $('page:container').addClassName('container'); - } - }, - - /** - * Show configuration of product and add handlers on submit form - * - * @param productId - */ - sidebarConfigureProduct: function (listType, productId, itemId) { - // create additional fields - var params = {}; - params.reset_shipping = true; - params.add_product = productId; - this.prepareParams(params); - for (var i in params) { - if (params[i] === null) { - unset(params[i]); - } else if (typeof(params[i]) == 'boolean') { - params[i] = params[i] ? 1 : 0; + sidebarShow : function(){ + if($('page:left') && $('page:container')){ + $('page:left').show(); + $('page:container').removeClassName('container-collapsed'); + $('page:container').addClassName('container'); } - } - var fields = []; - for (var name in params) { - fields.push(new Element('input', {type: 'hidden', name: name, value: params[name]})); - } - // add additional fields before triggered submit - productConfigure.setBeforeSubmitCallback(listType, function() { - productConfigure.addFields(fields); - }.bind(this)); - // response handler - productConfigure.setOnLoadIFrameCallback(listType, function(response) { - if (!response.ok) { - return; + }, + + /** + * Show configuration of product and add handlers on submit form + * + * @param productId + */ + sidebarConfigureProduct: function (listType, productId, itemId) { + // create additional fields + var params = {}; + params.reset_shipping = true; + params.add_product = productId; + this.prepareParams(params); + for (var i in params) { + if (params[i] === null) { + unset(params[i]); + } else if (typeof(params[i]) == 'boolean') { + params[i] = params[i] ? 1 : 0; + } } - this.loadArea(['items', 'shipping_method', 'billing_method','totals', 'giftmessage'], true); - }.bind(this)); - // show item configuration - itemId = itemId ? itemId : productId; - productConfigure.showItemConfiguration(listType, itemId); - return false; - }, - - removeSidebarItem : function(id, from){ - this.loadArea(['sidebar_'+from], 'sidebar_data_'+from, {remove_item:id, from:from}); - }, - - itemsUpdate : function(){ - var area = ['sidebar', 'items', 'shipping_method', 'billing_method','totals', 'giftmessage']; - // prepare additional fields - var fieldsPrepare = {update_items: 1}; - var info = $('order-items_grid').select('input', 'select', 'textarea'); - for(var i=0; i<info.length; i++){ - if(!info[i].disabled && (info[i].type != 'checkbox' || info[i].checked)) { - fieldsPrepare[info[i].name] = info[i].getValue(); + var fields = []; + for (var name in params) { + fields.push(new Element('input', {type: 'hidden', name: name, value: params[name]})); } - } - fieldsPrepare = Object.extend(fieldsPrepare, this.productConfigureAddFields); - this.productConfigureSubmit('quote_items', area, fieldsPrepare); - this.orderItemChanged = false; - }, - - itemsOnchangeBind : function(){ - var elems = $('order-items_grid').select('input', 'select', 'textarea'); - for(var i=0; i<elems.length; i++){ - if(!elems[i].bindOnchange){ - elems[i].bindOnchange = true; - elems[i].observe('change', this.itemChange.bind(this)) + // add additional fields before triggered submit + productConfigure.setBeforeSubmitCallback(listType, function() { + productConfigure.addFields(fields); + }.bind(this)); + // response handler + productConfigure.setOnLoadIFrameCallback(listType, function(response) { + if (!response.ok) { + return; + } + this.loadArea(['items', 'shipping_method', 'billing_method','totals', 'giftmessage'], true); + }.bind(this)); + // show item configuration + itemId = itemId ? itemId : productId; + productConfigure.showItemConfiguration(listType, itemId); + return false; + }, + + removeSidebarItem : function(id, from){ + this.loadArea(['sidebar_'+from], 'sidebar_data_'+from, {remove_item:id, from:from}); + }, + + itemsUpdate : function(){ + var area = ['sidebar', 'items', 'shipping_method', 'billing_method','totals', 'giftmessage']; + // prepare additional fields + var fieldsPrepare = {update_items: 1}; + var info = $('order-items_grid').select('input', 'select', 'textarea'); + for(var i=0; i<info.length; i++){ + if(!info[i].disabled && (info[i].type != 'checkbox' || info[i].checked)) { + fieldsPrepare[info[i].name] = info[i].getValue(); + } } - } - }, - - itemChange : function(event){ - this.giftmessageOnItemChange(event); - this.orderItemChanged = true; - }, - - /** - * Submit batch of configured products - * - * @param listType - * @param area - * @param fieldsPrepare - * @param itemsFilter - */ - productConfigureSubmit : function(listType, area, fieldsPrepare, itemsFilter) { - // prepare loading areas and build url - area = this.prepareArea(area); - this.loadingAreas = area; - var url = this.loadBaseUrl + 'block/' + area + '?isAjax=true'; - - // prepare additional fields - fieldsPrepare = this.prepareParams(fieldsPrepare); - fieldsPrepare.reset_shipping = 1; - fieldsPrepare.json = 1; - - // create fields - var fields = []; - for (var name in fieldsPrepare) { - fields.push(new Element('input', {type: 'hidden', name: name, value: fieldsPrepare[name]})); - } - productConfigure.addFields(fields); + fieldsPrepare = Object.extend(fieldsPrepare, this.productConfigureAddFields); + this.productConfigureSubmit('quote_items', area, fieldsPrepare); + this.orderItemChanged = false; + }, + + itemsOnchangeBind : function(){ + var elems = $('order-items_grid').select('input', 'select', 'textarea'); + for(var i=0; i<elems.length; i++){ + if(!elems[i].bindOnchange){ + elems[i].bindOnchange = true; + elems[i].observe('change', this.itemChange.bind(this)) + } + } + }, + + itemChange : function(event){ + this.giftmessageOnItemChange(event); + this.orderItemChanged = true; + }, + + /** + * Submit batch of configured products + * + * @param listType + * @param area + * @param fieldsPrepare + * @param itemsFilter + */ + productConfigureSubmit : function(listType, area, fieldsPrepare, itemsFilter) { + // prepare loading areas and build url + area = this.prepareArea(area); + this.loadingAreas = area; + var url = this.loadBaseUrl + 'block/' + area + '?isAjax=true'; - // filter items - if (itemsFilter) { - productConfigure.addItemsFilter(listType, itemsFilter); - } + // prepare additional fields + fieldsPrepare = this.prepareParams(fieldsPrepare); + fieldsPrepare.reset_shipping = 1; + fieldsPrepare.json = 1; - // prepare and do submit - productConfigure.addListType(listType, {urlSubmit: url}); - productConfigure.setOnLoadIFrameCallback(listType, function(response){ - this.loadAreaResponseHandler(response); - }.bind(this)); - productConfigure.submit(listType); - // clean - this.productConfigureAddFields = {}; - }, - - /** - * Show configuration of quote item - * - * @param itemId - */ - showQuoteItemConfiguration: function(itemId){ - var listType = 'quote_items'; - var qtyElement = $('order-items_grid').select('input[name="item\['+itemId+'\]\[qty\]"]')[0]; - productConfigure.setConfirmCallback(listType, function() { - // sync qty of popup and qty of grid - var confirmedCurrentQty = productConfigure.getCurrentConfirmedQtyElement(); - if (qtyElement && confirmedCurrentQty && !isNaN(confirmedCurrentQty.value)) { - qtyElement.value = confirmedCurrentQty.value; - } - this.productConfigureAddFields['item['+itemId+'][configured]'] = 1; - - }.bind(this)); - productConfigure.setShowWindowCallback(listType, function() { - // sync qty of grid and qty of popup - var formCurrentQty = productConfigure.getCurrentFormQtyElement(); - if (formCurrentQty && qtyElement && !isNaN(qtyElement.value)) { - formCurrentQty.value = qtyElement.value; - } - }.bind(this)); - productConfigure.showItemConfiguration(listType, itemId); - }, - - accountFieldsBind : function(container){ - if($(container)){ - var fields = $(container).select('input', 'select', 'textarea'); - for(var i=0; i<fields.length; i++){ - if(fields[i].id == 'group_id'){ - fields[i].observe('change', this.accountGroupChange.bind(this)) + // create fields + var fields = []; + for (var name in fieldsPrepare) { + fields.push(new Element('input', {type: 'hidden', name: name, value: fieldsPrepare[name]})); + } + productConfigure.addFields(fields); + + // filter items + if (itemsFilter) { + productConfigure.addItemsFilter(listType, itemsFilter); + } + + // prepare and do submit + productConfigure.addListType(listType, {urlSubmit: url}); + productConfigure.setOnLoadIFrameCallback(listType, function(response){ + this.loadAreaResponseHandler(response); + }.bind(this)); + productConfigure.submit(listType); + // clean + this.productConfigureAddFields = {}; + }, + + /** + * Show configuration of quote item + * + * @param itemId + */ + showQuoteItemConfiguration: function(itemId){ + var listType = 'quote_items'; + var qtyElement = $('order-items_grid').select('input[name="item\['+itemId+'\]\[qty\]"]')[0]; + productConfigure.setConfirmCallback(listType, function() { + // sync qty of popup and qty of grid + var confirmedCurrentQty = productConfigure.getCurrentConfirmedQtyElement(); + if (qtyElement && confirmedCurrentQty && !isNaN(confirmedCurrentQty.value)) { + qtyElement.value = confirmedCurrentQty.value; } - else{ - fields[i].observe('change', this.accountFieldChange.bind(this)) + this.productConfigureAddFields['item['+itemId+'][configured]'] = 1; + + }.bind(this)); + productConfigure.setShowWindowCallback(listType, function() { + // sync qty of grid and qty of popup + var formCurrentQty = productConfigure.getCurrentFormQtyElement(); + if (formCurrentQty && qtyElement && !isNaN(qtyElement.value)) { + formCurrentQty.value = qtyElement.value; + } + }.bind(this)); + productConfigure.showItemConfiguration(listType, itemId); + }, + + accountFieldsBind : function(container){ + if($(container)){ + var fields = $(container).select('input', 'select', 'textarea'); + for(var i=0; i<fields.length; i++){ + if(fields[i].id == 'group_id'){ + fields[i].observe('change', this.accountGroupChange.bind(this)) + } + else{ + fields[i].observe('change', this.accountFieldChange.bind(this)) + } } } - } - }, + }, - accountGroupChange : function(){ - this.loadArea(['data'], true, this.serializeData('order-form_account').toObject()); - }, + accountGroupChange : function(){ + this.loadArea(['data'], true, this.serializeData('order-form_account').toObject()); + }, - accountFieldChange : function(){ - this.saveData(this.serializeData('order-form_account')); - }, + accountFieldChange : function(){ + this.saveData(this.serializeData('order-form_account')); + }, - commentFieldsBind : function(container){ - if($(container)){ - var fields = $(container).select('input', 'textarea'); - for(var i=0; i<fields.length; i++) - fields[i].observe('change', this.commentFieldChange.bind(this)) - } - }, + commentFieldsBind : function(container){ + if($(container)){ + var fields = $(container).select('input', 'textarea'); + for(var i=0; i<fields.length; i++) + fields[i].observe('change', this.commentFieldChange.bind(this)) + } + }, - commentFieldChange : function(){ - this.saveData(this.serializeData('order-comment')); - }, + commentFieldChange : function(){ + this.saveData(this.serializeData('order-comment')); + }, - giftmessageFieldsBind : function(container){ - if($(container)){ - var fields = $(container).select('input', 'textarea'); - for(var i=0; i<fields.length; i++) - fields[i].observe('change', this.giftmessageFieldChange.bind(this)) - } - }, - - giftmessageFieldChange : function(){ - this.giftMessageDataChanged = true; - }, - - giftmessageOnItemChange : function(event) { - var element = Event.element(event); - if(element.name.indexOf("giftmessage") != -1 && element.type == "checkbox" && !element.checked) { - var messages = $("order-giftmessage").select('textarea'); - var name; - for(var i=0; i<messages.length; i++) { - name = messages[i].id.split("_"); - if(name.length < 2) continue; - if (element.name.indexOf("[" + name[1] + "]") != -1 && messages[i].value != "") { - alert("First, clean the Message field in Gift Message form"); - element.checked = true; + giftmessageFieldsBind : function(container){ + if($(container)){ + var fields = $(container).select('input', 'textarea'); + for(var i=0; i<fields.length; i++) + fields[i].observe('change', this.giftmessageFieldChange.bind(this)) + } + }, + + giftmessageFieldChange : function(){ + this.giftMessageDataChanged = true; + }, + + giftmessageOnItemChange : function(event) { + var element = Event.element(event); + if(element.name.indexOf("giftmessage") != -1 && element.type == "checkbox" && !element.checked) { + var messages = $("order-giftmessage").select('textarea'); + var name; + for(var i=0; i<messages.length; i++) { + name = messages[i].id.split("_"); + if(name.length < 2) continue; + if (element.name.indexOf("[" + name[1] + "]") != -1 && messages[i].value != "") { + alert({ + content: "First, clean the Message field in Gift Message form" + }); + element.checked = true; + } } } - } - }, + }, + + loadArea : function(area, indicator, params){ + var deferred = new jQuery.Deferred(); + var url = this.loadBaseUrl; + if (area) { + area = this.prepareArea(area); + url += 'block/' + area; + } + if (indicator === true) indicator = 'html-body'; + params = this.prepareParams(params); + params.json = true; + if (!this.loadingAreas) this.loadingAreas = []; + if (indicator) { + this.loadingAreas = area; + new Ajax.Request(url, { + parameters:params, + loaderArea: indicator, + onSuccess: function(transport) { + var response = transport.responseText.evalJSON(); + this.loadAreaResponseHandler(response); + deferred.resolve(); + }.bind(this) + }); + } + else { + new Ajax.Request(url, { + parameters:params, + loaderArea: indicator, + onSuccess: function(transport) { + deferred.resolve(); + } + }); + } + if (typeof productConfigure != 'undefined' && area instanceof Array && area.indexOf('items') != -1) { + productConfigure.clean('quote_items'); + } + return deferred.promise(); + }, - loadArea : function(area, indicator, params){ - var deferred = new jQuery.Deferred(); - var url = this.loadBaseUrl; - if (area) { - area = this.prepareArea(area); - url += 'block/' + area; - } - if (indicator === true) indicator = 'html-body'; - params = this.prepareParams(params); - params.json = true; - if (!this.loadingAreas) this.loadingAreas = []; - if (indicator) { - this.loadingAreas = area; - new Ajax.Request(url, { - parameters:params, - loaderArea: indicator, - onSuccess: function(transport) { - var response = transport.responseText.evalJSON(); - this.loadAreaResponseHandler(response); - deferred.resolve(); - }.bind(this) - }); - } - else { - new Ajax.Request(url, { - parameters:params, - loaderArea: indicator, - onSuccess: function(transport) { - deferred.resolve(); + loadAreaResponseHandler : function (response) { + if (response.error) { + alert({ + content: response.message + }); + } + if (response.ajaxExpired && response.ajaxRedirect) { + setLocation(response.ajaxRedirect); + } + if (!this.loadingAreas) { + this.loadingAreas = []; + } + if (typeof this.loadingAreas == 'string') { + this.loadingAreas = [this.loadingAreas]; + } + if (this.loadingAreas.indexOf('message') == -1) { + this.loadingAreas.push('message'); + } + if (response.header) { + jQuery('.page-actions-inner').attr('data-title', response.header); + } + + for (var i = 0; i < this.loadingAreas.length; i++) { + var id = this.loadingAreas[i]; + if ($(this.getAreaId(id))) { + if ('message' != id || response[id]) { + $(this.getAreaId(id)).update(response[id]); + } + if ($(this.getAreaId(id)).callback) { + this[$(this.getAreaId(id)).callback](); + } } - }); - } - if (typeof productConfigure != 'undefined' && area instanceof Array && area.indexOf('items') != -1) { - productConfigure.clean('quote_items'); - } - return deferred.promise(); - }, + } + }, - loadAreaResponseHandler : function (response) { - if (response.error) { - alert(response.message); - } - if (response.ajaxExpired && response.ajaxRedirect) { - setLocation(response.ajaxRedirect); - } - if (!this.loadingAreas) { - this.loadingAreas = []; - } - if (typeof this.loadingAreas == 'string') { - this.loadingAreas = [this.loadingAreas]; - } - if (this.loadingAreas.indexOf('message') == -1) { - this.loadingAreas.push('message'); - } - if (response.header) { - jQuery('.page-actions-inner').attr('data-title', response.header); - } + prepareArea : function(area) { + if (this.giftMessageDataChanged) { + return area.without('giftmessage'); + } + return area; + }, + + saveData : function(data){ + this.loadArea(false, false, data); + }, + + showArea : function(area){ + var id = this.getAreaId(area); + if($(id)) { + $(id).show(); + this.areaOverlay(); + } + }, - for (var i = 0; i < this.loadingAreas.length; i++) { - var id = this.loadingAreas[i]; - if ($(this.getAreaId(id))) { - if ('message' != id || response[id]) { - $(this.getAreaId(id)).update(response[id]); - } - if ($(this.getAreaId(id)).callback) { - this[$(this.getAreaId(id)).callback](); - } + hideArea : function(area){ + var id = this.getAreaId(area); + if($(id)) { + $(id).hide(); + this.areaOverlay(); } - } - }, + }, - prepareArea : function(area) { - if (this.giftMessageDataChanged) { - return area.without('giftmessage'); - } - return area; - }, - - saveData : function(data){ - this.loadArea(false, false, data); - }, - - showArea : function(area){ - var id = this.getAreaId(area); - if($(id)) { - $(id).show(); - this.areaOverlay(); - } - }, + areaOverlay : function() + { + $H(order.overlayData).each(function(e){ + e.value.fx(); + }); + }, - hideArea : function(area){ - var id = this.getAreaId(area); - if($(id)) { - $(id).hide(); - this.areaOverlay(); - } - }, - - areaOverlay : function() - { - $H(order.overlayData).each(function(e){ - e.value.fx(); - }); - }, - - getAreaId : function(area){ - return 'order-'+area; - }, - - prepareParams : function(params){ - if (!params) { - params = {}; - } - if (!params.customer_id) { - params.customer_id = this.customerId; - } - if (!params.store_id) { - params.store_id = this.storeId; - } - if (!params.currency_id) { - params.currency_id = this.currencyId; - } - if (!params.form_key) { - params.form_key = FORM_KEY; - } + getAreaId : function(area){ + return 'order-'+area; + }, - if (this.isPaymentValidationAvailable()) { - var data = this.serializeData('order-billing_method'); - if (data) { - data.each(function(value) { - params[value[0]] = value[1]; - }); + prepareParams : function(params){ + if (!params) { + params = {}; } - } else { - params['payment[method]'] = this.paymentMethod; - } - return params; - }, - - /** - * Prevent from sending credit card information to server for some payment methods - * - * @returns {boolean} - */ - isPaymentValidationAvailable : function(){ - return ((typeof this.paymentMethod) == 'undefined' + if (!params.customer_id) { + params.customer_id = this.customerId; + } + if (!params.store_id) { + params.store_id = this.storeId; + } + if (!params.currency_id) { + params.currency_id = this.currencyId; + } + if (!params.form_key) { + params.form_key = FORM_KEY; + } + + if (this.isPaymentValidationAvailable()) { + var data = this.serializeData('order-billing_method'); + if (data) { + data.each(function(value) { + params[value[0]] = value[1]; + }); + } + } else { + params['payment[method]'] = this.paymentMethod; + } + return params; + }, + + /** + * Prevent from sending credit card information to server for some payment methods + * + * @returns {boolean} + */ + isPaymentValidationAvailable : function(){ + return ((typeof this.paymentMethod) == 'undefined' || this.excludedPaymentMethods.indexOf(this.paymentMethod) == -1); - }, + }, - serializeData : function(container){ - var fields = $(container).select('input', 'select', 'textarea'); - var data = Form.serializeElements(fields, true); + serializeData : function(container){ + var fields = $(container).select('input', 'select', 'textarea'); + var data = Form.serializeElements(fields, true); - return $H(data); - }, + return $H(data); + }, - toggleCustomPrice: function(checkbox, elemId, tierBlock) { - if (checkbox.checked) { - $(elemId).disabled = false; - $(elemId).show(); - if($(tierBlock)) $(tierBlock).hide(); - } - else { - $(elemId).disabled = true; - $(elemId).hide(); - if($(tierBlock)) $(tierBlock).show(); - } - }, - - submit : function() - { - jQuery('#edit_form').trigger('processStart'); - jQuery('#edit_form').trigger('submitOrder'); - }, - - _realSubmit: function () { - var disableAndSave = function() { - disableElements('save'); - jQuery('#edit_form').on('invalid-form.validate', function() { - enableElements('save'); - jQuery('#edit_form').trigger('processStop'); - jQuery('#edit_form').off('invalid-form.validate'); - }); - jQuery('#edit_form').triggerHandler('save'); - } - if (this.orderItemChanged) { - if (confirm('You have item changes')) { + toggleCustomPrice: function(checkbox, elemId, tierBlock) { + if (checkbox.checked) { + $(elemId).disabled = false; + $(elemId).show(); + if($(tierBlock)) $(tierBlock).hide(); + } + else { + $(elemId).disabled = true; + $(elemId).hide(); + if($(tierBlock)) $(tierBlock).show(); + } + }, + + submit : function() + { + jQuery('#edit_form').trigger('processStart'); + jQuery('#edit_form').trigger('submitOrder'); + }, + + _realSubmit: function () { + var disableAndSave = function() { + disableElements('save'); + jQuery('#edit_form').on('invalid-form.validate', function() { + enableElements('save'); + jQuery('#edit_form').trigger('processStop'); + jQuery('#edit_form').off('invalid-form.validate'); + }); + jQuery('#edit_form').triggerHandler('save'); + } + if (this.orderItemChanged) { + if (confirm('You have item changes')) { + disableAndSave(); + } else { + this.itemsUpdate(); + } + } else { disableAndSave(); + } + }, + + overlay : function(elId, show, observe) { + if (typeof(show) == 'undefined') { show = true; } + + var orderObj = this; + var obj = this.overlayData.get(elId); + if (!obj) { + obj = { + show: show, + el: elId, + order: orderObj, + fx: function(event) { + this.order.processOverlay(this.el, this.show); + } + }; + obj.bfx = obj.fx.bindAsEventListener(obj); + this.overlayData.set(elId, obj); } else { - this.itemsUpdate(); + obj.show = show; + Event.stopObserving(window, 'resize', obj.bfx); } - } else { - disableAndSave(); - } - }, - - overlay : function(elId, show, observe) { - if (typeof(show) == 'undefined') { show = true; } - - var orderObj = this; - var obj = this.overlayData.get(elId); - if (!obj) { - obj = { - show: show, - el: elId, - order: orderObj, - fx: function(event) { - this.order.processOverlay(this.el, this.show); - } - }; - obj.bfx = obj.fx.bindAsEventListener(obj); - this.overlayData.set(elId, obj); - } else { - obj.show = show; - Event.stopObserving(window, 'resize', obj.bfx); - } - Event.observe(window, 'resize', obj.bfx); + Event.observe(window, 'resize', obj.bfx); - this.processOverlay(elId, show); - }, + this.processOverlay(elId, show); + }, - processOverlay : function(elId, show) { - var el = $(elId); + processOverlay : function(elId, show) { + var el = $(elId); - if (!el) { - return; - } + if (!el) { + return; + } - var parentEl = el.up(1); - if (show) { - parentEl.removeClassName('ignore-validate'); - } else { - parentEl.addClassName('ignore-validate'); - } + var parentEl = el.up(1); + if (show) { + parentEl.removeClassName('ignore-validate'); + } else { + parentEl.addClassName('ignore-validate'); + } - if (Prototype.Browser.IE) { - parentEl.select('select').each(function (elem) { - if (show) { - elem.needShowOnSuccess = false; - elem.style.visibility = ''; - } else { - elem.style.visibility = 'hidden'; - elem.needShowOnSuccess = true; - } + if (Prototype.Browser.IE) { + parentEl.select('select').each(function (elem) { + if (show) { + elem.needShowOnSuccess = false; + elem.style.visibility = ''; + } else { + elem.style.visibility = 'hidden'; + elem.needShowOnSuccess = true; + } + }); + } + + parentEl.setStyle({position: 'relative'}); + el.setStyle({ + display: show ? 'none' : '' }); - } + }, - parentEl.setStyle({position: 'relative'}); - el.setStyle({ - display: show ? 'none' : '' - }); - }, - - validateVat: function(parameters) - { - var params = { - country: $(parameters.countryElementId).value, - vat: $(parameters.vatElementId).value - }; - - if (this.storeId !== false) { - params.store_id = this.storeId; - } + validateVat: function(parameters) + { + var params = { + country: $(parameters.countryElementId).value, + vat: $(parameters.vatElementId).value + }; - var currentCustomerGroupId = $(parameters.groupIdHtmlId).value; - - new Ajax.Request(parameters.validateUrl, { - parameters: params, - onSuccess: function(response) { - var message = ''; - var groupActionRequired = null; - try { - response = response.responseText.evalJSON(); - - if (null === response.group) { - if (true === response.valid) { - message = parameters.vatValidMessage; - } else if (true === response.success) { - message = parameters.vatInvalidMessage.replace(/%s/, params.vat); + if (this.storeId !== false) { + params.store_id = this.storeId; + } + + var currentCustomerGroupId = $(parameters.groupIdHtmlId).value; + + new Ajax.Request(parameters.validateUrl, { + parameters: params, + onSuccess: function(response) { + var message = ''; + var groupActionRequired = null; + try { + response = response.responseText.evalJSON(); + + if (null === response.group) { + if (true === response.valid) { + message = parameters.vatValidMessage; + } else if (true === response.success) { + message = parameters.vatInvalidMessage.replace(/%s/, params.vat); + } else { + message = parameters.vatValidationFailedMessage; + } } else { - message = parameters.vatValidationFailedMessage; - } - } else { - if (true === response.valid) { - message = parameters.vatValidAndGroupValidMessage; - if (0 === response.group) { - message = parameters.vatValidAndGroupInvalidMessage; + if (true === response.valid) { + message = parameters.vatValidAndGroupValidMessage; + if (0 === response.group) { + message = parameters.vatValidAndGroupInvalidMessage; + groupActionRequired = 'inform'; + } else if (currentCustomerGroupId != response.group) { + message = parameters.vatValidAndGroupChangeMessage; + groupActionRequired = 'change'; + } + } else if (response.success) { + message = parameters.vatInvalidMessage.replace(/%s/, params.vat); + groupActionRequired = 'inform'; + } else { + message = parameters.vatValidationFailedMessage; groupActionRequired = 'inform'; - } else if (currentCustomerGroupId != response.group) { - message = parameters.vatValidAndGroupChangeMessage; - groupActionRequired = 'change'; } - } else if (response.success) { - message = parameters.vatInvalidMessage.replace(/%s/, params.vat); - groupActionRequired = 'inform'; - } else { - message = parameters.vatValidationFailedMessage; - groupActionRequired = 'inform'; } + } catch (e) { + message = parameters.vatValidationFailedMessage; } - } catch (e) { - message = parameters.vatValidationFailedMessage; - } - if (null === groupActionRequired) { - alert(message); - } - else { - this.processCustomerGroupChange( - parameters.groupIdHtmlId, - message, - parameters.vatCustomerGroupMessage, - parameters.vatGroupErrorMessage, - response.group, - groupActionRequired - ); + if (null === groupActionRequired) { + alert({ + content: message + }); + } + else { + this.processCustomerGroupChange( + parameters.groupIdHtmlId, + message, + parameters.vatCustomerGroupMessage, + parameters.vatGroupErrorMessage, + response.group, + groupActionRequired + ); + } + }.bind(this) + }); + }, + + processCustomerGroupChange: function(groupIdHtmlId, message, customerGroupMessage, errorMessage, groupId, action) + { + var groupMessage = ''; + try { + var currentCustomerGroupId = $(groupIdHtmlId).value; + var currentCustomerGroupTitle = + $$('#' + groupIdHtmlId + ' > option[value=' + currentCustomerGroupId + ']')[0].text; + var customerGroupOption = $$('#' + groupIdHtmlId + ' > option[value=' + groupId + ']')[0]; + groupMessage = customerGroupMessage.replace(/%s/, customerGroupOption.text); + } catch (e) { + groupMessage = errorMessage; + if (action === 'change') { + message = ''; + action = 'inform'; } - }.bind(this) - }); - }, - - processCustomerGroupChange: function(groupIdHtmlId, message, customerGroupMessage, errorMessage, groupId, action) - { - var groupMessage = ''; - try { - var currentCustomerGroupId = $(groupIdHtmlId).value; - var currentCustomerGroupTitle = - $$('#' + groupIdHtmlId + ' > option[value=' + currentCustomerGroupId + ']')[0].text; - var customerGroupOption = $$('#' + groupIdHtmlId + ' > option[value=' + groupId + ']')[0]; - groupMessage = customerGroupMessage.replace(/%s/, customerGroupOption.text); - } catch (e) { - groupMessage = errorMessage; - if (action === 'change') { - message = ''; - action = 'inform'; } - } - if (action === 'change') { - var confirmText = message.replace(/%s/, customerGroupOption.text); - confirmText = confirmText.replace(/%s/, currentCustomerGroupTitle); - if (confirm(confirmText)) { - $$('#' + groupIdHtmlId + ' option').each(function (o) { - o.selected = o.readAttribute('value') == groupId; + if (action === 'change') { + var confirmText = message.replace(/%s/, customerGroupOption.text); + confirmText = confirmText.replace(/%s/, currentCustomerGroupTitle); + if (confirm(confirmText)) { + $$('#' + groupIdHtmlId + ' option').each(function (o) { + o.selected = o.readAttribute('value') == groupId; + }); + this.accountGroupChange(); + } + } else if (action === 'inform') { + alert({ + content: message + '\n' + groupMessage }); - this.accountGroupChange(); } - } else if (action === 'inform') { - alert(message + '\n' + groupMessage); } - } -}; - -window.OrderFormArea = Class.create(); -OrderFormArea.prototype = { - _name: null, - _node: null, - _parent: null, - _callbackName: null, - - initialize: function(name, node, parent){ - if(!node) - return; - this._name = name; - this._parent = parent; - this._callbackName = node.callback; - if (typeof this._callbackName == 'undefined') { - this._callbackName = name + 'Loaded'; - node.callback = this._callbackName; + }; + + window.OrderFormArea = Class.create(); + OrderFormArea.prototype = { + _name: null, + _node: null, + _parent: null, + _callbackName: null, + + initialize: function(name, node, parent){ + if(!node) + return; + this._name = name; + this._parent = parent; + this._callbackName = node.callback; + if (typeof this._callbackName == 'undefined') { + this._callbackName = name + 'Loaded'; + node.callback = this._callbackName; + } + parent[this._callbackName] = parent[this._callbackName].wrap((function (proceed){ + proceed(); + this.onLoad(); + }).bind(this)); + + this.setNode(node); + }, + + setNode: function(node){ + if (!node.callback) { + node.callback = this._callbackName; + } + this.node = node; + }, + + onLoad: function(){ } - parent[this._callbackName] = parent[this._callbackName].wrap((function (proceed){ - proceed(); - this.onLoad(); - }).bind(this)); + }; + + window.ControlButton = Class.create(); + + ControlButton.prototype = { + _label: '', + _node: null, + + initialize: function(label){ + this._label = label; + this._node = new Element('button', { + 'class': 'action-secondary action-add', + 'type': 'button' + }); + }, - this.setNode(node); - }, + onClick: function(){ + }, - setNode: function(node){ - if (!node.callback) { - node.callback = this._callbackName; + insertIn: function(element, position){ + var node = Object.extend(this._node), + content = {}; + node.observe('click', this.onClick); + node.update('<span>' + this._label + '</span>'); + content[position] = node; + Element.insert(element, content); } - this.node = node; - }, - - onLoad: function(){ - } -}; - -window.ControlButton = Class.create(); - -ControlButton.prototype = { - _label: '', - _node: null, - - initialize: function(label){ - this._label = label; - this._node = new Element('button', { - 'class': 'action-secondary action-add', - 'type': 'button' - }); - }, - - onClick: function(){ - }, - - insertIn: function(element, position){ - var node = Object.extend(this._node), - content = {}; - node.observe('click', this.onClick); - node.update('<span>' + this._label + '</span>'); - content[position] = node; - Element.insert(element, content); - } -}; + }; }); diff --git a/app/code/Magento/SalesRule/Model/Coupon/Massgenerator.php b/app/code/Magento/SalesRule/Model/Coupon/Massgenerator.php index 23d3ee5cd081a40d6016e778871b9792945772a0..00cf6dcb73396c603a6c1907b8e0ab8d34cb9593 100644 --- a/app/code/Magento/SalesRule/Model/Coupon/Massgenerator.php +++ b/app/code/Magento/SalesRule/Model/Coupon/Massgenerator.php @@ -65,7 +65,7 @@ class Massgenerator extends \Magento\Framework\Model\AbstractModel implements * @param \Magento\SalesRule\Model\CouponFactory $couponFactory * @param \Magento\Framework\Stdlib\DateTime\DateTime $date * @param \Magento\Framework\Stdlib\DateTime $dateTime - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -76,7 +76,7 @@ class Massgenerator extends \Magento\Framework\Model\AbstractModel implements \Magento\SalesRule\Model\CouponFactory $couponFactory, \Magento\Framework\Stdlib\DateTime\DateTime $date, \Magento\Framework\Stdlib\DateTime $dateTime, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/SalesRule/Model/ResourceModel/Coupon.php b/app/code/Magento/SalesRule/Model/ResourceModel/Coupon.php index e4290f3d287db15dc88909a59fee3e1a932b1f8b..c415cb5dec572ce41dd4f868ffd3a43b16326c51 100644 --- a/app/code/Magento/SalesRule/Model/ResourceModel/Coupon.php +++ b/app/code/Magento/SalesRule/Model/ResourceModel/Coupon.php @@ -12,7 +12,7 @@ use Magento\Framework\Model\AbstractModel; * * @author Magento Core Team <core@magentocommerce.com> */ -class Coupon extends \Magento\Framework\Model\ModelResource\Db\AbstractDb implements +class Coupon extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb implements \Magento\SalesRule\Model\Spi\CouponResourceInterface { /** diff --git a/app/code/Magento/SalesRule/Model/ResourceModel/Coupon/Collection.php b/app/code/Magento/SalesRule/Model/ResourceModel/Coupon/Collection.php index b728ddaf6f5c0e769c156428061dd0d97c70bf25..19a56cc3e57ee19e9e2102c3e608859c97d39f32 100644 --- a/app/code/Magento/SalesRule/Model/ResourceModel/Coupon/Collection.php +++ b/app/code/Magento/SalesRule/Model/ResourceModel/Coupon/Collection.php @@ -6,7 +6,7 @@ namespace Magento\SalesRule\Model\ResourceModel\Coupon; use Magento\Backend\Block\Widget\Grid\Column; -use Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection; +use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection; use Magento\SalesRule\Model\Rule; /** diff --git a/app/code/Magento/SalesRule/Model/ResourceModel/Coupon/Usage.php b/app/code/Magento/SalesRule/Model/ResourceModel/Coupon/Usage.php index 5d401a2199d245df1e55a4c388049d44511dc52b..1770de0f50761d00ca1d15917411c7ed0fb1790b 100644 --- a/app/code/Magento/SalesRule/Model/ResourceModel/Coupon/Usage.php +++ b/app/code/Magento/SalesRule/Model/ResourceModel/Coupon/Usage.php @@ -10,7 +10,7 @@ namespace Magento\SalesRule\Model\ResourceModel\Coupon; * * @author Magento Core Team <core@magentocommerce.com> */ -class Usage extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Usage extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Constructor diff --git a/app/code/Magento/SalesRule/Model/ResourceModel/Report/Rule.php b/app/code/Magento/SalesRule/Model/ResourceModel/Report/Rule.php index 7a204f6ed279bbeecc5e60b51572ddac8951ce34..0cb09c6767363beceb4edeaf6f1b47294c4f945c 100644 --- a/app/code/Magento/SalesRule/Model/ResourceModel/Report/Rule.php +++ b/app/code/Magento/SalesRule/Model/ResourceModel/Report/Rule.php @@ -23,7 +23,7 @@ class Rule extends \Magento\Reports\Model\ResourceModel\Report\AbstractReport protected $_updatedatFactory; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Psr\Log\LoggerInterface $logger * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate * @param \Magento\Reports\Model\FlagFactory $reportsFlagFactory @@ -34,7 +34,7 @@ class Rule extends \Magento\Reports\Model\ResourceModel\Report\AbstractReport * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Psr\Log\LoggerInterface $logger, \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate, \Magento\Reports\Model\FlagFactory $reportsFlagFactory, diff --git a/app/code/Magento/SalesRule/Model/ResourceModel/Rule.php b/app/code/Magento/SalesRule/Model/ResourceModel/Rule.php index 3121cd6c80251d2fbde7f135bb62f68dc058d46e..c4fc5d41ece13cdd6146062d6e9ec8819d90e42a 100644 --- a/app/code/Magento/SalesRule/Model/ResourceModel/Rule.php +++ b/app/code/Magento/SalesRule/Model/ResourceModel/Rule.php @@ -53,13 +53,13 @@ class Rule extends \Magento\Rule\Model\ResourceModel\AbstractResource protected $_resourceCoupon; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Framework\Stdlib\StringUtils $string * @param \Magento\SalesRule\Model\ResourceModel\Coupon $resourceCoupon * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Framework\Stdlib\StringUtils $string, \Magento\SalesRule\Model\ResourceModel\Coupon $resourceCoupon, $connectionName = null diff --git a/app/code/Magento/SalesRule/Model/ResourceModel/Rule/Collection.php b/app/code/Magento/SalesRule/Model/ResourceModel/Rule/Collection.php index 6c97e9b401bbcb6b4b12683f5c7f7b5cc45cd68f..1fa75ae94d63b5d119a16c26956dc31b7164eca5 100644 --- a/app/code/Magento/SalesRule/Model/ResourceModel/Rule/Collection.php +++ b/app/code/Magento/SalesRule/Model/ResourceModel/Rule/Collection.php @@ -45,7 +45,7 @@ class Collection extends \Magento\Rule\Model\ResourceModel\Rule\Collection\Abstr * @param \Magento\Framework\Event\ManagerInterface $eventManager * @param \Magento\Framework\Stdlib\DateTime\DateTime $date * @param mixed $connection - * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource + * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource */ public function __construct( \Magento\Framework\Data\Collection\EntityFactory $entityFactory, @@ -54,7 +54,7 @@ class Collection extends \Magento\Rule\Model\ResourceModel\Rule\Collection\Abstr \Magento\Framework\Event\ManagerInterface $eventManager, \Magento\Framework\Stdlib\DateTime\DateTime $date, \Magento\Framework\DB\Adapter\AdapterInterface $connection = null, - \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null + \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null ) { parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource); $this->_date = $date; diff --git a/app/code/Magento/SalesRule/Model/ResourceModel/Rule/Customer.php b/app/code/Magento/SalesRule/Model/ResourceModel/Rule/Customer.php index 978c3dd9a1c2c95961658b27cdf3fdc3e9b7afee..26e84f9b8216d6013aac2d6a31eb355fab65cf37 100644 --- a/app/code/Magento/SalesRule/Model/ResourceModel/Rule/Customer.php +++ b/app/code/Magento/SalesRule/Model/ResourceModel/Rule/Customer.php @@ -10,7 +10,7 @@ namespace Magento\SalesRule\Model\ResourceModel\Rule; * * @author Magento Core Team <core@magentocommerce.com> */ -class Customer extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Customer extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Constructor diff --git a/app/code/Magento/SalesRule/Model/ResourceModel/Rule/Customer/Collection.php b/app/code/Magento/SalesRule/Model/ResourceModel/Rule/Customer/Collection.php index 9fda74521686ee96518c350907939a28f5b72cc2..9d8822b51b2ab791841fbc7b03d29af230711836 100644 --- a/app/code/Magento/SalesRule/Model/ResourceModel/Rule/Customer/Collection.php +++ b/app/code/Magento/SalesRule/Model/ResourceModel/Rule/Customer/Collection.php @@ -10,7 +10,7 @@ namespace Magento\SalesRule\Model\ResourceModel\Rule\Customer; * * @author Magento Core Team <core@magentocommerce.com> */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Collection constructor diff --git a/app/code/Magento/SalesRule/Model/Rule.php b/app/code/Magento/SalesRule/Model/Rule.php index 89efbbd98fe9a5ed95dafb02a84f3cb99384106c..200a836592c1c8bdfd1cf21d2330b23d7b609aca 100644 --- a/app/code/Magento/SalesRule/Model/Rule.php +++ b/app/code/Magento/SalesRule/Model/Rule.php @@ -183,7 +183,7 @@ class Rule extends \Magento\Rule\Model\AbstractModel * @param \Magento\SalesRule\Model\Rule\Condition\Product\CombineFactory $condProdCombineF * @param \Magento\SalesRule\Model\ResourceModel\Coupon\Collection $couponCollection * @param \Magento\Store\Model\StoreManagerInterface $storeManager - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -199,7 +199,7 @@ class Rule extends \Magento\Rule\Model\AbstractModel \Magento\SalesRule\Model\Rule\Condition\Product\CombineFactory $condProdCombineF, \Magento\SalesRule\Model\ResourceModel\Coupon\Collection $couponCollection, \Magento\Store\Model\StoreManagerInterface $storeManager, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/SalesRule/Model/Validator.php b/app/code/Magento/SalesRule/Model/Validator.php index 7f3300c06f7fd65113b728a338814233f3e3ac4f..f69e85931f4596f91cc7155257d5c4f55b70d929 100644 --- a/app/code/Magento/SalesRule/Model/Validator.php +++ b/app/code/Magento/SalesRule/Model/Validator.php @@ -102,7 +102,7 @@ class Validator extends \Magento\Framework\Model\AbstractModel * @param \Magento\Framework\Pricing\PriceCurrencyInterface $priceCurrency * @param Validator\Pool $validators * @param \Magento\Framework\Message\ManagerInterface $messageManager - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -117,7 +117,7 @@ class Validator extends \Magento\Framework\Model\AbstractModel \Magento\Framework\Pricing\PriceCurrencyInterface $priceCurrency, \Magento\SalesRule\Model\Validator\Pool $validators, \Magento\Framework\Message\ManagerInterface $messageManager, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/SalesRule/Test/Unit/Model/ResourceModel/RuleTest.php b/app/code/Magento/SalesRule/Test/Unit/Model/ResourceModel/RuleTest.php index a882185d009ca559e26e508d802090dcdf824ea9..e32936a18e067b093e9f0e361dd167dc31410278 100644 --- a/app/code/Magento/SalesRule/Test/Unit/Model/ResourceModel/RuleTest.php +++ b/app/code/Magento/SalesRule/Test/Unit/Model/ResourceModel/RuleTest.php @@ -35,7 +35,7 @@ class RuleTest extends \PHPUnit_Framework_TestCase ->disableOriginalConstructor() ->getMock(); - $context = $this->getMockBuilder('Magento\Framework\Model\ModelResource\Db\Context') + $context = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\Db\Context') ->disableOriginalConstructor() ->getMock(); $connectionName = 'test'; diff --git a/app/code/Magento/SalesRule/etc/adminhtml/events.xml b/app/code/Magento/SalesRule/etc/adminhtml/events.xml index e1437b91da7525bfcfc23c9b82f500f0a29470cf..3cb7b8e096112b7aef993e6f919e38fff9384c4d 100644 --- a/app/code/Magento/SalesRule/etc/adminhtml/events.xml +++ b/app/code/Magento/SalesRule/etc/adminhtml/events.xml @@ -7,9 +7,9 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="catalog_entity_attribute_delete_after"> - <observer name="salesrule" instance="Magento\SalesRule\Observer\CatalogAttributeDeleteAfterObserver" method="execute" /> + <observer name="salesrule" instance="Magento\SalesRule\Observer\CatalogAttributeDeleteAfterObserver" /> </event> <event name="catalog_entity_attribute_save_after"> - <observer name="salesrule" instance="Magento\SalesRule\Observer\CatalogAttributeSaveAfterObserver" method="execute" /> + <observer name="salesrule" instance="Magento\SalesRule\Observer\CatalogAttributeSaveAfterObserver" /> </event> </config> diff --git a/app/code/Magento/SalesRule/etc/events.xml b/app/code/Magento/SalesRule/etc/events.xml index ccba6b27b1b31aa57a769e9741f3188548b22710..df797ce4f1954faf10d3f9eb231b1cd63b66b29a 100644 --- a/app/code/Magento/SalesRule/etc/events.xml +++ b/app/code/Magento/SalesRule/etc/events.xml @@ -7,9 +7,9 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="sales_order_place_after"> - <observer name="salesrule" instance="Magento\SalesRule\Observer\SalesOrderAfterPlaceObserver" method="execute" /> + <observer name="salesrule" instance="Magento\SalesRule\Observer\SalesOrderAfterPlaceObserver" /> </event> <event name="sales_model_service_quote_submit_before"> - <observer name="salesrule" instance="Magento\SalesRule\Observer\AddSalesRuleNameToOrderObserver" method="execute" /> + <observer name="salesrule" instance="Magento\SalesRule\Observer\AddSalesRuleNameToOrderObserver" /> </event> </config> diff --git a/app/code/Magento/SalesRule/view/adminhtml/templates/promo/salesrulejs.phtml b/app/code/Magento/SalesRule/view/adminhtml/templates/promo/salesrulejs.phtml index fab5791b698062f5d2249fe8c204734fb5fbed64..329ef5513920b13295bcc86a8e435a36a1e658c3 100644 --- a/app/code/Magento/SalesRule/view/adminhtml/templates/promo/salesrulejs.phtml +++ b/app/code/Magento/SalesRule/view/adminhtml/templates/promo/salesrulejs.phtml @@ -5,7 +5,12 @@ */ ?> <script> -require(["jquery", "uiRegistry", "prototype"], function(jQuery, registry){ +require([ + 'jquery', + "uiRegistry", + 'Magento_Ui/js/modal/alert', + 'prototype' +], function(jQuery, registry, alert){ //<![CDATA[ var couponTypeSpecific = '<?php /* @escapeNotVerified */ echo \Magento\SalesRule\Model\Rule::COUPON_TYPE_SPECIFIC ?>', @@ -80,7 +85,11 @@ function generateCouponCodes(idPrefix, generateUrl, grid) { onComplete : function (transport, param){ var response = false; if (transport && transport.responseText) { - response = eval('(' + transport.responseText + ')'); + try { + response = JSON.parse(transport.responseText); + } catch (e) { + console.warn('An error occured while parsing response'); + } } if (couponCodesGrid) { couponCodesGrid.reload(); @@ -93,7 +102,9 @@ function generateCouponCodes(idPrefix, generateUrl, grid) { } } if (response && response.error) { - alert(response.error); + alert({ + content: response.error + }); } } }); diff --git a/app/code/Magento/SalesSequence/Model/ResourceModel/Meta.php b/app/code/Magento/SalesSequence/Model/ResourceModel/Meta.php index f7a018afe927b7b7f7051ac865eaeb78a6df81eb..68d2e73be0f8fbb254b47af2f8609dd334fee259 100644 --- a/app/code/Magento/SalesSequence/Model/ResourceModel/Meta.php +++ b/app/code/Magento/SalesSequence/Model/ResourceModel/Meta.php @@ -7,7 +7,7 @@ namespace Magento\SalesSequence\Model\ResourceModel; use Magento\Framework\Exception\LocalizedException as Exception; use Magento\Framework\Exception\NoSuchEntityException; -use Magento\Framework\Model\ModelResource\Db\Context as DatabaseContext; +use Magento\Framework\Model\ResourceModel\Db\Context as DatabaseContext; use Magento\SalesSequence\Model\ResourceModel\Profile as ResourceProfile; use Magento\SalesSequence\Model\MetaFactory; use Magento\SalesSequence\Model\Profile as ModelProfile; @@ -15,7 +15,7 @@ use Magento\SalesSequence\Model\Profile as ModelProfile; /** * Class Meta represents metadata for sequence as sequence table and store id */ -class Meta extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Meta extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Event prefix diff --git a/app/code/Magento/SalesSequence/Model/ResourceModel/Profile.php b/app/code/Magento/SalesSequence/Model/ResourceModel/Profile.php index b23220e2f615432c7d28cd7bf921dbe9eca7810f..cfb57ae81f3d970179a48eacc09fae8ad9ca0803 100644 --- a/app/code/Magento/SalesSequence/Model/ResourceModel/Profile.php +++ b/app/code/Magento/SalesSequence/Model/ResourceModel/Profile.php @@ -6,13 +6,13 @@ namespace Magento\SalesSequence\Model\ResourceModel; use Magento\SalesSequence\Model\Meta as ModelMeta; -use Magento\Framework\Model\ModelResource\Db\Context as DatabaseContext; +use Magento\Framework\Model\ResourceModel\Db\Context as DatabaseContext; use Magento\SalesSequence\Model\ProfileFactory; /** * Class Profile represents profile data for sequence as prefix, suffix, start value etc. */ -class Profile extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Profile extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Event prefix diff --git a/app/code/Magento/SalesSequence/Test/Unit/Model/ResourceModel/MetaTest.php b/app/code/Magento/SalesSequence/Test/Unit/Model/ResourceModel/MetaTest.php index 0874f59741946db87f41c662ff5cbb0067b10089..250eab5f505b393e9940cc3b98debb948010a215 100644 --- a/app/code/Magento/SalesSequence/Test/Unit/Model/ResourceModel/MetaTest.php +++ b/app/code/Magento/SalesSequence/Test/Unit/Model/ResourceModel/MetaTest.php @@ -19,7 +19,7 @@ class MetaTest extends \PHPUnit_Framework_TestCase private $connectionMock; /** - * @var \Magento\Framework\Model\ModelResource\Db\Context | \PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Model\ResourceModel\Db\Context | \PHPUnit_Framework_MockObject_MockObject */ private $dbContext; @@ -73,7 +73,7 @@ class MetaTest extends \PHPUnit_Framework_TestCase ['query'] ); $this->dbContext = $this->getMock( - 'Magento\Framework\Model\ModelResource\Db\Context', + 'Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', diff --git a/app/code/Magento/SalesSequence/Test/Unit/Model/ResourceModel/ProfileTest.php b/app/code/Magento/SalesSequence/Test/Unit/Model/ResourceModel/ProfileTest.php index 40612f4f27afe2123258871a4c29b8c07ebb6661..8945f7adb8681fb798dffe9614e77dbe95d47d61 100644 --- a/app/code/Magento/SalesSequence/Test/Unit/Model/ResourceModel/ProfileTest.php +++ b/app/code/Magento/SalesSequence/Test/Unit/Model/ResourceModel/ProfileTest.php @@ -18,7 +18,7 @@ class ProfileTest extends \PHPUnit_Framework_TestCase private $connectionMock; /** - * @var \Magento\Framework\Model\ModelResource\Db\Context | \PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Model\ResourceModel\Db\Context | \PHPUnit_Framework_MockObject_MockObject */ private $dbContext; @@ -67,7 +67,7 @@ class ProfileTest extends \PHPUnit_Framework_TestCase ['query'] ); $this->dbContext = $this->getMock( - 'Magento\Framework\Model\ModelResource\Db\Context', + 'Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', diff --git a/app/code/Magento/SampleData/Model/BlackHole.php b/app/code/Magento/SampleData/Model/BlackHole.php deleted file mode 100644 index 06f557d318484719243578eed5ee2d70f05505f3..0000000000000000000000000000000000000000 --- a/app/code/Magento/SampleData/Model/BlackHole.php +++ /dev/null @@ -1,22 +0,0 @@ -<?php -/** - * Copyright © 2015 Magento. All rights reserved. - * See COPYING.txt for license details. - */ -namespace Magento\SampleData\Model; - -/** - * Mail Transport that do not send mail - */ -class BlackHole implements \Magento\Framework\Mail\TransportInterface -{ - /** - * Send a mail using this transport - * - * @return void - */ - public function sendMessage() - { - return true; - } -} diff --git a/app/code/Magento/SampleData/etc/di.xml b/app/code/Magento/SampleData/etc/di.xml index 1ddee22996d97148cd8f634910e71da610bb36c6..a34bdcabd0f54469bc025bea70300fdc9876ee05 100644 --- a/app/code/Magento/SampleData/etc/di.xml +++ b/app/code/Magento/SampleData/etc/di.xml @@ -15,24 +15,4 @@ </argument> </arguments> </type> - <virtualType name="Magento\SampleData\Model\BlackHoleFactory" type="\Magento\Framework\Mail\TransportInterfaceFactory"> - <arguments> - <argument name="instanceName" xsi:type="string">Magento\SampleData\Model\BlackHole</argument> - </arguments> - </virtualType> - <virtualType name="blackHoleTransportBuilder" type="Magento\Framework\Mail\Template\TransportBuilder"> - <arguments> - <argument name="mailTransportFactory" xsi:type="object" >Magento\SampleData\Model\BlackHoleFactory</argument> - </arguments> - </virtualType> - <virtualType name="sampleDataAccountManagement" type="Magento\Customer\Model\AccountManagement"> - <arguments> - <argument name="transportBuilder" xsi:type="object">blackHoleTransportBuilder</argument> - </arguments> - </virtualType> - <type name="Magento\SampleData\Module\Customer\Setup\Customer"> - <arguments> - <argument name="accountManagement" xsi:type="object">sampleDataAccountManagement</argument> - </arguments> - </type> </config> diff --git a/app/code/Magento/Search/Model/Query.php b/app/code/Magento/Search/Model/Query.php index ea34734ca801e33d0c69b0d7b51a188104f2ead3..894d8d69f3646c6c99647eca0468a9301be0f042 100644 --- a/app/code/Magento/Search/Model/Query.php +++ b/app/code/Magento/Search/Model/Query.php @@ -13,7 +13,7 @@ use Magento\Search\Model\SearchCollectionFactory as CollectionFactory; use Magento\Framework\App\Config\ScopeConfigInterface; use Magento\Framework\Data\Collection\AbstractDb as DbCollection; use Magento\Framework\Model\AbstractModel; -use Magento\Framework\Model\ModelResource\AbstractResource; +use Magento\Framework\Model\ResourceModel\AbstractResource; use Magento\Framework\Registry; use Magento\Store\Model\StoreManagerInterface; @@ -102,7 +102,7 @@ class Query extends AbstractModel implements QueryInterface * @param CollectionFactory $searchCollectionFactory * @param StoreManagerInterface $storeManager * @param ScopeConfigInterface $scopeConfig - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param DbCollection $resourceCollection * @param array $data */ diff --git a/app/code/Magento/Search/Model/ResourceModel/Query.php b/app/code/Magento/Search/Model/ResourceModel/Query.php index 63cbb0723ed9e143fc7d72ed6dd2e689f603e128..f539cc3bd5241df6711a8676250b093cc7363fd1 100644 --- a/app/code/Magento/Search/Model/ResourceModel/Query.php +++ b/app/code/Magento/Search/Model/ResourceModel/Query.php @@ -10,7 +10,7 @@ namespace Magento\Search\Model\ResourceModel; use Magento\Framework\DB\Select; use Magento\Framework\Model\AbstractModel; -use Magento\Framework\Model\ModelResource\Db\AbstractDb; +use Magento\Framework\Model\ResourceModel\Db\AbstractDb; use Magento\Search\Model\Query as QueryModel; /** @@ -32,13 +32,13 @@ class Query extends AbstractDb protected $dateTime; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Framework\Stdlib\DateTime\DateTime $date * @param \Magento\Framework\Stdlib\DateTime $dateTime * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Framework\Stdlib\DateTime\DateTime $date, \Magento\Framework\Stdlib\DateTime $dateTime, $connectionName = null @@ -82,7 +82,7 @@ class Query extends AbstractDb * @param AbstractModel $object * @param int|string $value * @param null|string $field - * @return $this|\Magento\Framework\Model\ModelResource\Db\AbstractDb + * @return $this|\Magento\Framework\Model\ResourceModel\Db\AbstractDb * @SuppressWarnings("unused") */ public function load(AbstractModel $object, $value, $field = null) diff --git a/app/code/Magento/Search/Model/ResourceModel/Query/Collection.php b/app/code/Magento/Search/Model/ResourceModel/Query/Collection.php index f5db36ccfbeb0a8d97b46da056a21fa7432779b5..9df7dc3ffaee5974cc2764235b0269498dab7167 100644 --- a/app/code/Magento/Search/Model/ResourceModel/Query/Collection.php +++ b/app/code/Magento/Search/Model/ResourceModel/Query/Collection.php @@ -11,7 +11,7 @@ use Magento\Store\Model\Store; * Search query collection * */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Store for filter @@ -42,7 +42,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param \Magento\Framework\DB\Helper $resourceHelper * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection - * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource + * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource */ public function __construct( \Magento\Framework\Data\Collection\EntityFactoryInterface $entityFactory, @@ -52,7 +52,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Framework\DB\Helper $resourceHelper, \Magento\Framework\DB\Adapter\AdapterInterface $connection = null, - \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null + \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null ) { $this->_storeManager = $storeManager; $this->_resourceHelper = $resourceHelper; diff --git a/app/code/Magento/Search/Test/Unit/Model/ResourceModel/QueryTest.php b/app/code/Magento/Search/Test/Unit/Model/ResourceModel/QueryTest.php index 6daab0096b8f3b6834da6bc61d0ae43f4f9400e9..0d7688bf5a53e7cfdd6f2ca7a7522253cf5d017e 100644 --- a/app/code/Magento/Search/Test/Unit/Model/ResourceModel/QueryTest.php +++ b/app/code/Magento/Search/Test/Unit/Model/ResourceModel/QueryTest.php @@ -34,7 +34,7 @@ class QueryTest extends \PHPUnit_Framework_TestCase ->method('getConnection') ->willReturn($this->adapter); - $context = $this->getMockBuilder('Magento\Framework\Model\ModelResource\Db\Context') + $context = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\Db\Context') ->disableOriginalConstructor() ->getMock(); $context->expects($this->any()) diff --git a/app/code/Magento/SendFriend/Model/ResourceModel/SendFriend.php b/app/code/Magento/SendFriend/Model/ResourceModel/SendFriend.php index ea806bd142bc948dca4350b2d5304da24e14b378..5a9b520ce46fd7d91df68bca4b5114637fad9565 100644 --- a/app/code/Magento/SendFriend/Model/ResourceModel/SendFriend.php +++ b/app/code/Magento/SendFriend/Model/ResourceModel/SendFriend.php @@ -10,7 +10,7 @@ namespace Magento\SendFriend\Model\ResourceModel; * * @author Magento Core Team <core@magentocommerce.com> */ -class SendFriend extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class SendFriend extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Initialize connection and table diff --git a/app/code/Magento/SendFriend/Model/ResourceModel/SendFriend/Collection.php b/app/code/Magento/SendFriend/Model/ResourceModel/SendFriend/Collection.php index dac57dc3ee4034b6073636ebdd5a7925b0f1055b..fa3a1c614f570ad5686465ad134571794a45b8fd 100644 --- a/app/code/Magento/SendFriend/Model/ResourceModel/SendFriend/Collection.php +++ b/app/code/Magento/SendFriend/Model/ResourceModel/SendFriend/Collection.php @@ -10,7 +10,7 @@ namespace Magento\SendFriend\Model\ResourceModel\SendFriend; * * @author Magento Core Team <core@magentocommerce.com> */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Init resource collection diff --git a/app/code/Magento/SendFriend/Model/SendFriend.php b/app/code/Magento/SendFriend/Model/SendFriend.php index 831512596ea7b25f4f4c65f5b8c00f9b76c31e0a..7a89d671ce88ce748bbbee07344f7b16785bce69 100644 --- a/app/code/Magento/SendFriend/Model/SendFriend.php +++ b/app/code/Magento/SendFriend/Model/SendFriend.php @@ -119,7 +119,7 @@ class SendFriend extends \Magento\Framework\Model\AbstractModel * @param \Magento\Framework\HTTP\PhpEnvironment\RemoteAddress $remoteAddress * @param \Magento\Framework\Stdlib\CookieManagerInterface $cookieManager * @param \Magento\Framework\Translate\Inline\StateInterface $inlineTranslation - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -135,7 +135,7 @@ class SendFriend extends \Magento\Framework\Model\AbstractModel \Magento\Framework\HTTP\PhpEnvironment\RemoteAddress $remoteAddress, \Magento\Framework\Stdlib\CookieManagerInterface $cookieManager, \Magento\Framework\Translate\Inline\StateInterface $inlineTranslation, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/MassPrintShippingLabel.php b/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/MassPrintShippingLabel.php index 29e19741b06637b373fa8930563bec45084c2f32..1a1790149b7d61b645293f96af243a2bfa3860c3 100644 --- a/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/MassPrintShippingLabel.php +++ b/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/MassPrintShippingLabel.php @@ -9,7 +9,7 @@ namespace Magento\Shipping\Controller\Adminhtml\Order\Shipment; use Magento\Backend\App\Action; use Magento\Framework\App\ResponseInterface; use Magento\Framework\App\Filesystem\DirectoryList; -use Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection; +use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection; use Magento\Ui\Component\MassAction\Filter; use Magento\Backend\App\Action\Context; use Magento\Shipping\Model\Shipping\LabelGenerator; diff --git a/app/code/Magento/Shipping/Controller/Adminhtml/Shipment/MassPrintShippingLabel.php b/app/code/Magento/Shipping/Controller/Adminhtml/Shipment/MassPrintShippingLabel.php index 5e4e8b8b716fc25fef083b350220c8e3cec8011d..7fba9c9936043c0952e92db9816f49df4318d5d0 100644 --- a/app/code/Magento/Shipping/Controller/Adminhtml/Shipment/MassPrintShippingLabel.php +++ b/app/code/Magento/Shipping/Controller/Adminhtml/Shipment/MassPrintShippingLabel.php @@ -9,7 +9,7 @@ namespace Magento\Shipping\Controller\Adminhtml\Shipment; use Magento\Backend\App\Action; use Magento\Framework\App\ResponseInterface; use Magento\Framework\App\Filesystem\DirectoryList; -use Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection; +use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection; use Magento\Ui\Component\MassAction\Filter; use Magento\Backend\App\Action\Context; use Magento\Shipping\Model\Shipping\LabelGenerator; diff --git a/app/code/Magento/Shipping/Model/Order/Track.php b/app/code/Magento/Shipping/Model/Order/Track.php index 9aab16e72892fb13a1aaf14fc515793e2133aa0e..c707a3d6dc99bb4636634834fdbb467e982bc20f 100644 --- a/app/code/Magento/Shipping/Model/Order/Track.php +++ b/app/code/Magento/Shipping/Model/Order/Track.php @@ -37,7 +37,7 @@ class Track extends \Magento\Sales\Model\Order\Shipment\Track * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param \Magento\Sales\Model\Order\ShipmentRepository $shipmentRepository * @param \Magento\Shipping\Model\CarrierFactory $carrierFactory - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @@ -51,7 +51,7 @@ class Track extends \Magento\Sales\Model\Order\Shipment\Track \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Sales\Model\Order\ShipmentRepository $shipmentRepository, \Magento\Shipping\Model\CarrierFactory $carrierFactory, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Shipping/Model/Shipping/LabelGenerator.php b/app/code/Magento/Shipping/Model/Shipping/LabelGenerator.php index ad4dbab755e3847e21bcae41adbebcc86d9c8586..330bec5c52b755ead7bc57e1eeab3eb6f9df89ea 100644 --- a/app/code/Magento/Shipping/Model/Shipping/LabelGenerator.php +++ b/app/code/Magento/Shipping/Model/Shipping/LabelGenerator.php @@ -17,7 +17,7 @@ class LabelGenerator /** * @var \Magento\Shipping\Model\CarrierFactory */ - protected $_carrierFactory; + protected $carrierFactory; /** * @var \Magento\Shipping\Model\Shipping\LabelsFactory @@ -53,7 +53,7 @@ class LabelGenerator \Magento\Sales\Model\Order\Shipment\TrackFactory $trackFactory, \Magento\Framework\Filesystem $filesystem ) { - $this->_carrierFactory = $carrierFactory; + $this->carrierFactory = $carrierFactory; $this->labelFactory = $labelFactory; $this->scopeConfig = $scopeConfig; $this->trackFactory = $trackFactory; @@ -69,7 +69,7 @@ class LabelGenerator public function create(\Magento\Sales\Model\Order\Shipment $shipment, RequestInterface $request) { $order = $shipment->getOrder(); - $carrier = $this->_carrierFactory->create($order->getShippingMethod(true)->getCarrierCode()); + $carrier = $this->carrierFactory->create($order->getShippingMethod(true)->getCarrierCode()); if (!$carrier->isShippingLabelsAvailable()) { throw new \Magento\Framework\Exception\LocalizedException(__('Shipping labels is not available.')); } @@ -99,12 +99,34 @@ class LabelGenerator $shipment->getStoreId() ); if (!empty($trackingNumbers)) { - foreach ($trackingNumbers as $trackingNumber) { - $track = $this->trackFactory->create() - ->setNumber($trackingNumber) - ->setCarrierCode($carrierCode) - ->setTitle($carrierTitle); - $shipment->addTrack($track); + $this->addTrackingNumbersToShipment($shipment, $trackingNumbers, $carrierCode, $carrierTitle); + } + } + + /** + * @param \Magento\Sales\Model\Order\Shipment $shipment + * @param array $trackingNumbers + * @param string $carrierCode + * @param string $carrierTitle + * + * @return void + */ + private function addTrackingNumbersToShipment( + \Magento\Sales\Model\Order\Shipment $shipment, + $trackingNumbers, + $carrierCode, + $carrierTitle + ) { + foreach ($trackingNumbers as $number) { + if (is_array($number)) { + $this->addTrackingNumbersToShipment($shipment, $number, $carrierCode, $carrierTitle); + } else { + $shipment->addTrack( + $this->trackFactory->create() + ->setNumber($number) + ->setCarrierCode($carrierCode) + ->setTitle($carrierTitle) + ); } } } @@ -147,7 +169,7 @@ class LabelGenerator DirectoryList::TMP ); $directory->create(); - $image = imagecreatefromstring($imageString); + $image = @imagecreatefromstring($imageString); if (!$image) { return false; } diff --git a/app/code/Magento/Shipping/Test/Unit/Model/Shipping/LabelGeneratorTest.php b/app/code/Magento/Shipping/Test/Unit/Model/Shipping/LabelGeneratorTest.php new file mode 100644 index 0000000000000000000000000000000000000000..79de98420e6c89a394d775ffcafa8380a350e7ff --- /dev/null +++ b/app/code/Magento/Shipping/Test/Unit/Model/Shipping/LabelGeneratorTest.php @@ -0,0 +1,236 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Shipping\Test\Unit\Model\Shipping; + +use Magento\Framework\DataObject; +use Magento\Sales\Model\Order\Shipment; +use Magento\Store\Model\ScopeInterface; + +/** + * Class LabelGeneratorTest + * + * Test class for \Magento\Shipping\Model\Shipping\LabelGenerator + */ +class LabelGeneratorTest extends \PHPUnit_Framework_TestCase +{ + const CARRIER_CODE = 'fedex'; + + const CARRIER_TITLE = 'Fedex carrier'; + + /** + * @var \Magento\Shipping\Model\CarrierFactory|\PHPUnit_Framework_MockObject_MockObject + */ + private $carrierFactory; + + /** + * @var \Magento\Shipping\Model\Shipping\LabelsFactory|\PHPUnit_Framework_MockObject_MockObject + */ + private $labelsFactory; + + /** + * @var \Magento\Framework\App\Config\ScopeConfigInterface|\PHPUnit_Framework_MockObject_MockObject + */ + private $scopeConfig; + + /** + * @var \Magento\Sales\Model\Order\Shipment\TrackFactory|\PHPUnit_Framework_MockObject_MockObject + */ + private $trackFactory; + + /** + * @var \Magento\Framework\Filesystem|\PHPUnit_Framework_MockObject_MockObject + */ + private $filesystem; + + /** + * @var \Magento\Shipping\Model\Shipping\LabelGenerator + */ + private $labelGenerator; + + protected function setUp() + { + $this->carrierFactory = $this->getMockBuilder('Magento\Shipping\Model\CarrierFactory') + ->disableOriginalConstructor() + ->getMock(); + $this->labelsFactory = $this->getMockBuilder('Magento\Shipping\Model\Shipping\LabelsFactory') + ->disableOriginalConstructor() + ->setMethods(['create']) + ->getMock(); + $this->scopeConfig = $this->getMock('Magento\Framework\App\Config\ScopeConfigInterface'); + $this->trackFactory = $this->getMockBuilder('Magento\Sales\Model\Order\Shipment\TrackFactory') + ->disableOriginalConstructor() + ->getMock(); + $this->filesystem = $this->getMockBuilder('Magento\Framework\Filesystem') + ->disableOriginalConstructor() + ->getMock(); + + $this->labelGenerator = new \Magento\Shipping\Model\Shipping\LabelGenerator( + $this->carrierFactory, + $this->labelsFactory, + $this->scopeConfig, + $this->trackFactory, + $this->filesystem + ); + } + + /** + * @covers \Magento\Shipping\Model\Shipping\LabelGenerator + * @param array $info + * @dataProvider labelInfoDataProvider + */ + public function testAddTrackingNumbersToShipment(array $info) + { + $order = $this->getMockBuilder('Magento\Sales\Model\Order') + ->disableOriginalConstructor() + ->getMock(); + $order->expects(static::once()) + ->method('getShippingMethod') + ->with(true) + ->willReturn($this->getShippingMethodMock()); + + /** + * @var $shipmentMock \Magento\Sales\Model\Order\Shipment|\PHPUnit_Framework_MockObject_MockObject + */ + $shipmentMock = $this->getMockBuilder('Magento\Sales\Model\Order\Shipment') + ->disableOriginalConstructor() + ->getMock(); + $shipmentMock->expects(static::once())->method('getOrder')->willReturn($order); + + $this->carrierFactory->expects(static::once()) + ->method('create') + ->with(self::CARRIER_CODE) + ->willReturn($this->getCarrierMock()); + + $labelsMock = $this->getMockBuilder('\Magento\Shipping\Model\Shipping\Labels') + ->disableOriginalConstructor() + ->getMock(); + $labelsMock->expects(static::once()) + ->method('requestToShipment') + ->with($shipmentMock) + ->willReturn($this->getResponseMock($info)); + + $this->labelsFactory->expects(static::once()) + ->method('create') + ->willReturn($labelsMock); + + $this->filesystem->expects(static::once()) + ->method('getDirectoryWrite') + ->willReturn($this->getMock('Magento\Framework\Filesystem\Directory\WriteInterface')); + + $this->scopeConfig->expects(static::once()) + ->method('getValue') + ->with( + 'carriers/' . self::CARRIER_CODE . '/title', + ScopeInterface::SCOPE_STORE, + null + )->willReturn(self::CARRIER_TITLE); + + $this->labelsFactory->expects(static::once()) + ->method('create') + ->willReturn($labelsMock); + + $trackMock = $this->getMockBuilder('Magento\Sales\Model\Order\Shipment\Track') + ->setMethods(['setNumber', 'setCarrierCode', 'setTitle']) + ->disableOriginalConstructor() + ->getMock(); + + $i = 0; + $trackingNumbers = is_array($info['tracking_number']) ? $info['tracking_number'] : [$info['tracking_number']]; + foreach ($trackingNumbers as $trackingNumber) { + $trackMock->expects(static::at($i++)) + ->method('setNumber') + ->with($trackingNumber) + ->willReturnSelf(); + $trackMock->expects(static::at($i++)) + ->method('setCarrierCode') + ->with(self::CARRIER_CODE) + ->willReturnSelf(); + $trackMock->expects(static::at($i++)) + ->method('setTitle') + ->with(self::CARRIER_TITLE) + ->willReturnSelf(); + } + + $this->trackFactory->expects(static::any()) + ->method('create') + ->willReturn($trackMock); + + /** + * @var $requestMock \Magento\Framework\App\RequestInterface|\PHPUnit_Framework_MockObject_MockObject + */ + $requestMock = $this->getMock('Magento\Framework\App\RequestInterface'); + $this->labelGenerator->create($shipmentMock, $requestMock); + } + + /** + * @return \PHPUnit_Framework_MockObject_MockObject + */ + private function getShippingMethodMock() + { + $shippingMethod = $this->getMockBuilder('Magento\Framework\DataObject') + ->disableOriginalConstructor() + ->setMethods(['getCarrierCode']) + ->getMock(); + $shippingMethod->expects(static::once()) + ->method('getCarrierCode') + ->willReturn(self::CARRIER_CODE); + + return $shippingMethod; + } + + /** + * @return \PHPUnit_Framework_MockObject_MockObject + */ + private function getCarrierMock() + { + $carrierMock = $this->getMockBuilder('Magento\Shipping\Model\Carrier\AbstractCarrier') + ->disableOriginalConstructor() + ->setMethods(['isShippingLabelsAvailable', 'getCarrierCode']) + ->getMockForAbstractClass(); + $carrierMock->expects(static::once()) + ->method('isShippingLabelsAvailable') + ->willReturn(true); + $carrierMock->expects(static::once()) + ->method('getCarrierCode') + ->willReturn(self::CARRIER_CODE); + + return $carrierMock; + } + + /** + * @param array $info + * @return \PHPUnit_Framework_MockObject_MockObject + */ + private function getResponseMock(array $info) + { + $responseMock = $this->getMockBuilder('\Magento\Framework\DataObject') + ->setMethods(['hasErrors', 'hasInfo', 'getInfo']) + ->disableOriginalConstructor() + ->getMock(); + $responseMock->expects(static::once()) + ->method('hasErrors') + ->willReturn(false); + $responseMock->expects(static::once()) + ->method('hasInfo') + ->willReturn(true); + $responseMock->expects(static::once()) + ->method('getInfo') + ->willReturn([$info]); + + return $responseMock; + } + + /** + * @return array + */ + public function labelInfoDataProvider() + { + return [ + [['tracking_number' => ['111111', '222222', '333333'], 'label_content' => 'some']], + [['tracking_number' => '111111', 'label_content' => 'some']], + ]; + } +} diff --git a/app/code/Magento/Shipping/view/adminhtml/templates/create/items.phtml b/app/code/Magento/Shipping/view/adminhtml/templates/create/items.phtml index 0aed9867ff6502cc619759ab8dec71882bcfdc41..3044a6dc5e844f7c330e262683e998d4c7f4755c 100644 --- a/app/code/Magento/Shipping/view/adminhtml/templates/create/items.phtml +++ b/app/code/Magento/Shipping/view/adminhtml/templates/create/items.phtml @@ -115,8 +115,9 @@ <script> require([ "jquery", + "Magento_Ui/js/modal/alert", "prototype" -], function(jQuery){ +], function(jQuery, alert){ //<![CDATA[ var sendEmailCheckbox = $('send_email'); @@ -145,7 +146,9 @@ window.toggleCreateLabelCheckbox = function() { } window.submitShipment = function(btn) { if (!validQtyItems()) { - alert('<?php /* @escapeNotVerified */ echo __('Invalid value(s) for Qty to Ship') ?>'); + alert({ + content: '<?php /* @escapeNotVerified */ echo __('Invalid value(s) for Qty to Ship') ?>' + }); return; } var checkbox = $(btn).up('.order-totals').select('#create_shipping_label')[0]; diff --git a/app/code/Magento/Shipping/view/adminhtml/templates/order/packaging/packed.phtml b/app/code/Magento/Shipping/view/adminhtml/templates/order/packaging/packed.phtml index 821d5065ac63de9a26af68f446220c2f75072f8d..1779164460f2e8d9bff57dcc96be69d0a01cfbb2 100644 --- a/app/code/Magento/Shipping/view/adminhtml/templates/order/packaging/packed.phtml +++ b/app/code/Magento/Shipping/view/adminhtml/templates/order/packaging/packed.phtml @@ -7,184 +7,170 @@ // @codingStandardsIgnoreFile ?> -<div id="popup-window-mask" style="display:none;"></div> -<div id="packed_window" style="display:none;" class="packed-window"> - <div class="popup-window-wrapper"> - <div class="popup-window-title"> - <span class="title"><?php /* @escapeNotVerified */ echo __('Packages') ?></span> + +<div id="packed_window"> +<?php foreach ($block->getPackages() as $packageId => $package): ?> + <?php $package = new \Magento\Framework\DataObject($package) ?> + <?php $params = new \Magento\Framework\DataObject($package->getParams()) ?> + <section class="admin__page-section"> + <div class="admin__page-section-title"> + <span class="title"><?php /* @escapeNotVerified */ echo __('Package') . ' ' . $packageId ?></span> </div> - <div class="packed-content"> - <div class="popup-window-content"> - <?php foreach ($block->getPackages() as $packageId => $package): ?> - <div class="package"> - <?php $package = new \Magento\Framework\DataObject($package) ?> - <?php $params = new \Magento\Framework\DataObject($package->getParams()) ?> - <div class="package-number popup-fieldset-title"> - <div class="title"><?php /* @escapeNotVerified */ echo __('Package') . ' ' . $packageId ?></div> - </div> - <div class="package-info"> - <table class="package-options"> - <tbody> - <tr> - <th><?php /* @escapeNotVerified */ echo __('Type') ?></th> - <td><?php /* @escapeNotVerified */ echo $block->getContainerTypeByCode($params->getContainer()) ?></td> - <th><?php /* @escapeNotVerified */ echo __('Length') ?></th> - <td> - <?php if ($params->getLength() != null): ?> - <?php /* @escapeNotVerified */ echo $params->getLength() . ' ' . $this->helper('Magento\Shipping\Helper\Carrier')->getMeasureDimensionName($params->getDimensionUnits()) ?> - <?php else: ?> - -- - <?php endif; ?> - </td> - <?php if ($params->getDeliveryConfirmation() != null): ?> - <th><?php /* @escapeNotVerified */ echo __('Signature Confirmation') ?></th> - <td><?php /* @escapeNotVerified */ echo $block->getDeliveryConfirmationTypeByCode($params->getDeliveryConfirmation()) ?></td> - <?php else: ?> - <th> </th> - <td> </td> - <?php endif; ?> - </tr> - <tr> - <?php if ($block->displayCustomsValue()): ?> - <th><?php /* @escapeNotVerified */ echo __('Customs Value') ?></th> - <td><?php /* @escapeNotVerified */ echo $block->displayCustomsPrice($params->getCustomsValue()) ?></td> - <?php else: ?> - <th><?php /* @escapeNotVerified */ echo __('Total Weight') ?></th> - <td><?php /* @escapeNotVerified */ echo $params->getWeight() . ' ' . $this->helper('Magento\Shipping\Helper\Carrier')->getMeasureWeightName($params->getWeightUnits()) ?></td> - <?php endif; ?> - <th><?php /* @escapeNotVerified */ echo __('Width') ?></th> - <td> - <?php if ($params->getWidth() != null): ?> - <?php /* @escapeNotVerified */ echo $params->getWidth() . ' ' . $this->helper('Magento\Shipping\Helper\Carrier')->getMeasureDimensionName($params->getDimensionUnits()) ?> - <?php else: ?> - -- - <?php endif; ?> - </td> - <?php if ($params->getContentType() != null): ?> - <th><?php /* @escapeNotVerified */ echo __('Contents') ?></th> - <?php if ($params->getContentType() == 'OTHER'): ?> - <td><?php echo $block->escapeHtml($params->getContentTypeOther()) ?></td> - <?php else: ?> - <td><?php /* @escapeNotVerified */ echo $block->getContentTypeByCode($params->getContentType()) ?></td> - <?php endif; ?> - <?php else: ?> - <th> </th> - <td> </td> - <?php endif; ?> - </tr> - <tr> - <?php if ($block->displayCustomsValue()): ?> - <th><?php /* @escapeNotVerified */ echo __('Total Weight') ?></th> - <td><?php /* @escapeNotVerified */ echo $params->getWeight() . ' ' . $this->helper('Magento\Shipping\Helper\Carrier')->getMeasureWeightName($params->getWeightUnits()) ?></td> - <?php else: ?> - <th> </th> - <td> </td> - <?php endif; ?> - <th><?php /* @escapeNotVerified */ echo __('Height') ?></th> - <td> - <?php if ($params->getHeight() != null): ?> - <?php /* @escapeNotVerified */ echo $params->getHeight() . ' ' . $this->helper('Magento\Shipping\Helper\Carrier')->getMeasureDimensionName($params->getDimensionUnits()) ?> - <?php else: ?> - -- - <?php endif; ?> - <td> - <th> </th> - <td> </td> - </tr> - <tr> - <?php if ($params->getSize()): ?> - <th><?php /* @escapeNotVerified */ echo __('Size') ?></th> - <td><?php /* @escapeNotVerified */ echo ucfirst(strtolower($params->getSize())) ?></td> - <?php else: ?> - <th> </th> - <td> </td> - <?php endif; ?> - <?php if ($params->getGirth()): ?> - <th><?php /* @escapeNotVerified */ echo __('Girth') ?></th> - <td><?php /* @escapeNotVerified */ echo $params->getGirth() . ' ' . $this->helper('Magento\Shipping\Helper\Carrier')->getMeasureDimensionName($params->getGirthDimensionUnits()) ?></td> - <?php else: ?> - <th> </th> - <td> </td> - <?php endif; ?> - <th> </th> - <td> </td> - </tr> - </tbody> - </table> - </div> - <div class="package-number popup-fieldset-title"> - <div class="title"><?php /* @escapeNotVerified */ echo __('Items in the Package') ?></div> - </div> - <div class="grid"> - <table class="data"> - <thead> - <tr class="headings"> - <th class="col-product no-link"><span><?php /* @escapeNotVerified */ echo __('Product') ?></span></th> - <th class="col-weight no-link"><span><?php /* @escapeNotVerified */ echo __('Weight') ?></span></th> - <?php if ($block->displayCustomsValue()): ?> - <th class="col-custom no-link"><span><?php /* @escapeNotVerified */ echo __('Customs Value') ?></span></th> + <div class="admin__page-section-content"> + <div class="row row-gutter"> + <div class="col-m-4"> + <table class="admin__table-secondary"> + <tbody> + <tr> + <th><?php /* @escapeNotVerified */ echo __('Type') ?></th> + <td><?php /* @escapeNotVerified */ echo $block->getContainerTypeByCode($params->getContainer()) ?></td> + </tr> + <tr> + <?php if ($block->displayCustomsValue()): ?> + <th><?php /* @escapeNotVerified */ echo __('Customs Value') ?></th> + <td><?php /* @escapeNotVerified */ echo $block->displayCustomsPrice($params->getCustomsValue()) ?></td> + <?php else: ?> + <th><?php /* @escapeNotVerified */ echo __('Total Weight') ?></th> + <td><?php /* @escapeNotVerified */ echo $params->getWeight() . ' ' . $this->helper('Magento\Shipping\Helper\Carrier')->getMeasureWeightName($params->getWeightUnits()) ?></td> + <?php endif; ?> + </tr> + <?php if ($params->getSize()): ?> + <tr> + <th><?php /* @escapeNotVerified */ echo __('Size') ?></th> + <td><?php /* @escapeNotVerified */ echo ucfirst(strtolower($params->getSize())) ?></td> + </tr> + <?php endif; ?> + </tbody> + </table> + </div> + <div class="col-m-4"> + <table class="admin__table-secondary"> + <tbody> + <tr> + <th><?php /* @escapeNotVerified */ echo __('Length') ?></th> + <td> + <?php if ($params->getLength() != null): ?> + <?php /* @escapeNotVerified */ echo $params->getLength() . ' ' . $this->helper('Magento\Shipping\Helper\Carrier')->getMeasureDimensionName($params->getDimensionUnits()) ?> + <?php else: ?> + -- <?php endif; ?> - <th class="col-qty_ordered no-link"><span><?php /* @escapeNotVerified */ echo __('Qty Ordered') ?></span></th> - <th class="col-qty no-link last"><span><?php /* @escapeNotVerified */ echo __('Qty') ?></span></th> + </td> </tr> - </thead> - <tbody id=""> - <?php foreach ($package->getItems() as $itemId => $item) : ?> - <?php $item = new \Magento\Framework\DataObject($item) ?> - <tr title="#" id="" class=""> - <td class="col-product name"> - <?php /* @escapeNotVerified */ echo $item->getName(); ?> - </td> - <td class="col-weight weight "> - <?php /* @escapeNotVerified */ echo $item->getWeight(); ?> - </td> - <?php if ($block->displayCustomsValue()): ?> - <td class="col-custom "><?php /* @escapeNotVerified */ echo $block->displayCustomsPrice($item->getCustomsValue()) ?></td> - <?php endif; ?> - <td class="col-qty_ordered"> - <?php /* @escapeNotVerified */ echo $block->getQtyOrderedItem($item->getOrderItemId()); ?> - </td> - <td class="col-qty last"> - <?php /* @escapeNotVerified */ echo $item->getQty()*1; ?> - </td> - </tr> - <?php endforeach; ?> - </tbody> - </table> - </div> + <tr> + <th><?php /* @escapeNotVerified */ echo __('Width') ?></th> + <td> + <?php if ($params->getWidth() != null): ?> + <?php /* @escapeNotVerified */ echo $params->getWidth() . ' ' . $this->helper('Magento\Shipping\Helper\Carrier')->getMeasureDimensionName($params->getDimensionUnits()) ?> + <?php else: ?> + -- + <?php endif; ?> + </td> + </tr> + <tr> + <th><?php /* @escapeNotVerified */ echo __('Height') ?></th> + <td> + <?php if ($params->getHeight() != null): ?> + <?php /* @escapeNotVerified */ echo $params->getHeight() . ' ' . $this->helper('Magento\Shipping\Helper\Carrier')->getMeasureDimensionName($params->getDimensionUnits()) ?> + <?php else: ?> + -- + <?php endif; ?> + </td> + </tr> + </tbody> + </table> + </div> + <div class="col-m-4"> + <table class="admin__table-secondary"> + <tbody> + <?php if ($params->getDeliveryConfirmation() != null): ?> + <tr> + <th><?php /* @escapeNotVerified */ echo __('Signature Confirmation') ?></th> + <td><?php /* @escapeNotVerified */ echo $block->getDeliveryConfirmationTypeByCode($params->getDeliveryConfirmation()) ?></td> + </tr> + <?php endif; ?> + <?php if ($params->getContentType() != null): ?> + <tr> + <th><?php /* @escapeNotVerified */ echo __('Contents') ?></th> + <?php if ($params->getContentType() == 'OTHER'): ?> + <td><?php echo $block->escapeHtml($params->getContentTypeOther()) ?></td> + <?php else: ?> + <td><?php /* @escapeNotVerified */ echo $block->getContentTypeByCode($params->getContentType()) ?></td> + <?php endif; ?> + </tr> + <?php endif; ?> + <?php if ($params->getGirth()): ?> + <tr> + <th><?php /* @escapeNotVerified */ echo __('Girth') ?></th> + <td><?php /* @escapeNotVerified */ echo $params->getGirth() . ' ' . $this->helper('Magento\Shipping\Helper\Carrier')->getMeasureDimensionName($params->getGirthDimensionUnits()) ?></td> + </tr> + <?php endif; ?> + </tbody> + </table> </div> - <?php endforeach; ?> </div> </div> - <div class="popup-window-buttons-set"> - <?php /* @escapeNotVerified */ echo $block->getPrintButton() ?> - <button type="button" class="action-ok SavePackagesBtn save" onclick="hidePackedWindow();" title="<?php /* @escapeNotVerified */ echo __('Products should be added to package(s)')?>"> - <span><?php /* @escapeNotVerified */ echo __('OK') ?></span> - </button> + <div class="admin__page-section-item-title"> + <span class="title"><?php /* @escapeNotVerified */ echo __('Items in the Package') ?></span> </div> - </div> + <div class="admin__table-wrapper"> + <table class="data-table admin__table-primary"> + <thead> + <tr class="headings"> + <th class="col-product"><span><?php /* @escapeNotVerified */ echo __('Product') ?></span></th> + <th class="col-weight"><span><?php /* @escapeNotVerified */ echo __('Weight') ?></span></th> + <?php if ($block->displayCustomsValue()): ?> + <th class="col-custom"><span><?php /* @escapeNotVerified */ echo __('Customs Value') ?></span></th> + <?php endif; ?> + <th class="col-qty"><span><?php /* @escapeNotVerified */ echo __('Qty Ordered') ?></span></th> + <th class="col-qty"><span><?php /* @escapeNotVerified */ echo __('Qty') ?></span></th> + </tr> + </thead> + <tbody id=""> + <?php foreach ($package->getItems() as $itemId => $item) : ?> + <?php $item = new \Magento\Framework\DataObject($item) ?> + <tr title="#" id=""> + <td class="col-product"> + <?php /* @escapeNotVerified */ echo $item->getName(); ?> + </td> + <td class="col-weight"> + <?php /* @escapeNotVerified */ echo $item->getWeight(); ?> + </td> + <?php if ($block->displayCustomsValue()): ?> + <td class="col-custom"><?php /* @escapeNotVerified */ echo $block->displayCustomsPrice($item->getCustomsValue()) ?></td> + <?php endif; ?> + <td class="col-qty"> + <?php /* @escapeNotVerified */ echo $block->getQtyOrderedItem($item->getOrderItemId()); ?> + </td> + <td class="col-qty"> + <?php /* @escapeNotVerified */ echo $item->getQty()*1; ?> + </td> + </tr> + <?php endforeach; ?> + </tbody> + </table> + </div> + </section> +<?php endforeach; ?> </div> - <script> -require(['prototype'], function(){ - -//<![CDATA[ function showPackedWindow() { - var window = $('packed_window'); - window.show().setStyle({ - 'marginLeft': -window.getDimensions().width/2 + 'px' - }); - $('popup-window-mask').setStyle({ - height: $('html-body').getHeight() + 'px' - }).show(); + jQuery('#packed_window').modal('openModal'); } - function hidePackedWindow() { - $('packed_window').hide(); - $('popup-window-mask').hide(); +</script> +<?php +$printLocation = $block->getUrl( + 'adminhtml/order_shipment/printPackage', + array('shipment_id' => $block->getShipment()->getId()) +); +?> +<script type="text/x-magento-init"> + { + "#packed_window": { + "Magento_Shipping/js/packages":{ + "type":"slide", + "title":"<?= /* @escapeNotVerified */ __('Packages') ?>", + "url": "<?= /* @escapeNotVerified */ $printLocation ?>" + } + } } - window.hidePackedWindow = hidePackedWindow; - window.showPackedWindow = showPackedWindow; -//]]> - -}); </script> diff --git a/app/code/Magento/Shipping/view/adminhtml/templates/order/Tracking/view.phtml b/app/code/Magento/Shipping/view/adminhtml/templates/order/tracking/view.phtml similarity index 100% rename from app/code/Magento/Shipping/view/adminhtml/templates/order/Tracking/view.phtml rename to app/code/Magento/Shipping/view/adminhtml/templates/order/tracking/view.phtml diff --git a/app/code/Magento/Shipping/view/adminhtml/web/js/packages.js b/app/code/Magento/Shipping/view/adminhtml/web/js/packages.js new file mode 100644 index 0000000000000000000000000000000000000000..36b934c0e9c7ec58d553a463fdd051d7658f163b --- /dev/null +++ b/app/code/Magento/Shipping/view/adminhtml/web/js/packages.js @@ -0,0 +1,39 @@ +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +define([ + 'jquery', + 'Magento_Ui/js/modal/modal', + 'mage/translate' +], function ($, modal, $t) { + 'use strict'; + + return function (config, element) { + config.buttons = [ + { + text: $t('Print'), + 'class': 'action action-primary', + + /** + * Click handler + */ + click: function () { + window.location.href = this.options.url; + } + }, { + text: $t('Cancel'), + 'class': 'action action-secondary', + + /** + * Click handler + */ + click: function () { + this.closeModal(); + } + } + ]; + modal(config, element); + }; +}); diff --git a/app/code/Magento/Sitemap/Model/ResourceModel/Catalog/Category.php b/app/code/Magento/Sitemap/Model/ResourceModel/Catalog/Category.php index 3642359663dff80a7cd30790b34b1a27642646cd..75e853c13c6024ec0969a2a163d00fce5eafde9d 100644 --- a/app/code/Magento/Sitemap/Model/ResourceModel/Catalog/Category.php +++ b/app/code/Magento/Sitemap/Model/ResourceModel/Catalog/Category.php @@ -12,7 +12,7 @@ use Magento\CatalogUrlRewrite\Model\CategoryUrlRewriteGenerator; * * @author Magento Core Team <core@magentocommerce.com> */ -class Category extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Category extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Collection Zend Db select @@ -39,13 +39,13 @@ class Category extends \Magento\Framework\Model\ModelResource\Db\AbstractDb protected $_categoryResource; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param \Magento\Catalog\Model\ResourceModel\Category $categoryResource * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Catalog\Model\ResourceModel\Category $categoryResource, $connectionName = null diff --git a/app/code/Magento/Sitemap/Model/ResourceModel/Catalog/Product.php b/app/code/Magento/Sitemap/Model/ResourceModel/Catalog/Product.php index 9a02e012a0132e61387f61e1abd9a21da1456b10..5a93ef13583fe43c2dc45ad7e19aa294c46c4094 100644 --- a/app/code/Magento/Sitemap/Model/ResourceModel/Catalog/Product.php +++ b/app/code/Magento/Sitemap/Model/ResourceModel/Catalog/Product.php @@ -13,7 +13,7 @@ use Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator; * @author Magento Core Team <core@magentocommerce.com> * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ -class Product extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Product extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { const NOT_SELECTED_IMAGE = 'no_selection'; @@ -83,7 +83,7 @@ class Product extends \Magento\Framework\Model\ModelResource\Db\AbstractDb protected $_mediaConfig; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Sitemap\Helper\Data $sitemapData * @param \Magento\Catalog\Model\ResourceModel\Product $productResource * @param \Magento\Store\Model\StoreManagerInterface $storeManager @@ -96,7 +96,7 @@ class Product extends \Magento\Framework\Model\ModelResource\Db\AbstractDb * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Sitemap\Helper\Data $sitemapData, \Magento\Catalog\Model\ResourceModel\Product $productResource, \Magento\Store\Model\StoreManagerInterface $storeManager, diff --git a/app/code/Magento/Sitemap/Model/ResourceModel/Cms/Page.php b/app/code/Magento/Sitemap/Model/ResourceModel/Cms/Page.php index 34879578665f51ece101b04432d5e9dbe7081e57..07640bb6a7f2e18902ce628c2070814eb09ef0ca 100644 --- a/app/code/Magento/Sitemap/Model/ResourceModel/Cms/Page.php +++ b/app/code/Magento/Sitemap/Model/ResourceModel/Cms/Page.php @@ -10,7 +10,7 @@ namespace Magento\Sitemap\Model\ResourceModel\Cms; * * @author Magento Core Team <core@magentocommerce.com> */ -class Page extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Page extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Init resource model (catalog/category) diff --git a/app/code/Magento/Sitemap/Model/ResourceModel/Sitemap.php b/app/code/Magento/Sitemap/Model/ResourceModel/Sitemap.php index 63daf336eed075b220e251abc9ce656acc577d82..b3ff7ce4838c62655195eaf80fa533ce375d9da2 100644 --- a/app/code/Magento/Sitemap/Model/ResourceModel/Sitemap.php +++ b/app/code/Magento/Sitemap/Model/ResourceModel/Sitemap.php @@ -10,7 +10,7 @@ namespace Magento\Sitemap\Model\ResourceModel; * * @author Magento Core Team <core@magentocommerce.com> */ -class Sitemap extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Sitemap extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Init resource model diff --git a/app/code/Magento/Sitemap/Model/ResourceModel/Sitemap/Collection.php b/app/code/Magento/Sitemap/Model/ResourceModel/Sitemap/Collection.php index d6a575daf840b112a8b582f7f6b7912afd825ad9..b470759b8901a99f4a9fc6c759016f38112cd56c 100644 --- a/app/code/Magento/Sitemap/Model/ResourceModel/Sitemap/Collection.php +++ b/app/code/Magento/Sitemap/Model/ResourceModel/Sitemap/Collection.php @@ -10,7 +10,7 @@ namespace Magento\Sitemap\Model\ResourceModel\Sitemap; * * @author Magento Core Team <core@magentocommerce.com> */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Init collection diff --git a/app/code/Magento/Sitemap/Model/Sitemap.php b/app/code/Magento/Sitemap/Model/Sitemap.php index 9ec5c4b988bde2e113fffc528a2d63915141ebac..722c823d3f02854a938fb5280da07669e957b9e5 100644 --- a/app/code/Magento/Sitemap/Model/Sitemap.php +++ b/app/code/Magento/Sitemap/Model/Sitemap.php @@ -159,7 +159,7 @@ class Sitemap extends \Magento\Framework\Model\AbstractModel * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param \Magento\Framework\App\RequestInterface $request * @param \Magento\Framework\Stdlib\DateTime $dateTime - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -177,7 +177,7 @@ class Sitemap extends \Magento\Framework\Model\AbstractModel \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Framework\App\RequestInterface $request, \Magento\Framework\Stdlib\DateTime $dateTime, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Store/App/Request/PathInfoProcessor.php b/app/code/Magento/Store/App/Request/PathInfoProcessor.php index ebe3b64aa3b9c90283a41a36a2fa62843ddd819d..ef07979226c54544c0650487071ae7e045255ffa 100644 --- a/app/code/Magento/Store/App/Request/PathInfoProcessor.php +++ b/app/code/Magento/Store/App/Request/PathInfoProcessor.php @@ -5,19 +5,21 @@ */ namespace Magento\Store\App\Request; +use Magento\Framework\Exception\NoSuchEntityException; + class PathInfoProcessor implements \Magento\Framework\App\Request\PathInfoProcessorInterface { /** * @var \Magento\Store\Model\StoreManagerInterface */ - private $_storeManager; + private $storeManager; /** * @param \Magento\Store\Model\StoreManagerInterface $storeManager */ public function __construct(\Magento\Store\Model\StoreManagerInterface $storeManager) { - $this->_storeManager = $storeManager; + $this->storeManager = $storeManager; } /** @@ -33,14 +35,15 @@ class PathInfoProcessor implements \Magento\Framework\App\Request\PathInfoProces $storeCode = $pathParts[0]; try { - $store = $this->_storeManager->getStore($storeCode); - } catch (\InvalidArgumentException $e) { // TODO: MAGETWO-39826 Need to replace on NoSuchEntityException + /** @var \Magento\Store\Api\Data\StoreInterface $store */ + $store = $this->storeManager->getStore($storeCode); + } catch (NoSuchEntityException $e) { return $pathInfo; } if ($store->isUseStoreInUrl()) { if (!$request->isDirectAccessFrontendName($storeCode)) { - $this->_storeManager->setCurrentStore($storeCode); + $this->storeManager->setCurrentStore($storeCode); $pathInfo = '/' . (isset($pathParts[1]) ? $pathParts[1] : ''); return $pathInfo; } elseif (!empty($storeCode)) { diff --git a/app/code/Magento/Store/Controller/Store/SwitchAction.php b/app/code/Magento/Store/Controller/Store/SwitchAction.php index 647b2cf6c320f7e6f277fd155d9bf52232a450cf..b527b7ad4fe702f5194e115229d0bb4699388ca0 100644 --- a/app/code/Magento/Store/Controller/Store/SwitchAction.php +++ b/app/code/Magento/Store/Controller/Store/SwitchAction.php @@ -9,6 +9,7 @@ namespace Magento\Store\Controller\Store; use Magento\Framework\App\Action\Action; use Magento\Framework\App\Action\Context as ActionContext; use Magento\Framework\App\Http\Context as HttpContext; +use Magento\Framework\Exception\NoSuchEntityException; use Magento\Store\Api\StoreCookieManagerInterface; use Magento\Store\Api\StoreRepositoryInterface; use Magento\Store\Model\Store; @@ -78,7 +79,7 @@ class SwitchAction extends Action $store = $this->storeRepository->getActiveStoreByCode($storeCode); } catch (StoreIsInactiveException $e) { $error = __('Requested store is inactive'); - } catch (\InvalidArgumentException $e) { + } catch (NoSuchEntityException $e) { $error = __('Requested store is not found'); } diff --git a/app/code/Magento/Store/Model/Group.php b/app/code/Magento/Store/Model/Group.php index be5d7603d9dd26e636d0c8d8c46ad31db5b69f1f..7ef0dd37d50391d52ff4d99a20b33237c21803f9 100644 --- a/app/code/Magento/Store/Model/Group.php +++ b/app/code/Magento/Store/Model/Group.php @@ -103,7 +103,7 @@ class Group extends \Magento\Framework\Model\AbstractExtensibleModel implements * @param \Magento\Config\Model\ResourceModel\Config\Data $configDataResource * @param \Magento\Store\Model\Store $store * @param \Magento\Store\Model\StoreManagerInterface $storeManager - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -116,7 +116,7 @@ class Group extends \Magento\Framework\Model\AbstractExtensibleModel implements \Magento\Config\Model\ResourceModel\Config\Data $configDataResource, \Magento\Store\Model\ResourceModel\Store\CollectionFactory $storeListFactory, \Magento\Store\Model\StoreManagerInterface $storeManager, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Store/Model/ResourceModel/Config/Collection/Scoped.php b/app/code/Magento/Store/Model/ResourceModel/Config/Collection/Scoped.php index 21ea5ee90904fba012f41b219c90e1f8ba6ed562..3e37e1ad8d6a0305ae34675f64479d4278a60e1a 100644 --- a/app/code/Magento/Store/Model/ResourceModel/Config/Collection/Scoped.php +++ b/app/code/Magento/Store/Model/ResourceModel/Config/Collection/Scoped.php @@ -7,7 +7,7 @@ */ namespace Magento\Store\Model\ResourceModel\Config\Collection; -class Scoped extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Scoped extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Scope to filter by diff --git a/app/code/Magento/Store/Model/ResourceModel/Group.php b/app/code/Magento/Store/Model/ResourceModel/Group.php index b46679e118e661ff51d6c24421ac21f271b32c08..c3365055aa47d849c6584ee9a8b23bb7fa619970 100644 --- a/app/code/Magento/Store/Model/ResourceModel/Group.php +++ b/app/code/Magento/Store/Model/ResourceModel/Group.php @@ -8,7 +8,7 @@ namespace Magento\Store\Model\ResourceModel; /** * Store group resource model */ -class Group extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Group extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Define main table diff --git a/app/code/Magento/Store/Model/ResourceModel/Group/Collection.php b/app/code/Magento/Store/Model/ResourceModel/Group/Collection.php index b452660b04b1c5aacfad016c796f854bd213df3d..805b90c291abf0d66f79229649d2b6d7a7f59030 100644 --- a/app/code/Magento/Store/Model/ResourceModel/Group/Collection.php +++ b/app/code/Magento/Store/Model/ResourceModel/Group/Collection.php @@ -8,7 +8,7 @@ namespace Magento\Store\Model\ResourceModel\Group; /** * Store group collection */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Define resource model diff --git a/app/code/Magento/Store/Model/ResourceModel/Store.php b/app/code/Magento/Store/Model/ResourceModel/Store.php index 58d74f0173e922c3bb166d40c542ecd034360931..fec1340afe64d53a36823924841dd2cb04922c11 100644 --- a/app/code/Magento/Store/Model/ResourceModel/Store.php +++ b/app/code/Magento/Store/Model/ResourceModel/Store.php @@ -8,7 +8,7 @@ namespace Magento\Store\Model\ResourceModel; /** * Store Resource Model */ -class Store extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Store extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * @var \Magento\Framework\App\Cache\Type\Config @@ -16,11 +16,11 @@ class Store extends \Magento\Framework\Model\ModelResource\Db\AbstractDb protected $configCache; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Framework\App\Cache\Type\Config $configCacheType */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Framework\App\Cache\Type\Config $configCacheType ) { $this->configCache = $configCacheType; diff --git a/app/code/Magento/Store/Model/ResourceModel/Store/Collection.php b/app/code/Magento/Store/Model/ResourceModel/Store/Collection.php index 30852811667dcb598a629af826c03df4979dbddf..ebef78956a418fc4838bf0b48b68a61a3eaf9502 100644 --- a/app/code/Magento/Store/Model/ResourceModel/Store/Collection.php +++ b/app/code/Magento/Store/Model/ResourceModel/Store/Collection.php @@ -8,7 +8,7 @@ namespace Magento\Store\Model\ResourceModel\Store; /** * Stores collection */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Name prefix of events that are dispatched by model diff --git a/app/code/Magento/Store/Model/ResourceModel/Website.php b/app/code/Magento/Store/Model/ResourceModel/Website.php index 884a50958e6ade5664ec439d92760f411f566744..43b2612d2160c6f40fe581e146156c319643f881 100644 --- a/app/code/Magento/Store/Model/ResourceModel/Website.php +++ b/app/code/Magento/Store/Model/ResourceModel/Website.php @@ -11,7 +11,7 @@ namespace Magento\Store\Model\ResourceModel; /** * Website Resource Model */ -class Website extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Website extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Define main table diff --git a/app/code/Magento/Store/Model/ResourceModel/Website/Collection.php b/app/code/Magento/Store/Model/ResourceModel/Website/Collection.php index 6eb5383fb8b85d894cd4447403fcdd62ad1b3e9b..419350a90318e4ba520551e0d17860be5d709a4a 100644 --- a/app/code/Magento/Store/Model/ResourceModel/Website/Collection.php +++ b/app/code/Magento/Store/Model/ResourceModel/Website/Collection.php @@ -8,7 +8,7 @@ namespace Magento\Store\Model\ResourceModel\Website; /** * Websites collection */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Map field to alias diff --git a/app/code/Magento/Store/Model/Service/StoreConfigManager.php b/app/code/Magento/Store/Model/Service/StoreConfigManager.php index 0a0be53da91297c9fba9c562b02447993efe1d1d..0774f616c688077e36e3632bc35e640429229099 100644 --- a/app/code/Magento/Store/Model/Service/StoreConfigManager.php +++ b/app/code/Magento/Store/Model/Service/StoreConfigManager.php @@ -34,6 +34,7 @@ class StoreConfigManager implements \Magento\Store\Api\StoreConfigManagerInterfa 'setBaseCurrencyCode' => 'currency/options/base', 'setDefaultDisplayCurrencyCode' => 'currency/options/default', 'setTimezone' => 'general/locale/timezone', + 'setWeightUnit' => \Magento\Directory\Helper\Data::XML_PATH_WEIGHT_UNIT ]; /** @@ -91,9 +92,6 @@ class StoreConfigManager implements \Magento\Store\Api\StoreConfigManagerInterfa $storeConfig->$methodName($configValue); } - //Hard code the weight unit for now - $storeConfig->setWeightUnit('lbs'); - $storeConfig->setBaseUrl($store->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_WEB, false)); $storeConfig->setSecureBaseUrl($store->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_WEB, true)); $storeConfig->setBaseLinkUrl($store->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_LINK, false)); diff --git a/app/code/Magento/Store/Model/StoreRepository.php b/app/code/Magento/Store/Model/StoreRepository.php index de3c80adf2b50a3506ee5907faebdcde13e0df2d..3b2d9bcd03a4f047043dc444ceca081e6007ebd2 100644 --- a/app/code/Magento/Store/Model/StoreRepository.php +++ b/app/code/Magento/Store/Model/StoreRepository.php @@ -57,8 +57,7 @@ class StoreRepository implements \Magento\Store\Api\StoreRepositoryInterface $store = $this->storeFactory->create(); $store->load($code, 'code'); if ($store->getId() === null) { - // TODO: MAGETWO-39826 Need to replace on NoSuchEntityException - throw new \InvalidArgumentException(); + throw new NoSuchEntityException(__('Requested store is not found')); } $this->entities[$code] = $store; $this->entitiesById[$store->getId()] = $store; @@ -89,7 +88,7 @@ class StoreRepository implements \Magento\Store\Api\StoreRepositoryInterface $store = $this->storeFactory->create(); $store->load($id); if ($store->getId() === null) { - throw new NoSuchEntityException(); + throw new NoSuchEntityException(__('Requested store is not found')); } $this->entitiesById[$id] = $store; $this->entities[$store->getCode()] = $store; diff --git a/app/code/Magento/Store/Model/StoreResolver.php b/app/code/Magento/Store/Model/StoreResolver.php index 79a6e53423c79fc953185864180f8fcbae4a41f7..1f37a8611a2772fcab985224bff9b9fe8db8650b 100644 --- a/app/code/Magento/Store/Model/StoreResolver.php +++ b/app/code/Magento/Store/Model/StoreResolver.php @@ -137,14 +137,9 @@ class StoreResolver implements \Magento\Store\Api\StoreResolverInterface try { $store = $this->storeRepository->getActiveStoreByCode($storeCode); } catch (StoreIsInactiveException $e) { - $error = __('Requested store is inactive'); - } catch (\InvalidArgumentException $e) { // TODO: MAGETWO-39826 Need to replace on NoSuchEntityException - $error = __('Requested store is not found'); + throw new NoSuchEntityException(__('Requested store is inactive')); } - if (isset($error, $e)) { - throw new NoSuchEntityException($error, $e); - } return $store; } @@ -160,14 +155,9 @@ class StoreResolver implements \Magento\Store\Api\StoreResolverInterface try { $store = $this->storeRepository->getActiveStoreById($id); } catch (StoreIsInactiveException $e) { - $error = __('Default store is inactive'); - } catch (\InvalidArgumentException $e) { // TODO: MAGETWO-39826 Need to replace on NoSuchEntityException - $error = __('Default store is not found'); + throw new NoSuchEntityException(__('Default store is inactive')); } - if (isset($error, $e)) { - throw new NoSuchEntityException($error, $e); - } return $store; } } diff --git a/app/code/Magento/Store/Model/Website.php b/app/code/Magento/Store/Model/Website.php index b04ab411d560605e33fed16bfb840dad9cf4c6c2..375064ca57f1519aa331df6ae59f39ffc1cd5333 100644 --- a/app/code/Magento/Store/Model/Website.php +++ b/app/code/Magento/Store/Model/Website.php @@ -171,7 +171,7 @@ class Website extends \Magento\Framework\Model\AbstractExtensibleModel implement * @param \Magento\Store\Model\WebsiteFactory $websiteFactory * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param \Magento\Directory\Model\CurrencyFactory $currencyFactory - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -188,7 +188,7 @@ class Website extends \Magento\Framework\Model\AbstractExtensibleModel implement \Magento\Store\Model\WebsiteFactory $websiteFactory, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Directory\Model\CurrencyFactory $currencyFactory, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Store/Test/Unit/App/Request/PathInfoProcessorTest.php b/app/code/Magento/Store/Test/Unit/App/Request/PathInfoProcessorTest.php index b81f0a6544f2327e0841362790f1c2260d2ca053..9ba184b950995a49cd6b6618e6d76a013717e6b9 100644 --- a/app/code/Magento/Store/Test/Unit/App/Request/PathInfoProcessorTest.php +++ b/app/code/Magento/Store/Test/Unit/App/Request/PathInfoProcessorTest.php @@ -5,6 +5,8 @@ */ namespace Magento\Store\Test\Unit\App\Request; +use Magento\Framework\Exception\NoSuchEntityException; + class PathInfoProcessorTest extends \PHPUnit_Framework_TestCase { /** @@ -112,8 +114,7 @@ class PathInfoProcessorTest extends \PHPUnit_Framework_TestCase { $store = $this->getMock('\Magento\Store\Model\Store', [], [], '', false); $this->_storeManagerMock->expects($this->once())->method('getStore')->with('storeCode') - // TODO: MAGETWO-39826 Need to replace on NoSuchEntityException - ->willThrowException(new \InvalidArgumentException()); + ->willThrowException(new NoSuchEntityException()); $store->expects($this->never())->method('isUseStoreInUrl'); $this->_requestMock->expects($this->never())->method('isDirectAccessFrontendName'); diff --git a/app/code/Magento/Store/Test/Unit/Model/Service/StoreConfigManagerTest.php b/app/code/Magento/Store/Test/Unit/Model/Service/StoreConfigManagerTest.php index 3ff9ed2ae858fcb08bb3fc7740d4c03e47766c17..b7ef7b804044572ad58c74bf29c32b1c9e636115 100644 --- a/app/code/Magento/Store/Test/Unit/Model/Service/StoreConfigManagerTest.php +++ b/app/code/Magento/Store/Test/Unit/Model/Service/StoreConfigManagerTest.php @@ -121,6 +121,7 @@ class StoreConfigManagerTest extends \PHPUnit_Framework_TestCase $timeZone = 'America/Los_Angeles'; $baseCurrencyCode = 'USD'; $defaultDisplayCurrencyCode = 'GBP'; + $weightUnit = 'lbs'; $storeMocks = []; $storeConfigs = [ @@ -161,6 +162,7 @@ class StoreConfigManagerTest extends \PHPUnit_Framework_TestCase ['currency/options/base', ScopeInterface::SCOPE_STORES, $code, $baseCurrencyCode], ['currency/options/default', ScopeInterface::SCOPE_STORES, $code, $defaultDisplayCurrencyCode], ['general/locale/timezone', ScopeInterface::SCOPE_STORES, $code, $timeZone], + [\Magento\Directory\Helper\Data::XML_PATH_WEIGHT_UNIT, ScopeInterface::SCOPE_STORES, $code, $weightUnit] ]; $this->scopeConfigMock->expects($this->any()) ->method('getValue') @@ -171,7 +173,7 @@ class StoreConfigManagerTest extends \PHPUnit_Framework_TestCase $this->assertEquals(1, count($result)); $this->assertEquals($id, $result[0]->getId()); $this->assertEquals($code, $result[0]->getCode()); - $this->assertEquals('lbs', $result[0]->getWeightUnit()); + $this->assertEquals($weightUnit, $result[0]->getWeightUnit()); $this->assertEquals($baseUrl, $result[0]->getBaseUrl()); $this->assertEquals($secureBaseUrl, $result[0]->getSecureBaseUrl()); $this->assertEquals($baseLinkUrl, $result[0]->getBaseLinkUrl()); diff --git a/app/code/Magento/Store/view/base/requirejs-config.js b/app/code/Magento/Store/view/base/requirejs-config.js deleted file mode 100644 index 261efa74b09f936dfd22cd5d708df833a16a29d8..0000000000000000000000000000000000000000 --- a/app/code/Magento/Store/view/base/requirejs-config.js +++ /dev/null @@ -1,10 +0,0 @@ -/** - * Copyright © 2015 Magento. All rights reserved. - * See COPYING.txt for license details. - */ - -var config = { - paths: { - 'store/template': 'Magento_Store/templates' - } -}; \ No newline at end of file diff --git a/app/code/Magento/Store/view/base/web/js/listing/filter/store.js b/app/code/Magento/Store/view/base/web/js/listing/filter/store.js deleted file mode 100644 index 62e97751c2c757dd76c1fb3b75fef0ea76a861c7..0000000000000000000000000000000000000000 --- a/app/code/Magento/Store/view/base/web/js/listing/filter/store.js +++ /dev/null @@ -1,92 +0,0 @@ -/** - * Copyright © 2015 Magento. All rights reserved. - * See COPYING.txt for license details. - */ -define([ - 'Magento_Ui/js/listing/filter/abstract', - 'underscore' -], function (AbstractControl, _) { - 'use strict'; - - /** - * Recursively loops through array of objects ({label: '...', value: '...'} - * or {label: '...', items: [...]}), looking for label, corresponding to value. - * @param {Array} arr - * @param {String} selected - * @return {String} found label - */ - function findIn(arr, selected) { - var found; - - arr.some(function(obj){ - found = 'value' in obj ? - obj.value == selected && obj.label : - findIn(obj.items, selected); - - return found; - }); - - return found; - } - - return AbstractControl.extend({ - - /** - * Invokes initialize method of parent class and initializes properties of instance. - * @param {Object} data - Item of "fields" array from grid configuration - * @param {Object} config - Filter configuration - */ - initialize: function (data) { - this.constructor.__super__.initialize.apply(this, arguments); - - this.caption = 'Select...'; - - this.observe('selected', ''); - - this.options = this.options || []; - - this.module = 'store'; - }, - - /** - * Checkes if current state is empty. - * @return {Boolean} - */ - isEmpty: function(){ - return !this.selected(); - }, - - /** - * Returns string value of current state for UI - * @return {String} - */ - display: function (selected) { - var label = findIn(this.options, selected); - - return label; - }, - - /** - * Returns dump of instance's current state - * @returns {Object} - object which represents current state of instance - */ - dump: function () { - var selected = this.selected(); - - this.output(this.display(selected)); - - return { - field: this.index, - value: selected - } - }, - - /** - * Resets state properties of instance and calls dump method. - * @returns {Object} - object which represents current state of instance - */ - reset: function () { - this.selected(null); - } - }); -}); \ No newline at end of file diff --git a/app/code/Magento/Store/view/base/web/templates/filter/filter_store.html b/app/code/Magento/Store/view/base/web/templates/filter/filter_store.html deleted file mode 100644 index 2e94ac95898039befd8caa88f8532043afded4ab..0000000000000000000000000000000000000000 --- a/app/code/Magento/Store/view/base/web/templates/filter/filter_store.html +++ /dev/null @@ -1,19 +0,0 @@ -<!-- -/** - * Copyright © 2015 Magento. All rights reserved. - * See COPYING.txt for license details. - */ ---> -<div class="field"> - <label class="label" data-bind="attr: {for: index}"> - <span data-bind="text: label"></span> - </label> - <div class="control"> - <select data-bind="value: selected"> - <option></option> - <!-- ko foreach: { data: options, as: 'option' } --> - <!-- ko template: 'store/filter/store/item' --><!-- /ko --> - <!-- /ko --> - </select> - </div> -</div> \ No newline at end of file diff --git a/app/code/Magento/Store/view/base/web/templates/filter/store/item.html b/app/code/Magento/Store/view/base/web/templates/filter/store/item.html deleted file mode 100644 index c14bb1f3b37c07e1aef319099dab6b77748e6c82..0000000000000000000000000000000000000000 --- a/app/code/Magento/Store/view/base/web/templates/filter/store/item.html +++ /dev/null @@ -1,15 +0,0 @@ -<!-- -/** - * Copyright © 2015 Magento. All rights reserved. - * See COPYING.txt for license details. - */ ---> -<!-- ko ifnot: 'items' in option --> - <option data-bind="attr: { label: option.label, value: option.value }, text: option.label"></option> -<!-- /ko --> -<!-- ko if: 'items' in option --> - <optgroup data-bind="attr: { label: option.label }"></optgroup> - <!-- ko foreach: { data: option.items, as: 'option' } --> - <!-- ko template: 'store/filter/store/item' --><!-- /ko --> - <!-- /ko --> -<!-- /ko --> \ No newline at end of file diff --git a/app/code/Magento/Swatches/Helper/Data.php b/app/code/Magento/Swatches/Helper/Data.php index c597284e6e40c9f7f76ed494365feecac4ae84e4..aecd9db6cfab974ed1d26ad1f23941f55686005c 100644 --- a/app/code/Magento/Swatches/Helper/Data.php +++ b/app/code/Magento/Swatches/Helper/Data.php @@ -387,9 +387,11 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper { return [ 'large' => $this->imageHelper->init($product, 'product_page_image_large') + ->constrainOnly(true)->keepAspectRatio(true)->keepFrame(false) ->setImageFile($imageFile) ->getUrl(), 'medium' => $this->imageHelper->init($product, 'product_page_image_medium') + ->constrainOnly(true)->keepAspectRatio(true)->keepFrame(false) ->setImageFile($imageFile) ->getUrl(), 'small' => $this->imageHelper->init($product, 'product_page_image_small') diff --git a/app/code/Magento/Swatches/Model/ResourceModel/Swatch.php b/app/code/Magento/Swatches/Model/ResourceModel/Swatch.php index b361dfa68602c3f6107c3f7dffadc01c717384a3..fa230bf8eae2f7b99587b44d2aa4195f190197ab 100644 --- a/app/code/Magento/Swatches/Model/ResourceModel/Swatch.php +++ b/app/code/Magento/Swatches/Model/ResourceModel/Swatch.php @@ -10,7 +10,7 @@ namespace Magento\Swatches\Model\ResourceModel; * @codeCoverageIgnore * Swatch Resource Model */ -class Swatch extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Swatch extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Initialize resource model diff --git a/app/code/Magento/Swatches/Model/ResourceModel/Swatch/Collection.php b/app/code/Magento/Swatches/Model/ResourceModel/Swatch/Collection.php index 28b800ecc9ca1d91b07c4f16c99d88828fccb7bf..4099c2347538504604aa3c784440d0fa4dffafa8 100644 --- a/app/code/Magento/Swatches/Model/ResourceModel/Swatch/Collection.php +++ b/app/code/Magento/Swatches/Model/ResourceModel/Swatch/Collection.php @@ -9,7 +9,7 @@ namespace Magento\Swatches\Model\ResourceModel\Swatch; * @codeCoverageIgnore * Swatch Collection */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Standard collection initialization diff --git a/app/code/Magento/Swatches/Test/Unit/Helper/DataTest.php b/app/code/Magento/Swatches/Test/Unit/Helper/DataTest.php index 775e1b2196182ccc72d38c8fa740243b6464916e..31e868cdf4ca9db70978464cd227f92479104f1f 100644 --- a/app/code/Magento/Swatches/Test/Unit/Helper/DataTest.php +++ b/app/code/Magento/Swatches/Test/Unit/Helper/DataTest.php @@ -334,6 +334,15 @@ class DataTest extends \PHPUnit_Framework_TestCase ->method('setImageFile') ->with($image) ->willReturnSelf(); + $this->imageHelperMock->expects($this->any()) + ->method('constrainOnly') + ->willReturnSelf(); + $this->imageHelperMock->expects($this->any()) + ->method('keepAspectRatio') + ->willReturnSelf(); + $this->imageHelperMock->expects($this->any()) + ->method('keepFrame') + ->willReturnSelf(); $this->imageHelperMock->expects($this->any()) ->method('getUrl') ->willReturn('http://full_path_to_image/magento1.png'); diff --git a/app/code/Magento/Swatches/etc/adminhtml/events.xml b/app/code/Magento/Swatches/etc/adminhtml/events.xml index d75d2fa360d80d7433c561ba793f9d077ce4fbba..1938ddd8ef7fb217e9fc8072b671b0499b149519 100644 --- a/app/code/Magento/Swatches/etc/adminhtml/events.xml +++ b/app/code/Magento/Swatches/etc/adminhtml/events.xml @@ -7,9 +7,9 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="product_attribute_form_build_main_tab"> - <observer name="add_swatch_fields_to_attribute" instance="Magento\Swatches\Observer\AddFieldsToAttributeObserver" method="execute" /> + <observer name="add_swatch_fields_to_attribute" instance="Magento\Swatches\Observer\AddFieldsToAttributeObserver" /> </event> <event name="adminhtml_product_attribute_types"> - <observer name="swatch_attribute_type" instance="Magento\Swatches\Observer\AddSwatchAttributeTypeObserver" method="execute" /> + <observer name="swatch_attribute_type" instance="Magento\Swatches\Observer\AddSwatchAttributeTypeObserver" /> </event> </config> diff --git a/app/code/Magento/Swatches/view/adminhtml/templates/catalog/product/attribute/js.phtml b/app/code/Magento/Swatches/view/adminhtml/templates/catalog/product/attribute/js.phtml index 8b2b70a2cdbfb947c6f7716c1d51d23d07deb0ee..0f911d563f714492a0700f50cdbb1746683f3fbe 100644 --- a/app/code/Magento/Swatches/view/adminhtml/templates/catalog/product/attribute/js.phtml +++ b/app/code/Magento/Swatches/view/adminhtml/templates/catalog/product/attribute/js.phtml @@ -8,7 +8,14 @@ ?> <script> -require(["jquery", 'uiRegistry', "collapsable", "prototype"], function(jQuery, rg){ +require([ + "jquery", + "uiRegistry", + "Magento_Ui/js/modal/alert", + 'Magento_Ui/js/modal/prompt', + "collapsable", + "prototype" +], function(jQuery, rg, alert, prompt){ function toggleApplyVisibility(select) { if ($(select).value == 1) { @@ -324,36 +331,48 @@ function updateRequriedOptions() function saveAttributeInNewSet(promptMessage) { - var newAttributeSetName = prompt(promptMessage, ''); - - if (newAttributeSetName == null) { - return; - } - - var rules = ['required-entry', 'validate-no-html-tags']; - for (var i = 0; i < rules.length; i++) { - if (!jQuery.validator.methods[rules[i]](newAttributeSetName)) { - alert(jQuery.validator.messages[rules[i]]); - return; + var newAttributeSetName; + + prompt({ + content: promptMessage, + actions: { + confirm: function(val) { + newAttributeSetName = val; + + if (!newAttributeSetName) { + return; + } + + var rules = ['required-entry', 'validate-no-html-tags']; + for (var i = 0; i < rules.length; i++) { + if (!jQuery.validator.methods[rules[i]](newAttributeSetName)) { + alert({ + content: jQuery.validator.messages[rules[i]] + }); + + return; + } + } + + var newAttributeSetNameInputId = 'new_attribute_set_name'; + + if ($(newAttributeSetNameInputId)) { + $(newAttributeSetNameInputId).value = newAttributeSetName; + } else { + $('edit_form').insert({ + top: new Element('input', { + type: 'hidden', + id: newAttributeSetNameInputId, + name: 'new_attribute_set_name', + value: newAttributeSetName + }) + }); + } + // Temporary solution will replaced after refactoring of attributes functionality + jQuery('#edit_form').triggerHandler('save'); + } } - } - - var newAttributeSetNameInputId = 'new_attribute_set_name'; - - if ($(newAttributeSetNameInputId)) { - $(newAttributeSetNameInputId).value = newAttributeSetName; - } else { - $('edit_form').insert({ - top: new Element('input', { - type: 'hidden', - id: newAttributeSetNameInputId, - name: 'new_attribute_set_name', - value: newAttributeSetName - }) - }); - } - // Temporary solution will replaced after refactoring of attributes functionality - jQuery('#edit_form').triggerHandler('save'); + }); } if($('frontend_input')){ diff --git a/app/code/Magento/Swatches/view/frontend/web/js/SwatchRenderer.js b/app/code/Magento/Swatches/view/frontend/web/js/SwatchRenderer.js index 920b8f46f6530fbbd5f9bd17a40742562f695408..0baa01cffda9cb3416b06663705dd7e2110ebb1a 100644 --- a/app/code/Magento/Swatches/view/frontend/web/js/SwatchRenderer.js +++ b/app/code/Magento/Swatches/view/frontend/web/js/SwatchRenderer.js @@ -181,7 +181,8 @@ define(["jquery", "jquery/ui"], function ($) { onlySwatches: false, // show only swatch controls enableControlLabel: true, // enable label for control moreButtonText: 'More', // text for more button - mediaCallback: '' // Callback url for media + mediaCallback: '', // Callback url for media + mediaGalleryInitial: [{}] // Cache for BaseProduct images. Needed when option unset }, /** @@ -204,6 +205,30 @@ define(["jquery", "jquery/ui"], function ($) { } }, + /** + * @private + */ + _create: function () { + var options = this.options, + gallery = $('[data-gallery-role=gallery-placeholder]', '.column.main'), + isProductViewExist = $('body.catalog-product-view').size() > 0, + $main = isProductViewExist ? + this.element.parents('.column.main') : + this.element.parents('.product-item-info'); + + if (isProductViewExist) { + gallery.on('gallery:loaded', function () { + var galleryObject = gallery.data('gallery'); + + options.mediaGalleryInitial = galleryObject.returnCurrentImages(); + }); + } else { + options.mediaGalleryInitial = [{ + 'img': $main.find('.product-image-photo').attr('src') + }]; + } + }, + /** * Render controls * @@ -326,13 +351,13 @@ define(["jquery", "jquery/ui"], function ($) { // Color else if (type == 1) { html += '<div class="' + optionClass + ' color" ' + attr + - '" style="background: ' + value + ' no-repeat center; background-size: initial;">' + '' + '</div>'; + '" style="background: ' + value + ' no-repeat center; background-size: initial;">' + '' + '</div>'; } // Image else if (type == 2) { html += '<div class="' + optionClass + ' image" ' + attr + - '" style="background: url(' + value + ') no-repeat center; background-size: initial;">' + '' + '</div>'; + '" style="background: url(' + value + ') no-repeat center; background-size: initial;">' + '' + '</div>'; } // Clear @@ -696,7 +721,8 @@ define(["jquery", "jquery/ui"], function ($) { * @private */ _ProductMediaCallback: function ($this, response) { - var $main = ($('body.catalog-product-view').size() > 0) + var isProductViewExist = $('body.catalog-product-view').size() > 0, + $main = isProductViewExist ? $this.parents('.column.main') : $this.parents('.product-item-info'), $widget = this, @@ -705,24 +731,52 @@ define(["jquery", "jquery/ui"], function ($) { return e.hasOwnProperty('large') && e.hasOwnProperty('medium') && e.hasOwnProperty('small'); }; - if ($widget._ObjectLength(response) > 0) { - if (support(response)) { - images.push({large: response.large, medium: response.medium, small: response.small}); - if (response.hasOwnProperty('gallery')) { - $.each(response.gallery, function () { - if (!support(this) || response.large == this.large) { - return; - } - images.push({large: this.large, medium: this.medium, small: this.small}); + if ($widget._ObjectLength(response) < 1) { + this.updateBaseImage(this.options.mediaGalleryInitial, $main, isProductViewExist); + + return; + } + + if (support(response)) { + images.push({ + full: response.large, + img: response.medium, + thumb: response.small + }); + + if (response.hasOwnProperty('gallery')) { + $.each(response.gallery, function () { + if (!support(this) || response.large === this.large) { + return; + } + images.push({ + full: this.large, + img: this.medium, + thumb: this.small }); - } + }); } + } - if ($('body.catalog-product-view').size() > 0) { - $main.find('[data-role=media-gallery]').gallery('option', 'images', images); - } else { - $main.find('.product-image-photo').attr('src', images.shift().medium); - } + this.updateBaseImage(images, $main, isProductViewExist); + }, + + /** + * Update [gallery-placeholder] or [product-image-photo] + * @param {Array} images + * @param {jQuery} context + * @param {Boolean} isProductViewExist + */ + updateBaseImage: function (images, context, isProductViewExist) { + var justAnImage = images[0]; + + if (isProductViewExist) { + context + .find('[data-gallery-role=gallery-placeholder]') + .data('gallery') + .updateData(images); + } else if (justAnImage && justAnImage.img) { + context.find('.product-image-photo').attr('src', justAnImage.img); } }, @@ -734,10 +788,7 @@ define(["jquery", "jquery/ui"], function ($) { _XhrKiller: function () { var $widget = this; - if ( - $widget.xhr != undefined - || $widget.xhr != null - ) { + if ($widget.xhr !== undefined && $widget.xhr !== null) { $widget.xhr.abort(); $widget.xhr = null; } @@ -750,12 +801,12 @@ define(["jquery", "jquery/ui"], function ($) { */ _EmulateSelected: function () { var $widget = this, - $this = $widget.element; - var request = $.parseParams(window.location.search.substring(1)); + $this = $widget.element, + request = $.parseParams(window.location.search.substring(1)); $.each(request, function (key, value) { $this.find('.' + $widget.options.classes.attributeClass - + '[attribute-code="' + key + '"] [option-id="' + value + '"]').trigger('click'); + + '[attribute-code="' + key + '"] [option-id="' + value + '"]').trigger('click'); }); }, @@ -765,11 +816,14 @@ define(["jquery", "jquery/ui"], function ($) { * @returns {number} * @private */ - _ObjectLength: function(obj) { - var size = 0, key; + _ObjectLength: function (obj) { + var size = 0, + key; + for (key in obj) { if (obj.hasOwnProperty(key)) size++; } + return size; } }); diff --git a/app/code/Magento/Tax/Observer/AggregateSalesReportTaxData.php b/app/code/Magento/Tax/Model/AggregateSalesReportTaxData.php similarity index 98% rename from app/code/Magento/Tax/Observer/AggregateSalesReportTaxData.php rename to app/code/Magento/Tax/Model/AggregateSalesReportTaxData.php index 596759864665f3c4e0112a0f2462421bf6094803..50c117064ef8366bf2ad7be8d0f304605a41f273 100644 --- a/app/code/Magento/Tax/Observer/AggregateSalesReportTaxData.php +++ b/app/code/Magento/Tax/Model/AggregateSalesReportTaxData.php @@ -4,7 +4,7 @@ * See COPYING.txt for license details. */ -namespace Magento\Tax\Observer; +namespace Magento\Tax\Model; class AggregateSalesReportTaxData { diff --git a/app/code/Magento/Tax/Model/Calculation/Rate.php b/app/code/Magento/Tax/Model/Calculation/Rate.php index 31f7dbce5e05fab28400885754dbe95f578d7d04..0eca26d8eff0c425b93cc4b23537eff44ec3f823 100644 --- a/app/code/Magento/Tax/Model/Calculation/Rate.php +++ b/app/code/Magento/Tax/Model/Calculation/Rate.php @@ -72,7 +72,7 @@ class Rate extends \Magento\Framework\Model\AbstractExtensibleModel implements T * @param \Magento\Directory\Model\RegionFactory $regionFactory * @param Rate\TitleFactory $taxTitleFactory * @param Region $directoryRegion - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -85,7 +85,7 @@ class Rate extends \Magento\Framework\Model\AbstractExtensibleModel implements T \Magento\Directory\Model\RegionFactory $regionFactory, \Magento\Tax\Model\Calculation\Rate\TitleFactory $taxTitleFactory, Region $directoryRegion, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Tax/Model/Calculation/Rule.php b/app/code/Magento/Tax/Model/Calculation/Rule.php index 25acde57bec4099a0dd4b0aad54f5a7f076f6697..665a3d8f3783f4fc8499bf32a211f717aab06d61 100644 --- a/app/code/Magento/Tax/Model/Calculation/Rule.php +++ b/app/code/Magento/Tax/Model/Calculation/Rule.php @@ -70,7 +70,7 @@ class Rule extends \Magento\Framework\Model\AbstractExtensibleModel implements T * @param \Magento\Tax\Model\ClassModel $taxClass * @param \Magento\Tax\Model\Calculation $calculation * @param Rule\Validator $validator - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -83,7 +83,7 @@ class Rule extends \Magento\Framework\Model\AbstractExtensibleModel implements T \Magento\Tax\Model\ClassModel $taxClass, \Magento\Tax\Model\Calculation $calculation, \Magento\Tax\Model\Calculation\Rule\Validator $validator, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Tax/Model/ClassModel.php b/app/code/Magento/Tax/Model/ClassModel.php index 17129676f348297a03bc5d63937b89f378444468..30f2507b77f387914de52abeab45a860de9a7f9b 100644 --- a/app/code/Magento/Tax/Model/ClassModel.php +++ b/app/code/Magento/Tax/Model/ClassModel.php @@ -48,7 +48,7 @@ class ClassModel extends \Magento\Framework\Model\AbstractExtensibleModel implem * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory * @param AttributeValueFactory $customAttributeFactory * @param TaxClass\Factory $classFactory - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -58,7 +58,7 @@ class ClassModel extends \Magento\Framework\Model\AbstractExtensibleModel implem \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory, AttributeValueFactory $customAttributeFactory, \Magento\Tax\Model\TaxClass\Factory $classFactory, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Tax/Model/Config/Notification.php b/app/code/Magento/Tax/Model/Config/Notification.php index 1c830caee477a3c230eebd370306aa3bd86c4964..1373b4659841916f193f176add390e101e4cb395 100644 --- a/app/code/Magento/Tax/Model/Config/Notification.php +++ b/app/code/Magento/Tax/Model/Config/Notification.php @@ -22,7 +22,7 @@ class Notification extends \Magento\Framework\App\Config\Value * @param \Magento\Framework\Registry $registry * @param \Magento\Framework\App\Config\ScopeConfigInterface $config * @param \Magento\Config\Model\ResourceModel\Config $resourceConfig - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -31,7 +31,7 @@ class Notification extends \Magento\Framework\App\Config\Value \Magento\Framework\Registry $registry, \Magento\Framework\App\Config\ScopeConfigInterface $config, \Magento\Config\Model\ResourceModel\Config $resourceConfig, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Tax/Model/Config/TaxClass.php b/app/code/Magento/Tax/Model/Config/TaxClass.php index 2d2503c8c3e567e25d2dc47127d399c478aa7447..95b643be212841013fcd1e1620e8c5ed6ee138b5 100644 --- a/app/code/Magento/Tax/Model/Config/TaxClass.php +++ b/app/code/Magento/Tax/Model/Config/TaxClass.php @@ -26,7 +26,7 @@ class TaxClass extends \Magento\Framework\App\Config\Value * @param \Magento\Framework\App\Config\ScopeConfigInterface $config * @param \Magento\Config\Model\ResourceModel\Config $resourceConfig * @param \Magento\Eav\Model\Entity\AttributeFactory $attributeFactory - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -36,7 +36,7 @@ class TaxClass extends \Magento\Framework\App\Config\Value \Magento\Framework\App\Config\ScopeConfigInterface $config, \Magento\Config\Model\ResourceModel\Config $resourceConfig, \Magento\Eav\Model\Entity\AttributeFactory $attributeFactory, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Tax/Model/ResourceModel/Calculation.php b/app/code/Magento/Tax/Model/ResourceModel/Calculation.php index 54a76ba286a14b0c78ad720a2b2485555ae71793..d275644f22027f282c77f46dc01b274fab1b4936 100644 --- a/app/code/Magento/Tax/Model/ResourceModel/Calculation.php +++ b/app/code/Magento/Tax/Model/ResourceModel/Calculation.php @@ -10,7 +10,7 @@ */ namespace Magento\Tax\Model\ResourceModel; -class Calculation extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Calculation extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Store ISO 3166-1 alpha-2 USA country code @@ -24,13 +24,6 @@ class Calculation extends \Magento\Framework\Model\ModelResource\Db\AbstractDb */ protected $_ratesCache = []; - /** - * Primary key auto increment flag - * - * @var bool - */ - protected $_isPkAutoIncrement = false; - /** * Tax data * @@ -44,13 +37,13 @@ class Calculation extends \Magento\Framework\Model\ModelResource\Db\AbstractDb protected $_storeManager; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Tax\Helper\Data $taxData * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Tax\Helper\Data $taxData, \Magento\Store\Model\StoreManagerInterface $storeManager, $connectionName = null diff --git a/app/code/Magento/Tax/Model/ResourceModel/Calculation/Collection.php b/app/code/Magento/Tax/Model/ResourceModel/Calculation/Collection.php index 1cab961c698abe0901e3d67be24429a8a9c7706d..ab2cdde74beb87d7161e98b2ed9530457af44ac5 100644 --- a/app/code/Magento/Tax/Model/ResourceModel/Calculation/Collection.php +++ b/app/code/Magento/Tax/Model/ResourceModel/Calculation/Collection.php @@ -10,7 +10,7 @@ namespace Magento\Tax\Model\ResourceModel\Calculation; * * @author Magento Core Team <core@magentocommerce.com> */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Resource initialization diff --git a/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rate.php b/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rate.php index fbc6436fcabc595925ce9467afaae2cbc64f43d6..862d7c7d5c1479826844d8d2a56bb4d7bd892745 100644 --- a/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rate.php +++ b/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rate.php @@ -11,7 +11,7 @@ */ namespace Magento\Tax\Model\ResourceModel\Calculation; -class Rate extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Rate extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Resource initialization diff --git a/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rate/Collection.php b/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rate/Collection.php index 7c07b96e9f6a426f0bd2205e44abe5a1dce077aa..646c1dc8b592f286133cd7369d72764a044a37af 100644 --- a/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rate/Collection.php +++ b/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rate/Collection.php @@ -9,7 +9,7 @@ */ namespace Magento\Tax\Model\ResourceModel\Calculation\Rate; -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Value of fetched from DB of rules per cycle @@ -28,7 +28,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab * @param \Magento\Framework\Event\ManagerInterface $eventManager * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param mixed $connection - * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource + * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource */ public function __construct( \Magento\Framework\Data\Collection\EntityFactory $entityFactory, @@ -37,7 +37,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab \Magento\Framework\Event\ManagerInterface $eventManager, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Framework\DB\Adapter\AdapterInterface $connection = null, - \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null + \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null ) { $this->_storeManager = $storeManager; parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource); diff --git a/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rate/Title.php b/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rate/Title.php index 2a8554ecacaaf4f99f9f386f794087fe5ed383d4..320b69aa8dfb71575fcd8a1db780cb1f15eaae2d 100644 --- a/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rate/Title.php +++ b/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rate/Title.php @@ -10,7 +10,7 @@ namespace Magento\Tax\Model\ResourceModel\Calculation\Rate; * * @author Magento Core Team <core@magentocommerce.com> */ -class Title extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Title extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Resource initialization diff --git a/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rate/Title/Collection.php b/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rate/Title/Collection.php index 590c8f4588ba18c18d3682c48a76e82b49b0b91d..77685615aca9a38f55cfd6d6ae162013abcf940b 100644 --- a/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rate/Title/Collection.php +++ b/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rate/Title/Collection.php @@ -10,7 +10,7 @@ namespace Magento\Tax\Model\ResourceModel\Calculation\Rate\Title; * * @author Magento Core Team <core@magentocommerce.com> */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Resource initialization diff --git a/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rule.php b/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rule.php index c5b9fab3c665f1f774f97426230e9cf3c0894953..33cf510d08825a6eb3383a400177ce127995ccb3 100644 --- a/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rule.php +++ b/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rule.php @@ -10,7 +10,7 @@ namespace Magento\Tax\Model\ResourceModel\Calculation; * * @author Magento Core Team <core@magentocommerce.com> */ -class Rule extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Rule extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Resource initialization diff --git a/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rule/Collection.php b/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rule/Collection.php index c37524d8b1db8822edc741a46b89a73fbf6928c3..c469c26435a11639c3e668505281c22a097d4d45 100644 --- a/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rule/Collection.php +++ b/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rule/Collection.php @@ -10,7 +10,7 @@ namespace Magento\Tax\Model\ResourceModel\Calculation\Rule; * * @author Magento Core Team <core@magentocommerce.com> */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Resource initialization diff --git a/app/code/Magento/Tax/Model/ResourceModel/Report/Tax.php b/app/code/Magento/Tax/Model/ResourceModel/Report/Tax.php index ab49aef6c27c1d3f7a3a67156adf6fef916d8278..5f8be548f3f0911d68c93c8059c58ff6323c765d 100644 --- a/app/code/Magento/Tax/Model/ResourceModel/Report/Tax.php +++ b/app/code/Magento/Tax/Model/ResourceModel/Report/Tax.php @@ -22,7 +22,7 @@ class Tax extends \Magento\Reports\Model\ResourceModel\Report\AbstractReport protected $_updatedAtFactory; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Psr\Log\LoggerInterface $logger * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate * @param \Magento\Reports\Model\FlagFactory $reportsFlagFactory @@ -33,7 +33,7 @@ class Tax extends \Magento\Reports\Model\ResourceModel\Report\AbstractReport * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Psr\Log\LoggerInterface $logger, \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate, \Magento\Reports\Model\FlagFactory $reportsFlagFactory, diff --git a/app/code/Magento/Tax/Model/ResourceModel/Sales/Order/Tax.php b/app/code/Magento/Tax/Model/ResourceModel/Sales/Order/Tax.php index 22d0b73996885ce544621aa2ec30b536b45db829..82130cbb126cf67cb56bc144a63bf7bf255ef119 100644 --- a/app/code/Magento/Tax/Model/ResourceModel/Sales/Order/Tax.php +++ b/app/code/Magento/Tax/Model/ResourceModel/Sales/Order/Tax.php @@ -10,7 +10,7 @@ namespace Magento\Tax\Model\ResourceModel\Sales\Order; * * @author Magento Core Team <core@magentocommerce.com> */ -class Tax extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Tax extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Resource initialization diff --git a/app/code/Magento/Tax/Model/ResourceModel/Sales/Order/Tax/Collection.php b/app/code/Magento/Tax/Model/ResourceModel/Sales/Order/Tax/Collection.php index 32ee5a6774dc196e309837fdec2088ab4d7ca1df..72dc76bd6e820f433c58ef1ed204e95a0b5fb501 100644 --- a/app/code/Magento/Tax/Model/ResourceModel/Sales/Order/Tax/Collection.php +++ b/app/code/Magento/Tax/Model/ResourceModel/Sales/Order/Tax/Collection.php @@ -10,7 +10,7 @@ namespace Magento\Tax\Model\ResourceModel\Sales\Order\Tax; * * @author Magento Core Team <core@magentocommerce.com> */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Resource initialization diff --git a/app/code/Magento/Tax/Model/ResourceModel/TaxClass.php b/app/code/Magento/Tax/Model/ResourceModel/TaxClass.php index 663a22fa265380f10c1cf939c0ba93fed8bfefc4..cfed10f0917328053554f54a27bfc7a709d6247a 100644 --- a/app/code/Magento/Tax/Model/ResourceModel/TaxClass.php +++ b/app/code/Magento/Tax/Model/ResourceModel/TaxClass.php @@ -10,7 +10,7 @@ namespace Magento\Tax\Model\ResourceModel; * * @author Magento Core Team <core@magentocommerce.com> */ -class TaxClass extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class TaxClass extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Resource initialization diff --git a/app/code/Magento/Tax/Model/ResourceModel/TaxClass/Collection.php b/app/code/Magento/Tax/Model/ResourceModel/TaxClass/Collection.php index b2337776283ab00e029fd5d350c75e383216c89a..82e6b03f634868feb6b9bc26519646c932661a02 100644 --- a/app/code/Magento/Tax/Model/ResourceModel/TaxClass/Collection.php +++ b/app/code/Magento/Tax/Model/ResourceModel/TaxClass/Collection.php @@ -11,7 +11,7 @@ */ namespace Magento\Tax\Model\ResourceModel\TaxClass; -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Resource initialization diff --git a/app/code/Magento/Tax/Model/TaxClass/AbstractType.php b/app/code/Magento/Tax/Model/TaxClass/AbstractType.php index 11adba604717db4eb28f46341eb6c23fa70b0a67..351c1452be338b1670f76a20581a6ef7565807d1 100644 --- a/app/code/Magento/Tax/Model/TaxClass/AbstractType.php +++ b/app/code/Magento/Tax/Model/TaxClass/AbstractType.php @@ -36,7 +36,7 @@ abstract class AbstractType extends \Magento\Framework\DataObject implements Typ /** * Get Collection of Tax Rules that are assigned to this tax class * - * @return \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection + * @return \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection */ public function getAssignedToRules() { diff --git a/app/code/Magento/Tax/Model/TaxClass/Type/TypeInterface.php b/app/code/Magento/Tax/Model/TaxClass/Type/TypeInterface.php index bed61ea821602ad7aa67d44d6968c731bf338957..61f55331d5f740602b62632dd9e9c7d5f1662b92 100644 --- a/app/code/Magento/Tax/Model/TaxClass/Type/TypeInterface.php +++ b/app/code/Magento/Tax/Model/TaxClass/Type/TypeInterface.php @@ -21,7 +21,7 @@ interface TypeInterface /** * Get Collection of Tax Rules that are assigned to this tax class * - * @return \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection + * @return \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection */ public function getAssignedToRules(); diff --git a/app/code/Magento/Tax/Observer/AfterAddressSave.php b/app/code/Magento/Tax/Observer/AfterAddressSaveObserver.php similarity index 97% rename from app/code/Magento/Tax/Observer/AfterAddressSave.php rename to app/code/Magento/Tax/Observer/AfterAddressSaveObserver.php index 330b569499c22129850979407e7ad51aceab7129..3b8e57cdfea1d77ee6d24d7fc203c9534f89f5e2 100644 --- a/app/code/Magento/Tax/Observer/AfterAddressSave.php +++ b/app/code/Magento/Tax/Observer/AfterAddressSaveObserver.php @@ -12,7 +12,7 @@ use Magento\Framework\Module\Manager; use Magento\PageCache\Model\Config; use Magento\Tax\Helper\Data; -class AfterAddressSave implements ObserverInterface +class AfterAddressSaveObserver implements ObserverInterface { /** * @var Session diff --git a/app/code/Magento/Tax/Observer/CustomerLoggedIn.php b/app/code/Magento/Tax/Observer/CustomerLoggedInObserver.php similarity index 98% rename from app/code/Magento/Tax/Observer/CustomerLoggedIn.php rename to app/code/Magento/Tax/Observer/CustomerLoggedInObserver.php index d41a8978667d4dfc8c84f10e1ba4fddd0215ffda..7bd1decb570047f6046af1dc62ea96d10e8c9b90 100644 --- a/app/code/Magento/Tax/Observer/CustomerLoggedIn.php +++ b/app/code/Magento/Tax/Observer/CustomerLoggedInObserver.php @@ -13,7 +13,7 @@ use Magento\Framework\Module\Manager; use Magento\PageCache\Model\Config; use Magento\Tax\Helper\Data; -class CustomerLoggedIn implements ObserverInterface +class CustomerLoggedInObserver implements ObserverInterface { /** * @var Session diff --git a/app/code/Magento/Tax/Observer/UpdateProductOptions.php b/app/code/Magento/Tax/Observer/UpdateProductOptionsObserver.php similarity index 97% rename from app/code/Magento/Tax/Observer/UpdateProductOptions.php rename to app/code/Magento/Tax/Observer/UpdateProductOptionsObserver.php index e366d10006b6577a3f55012e16b8a3f8690e48ab..c01d6b34d7d973613ca85bef86c9bf79920957b4 100644 --- a/app/code/Magento/Tax/Observer/UpdateProductOptions.php +++ b/app/code/Magento/Tax/Observer/UpdateProductOptionsObserver.php @@ -8,7 +8,7 @@ namespace Magento\Tax\Observer; use Magento\Framework\Event\ObserverInterface; -class UpdateProductOptions implements ObserverInterface +class UpdateProductOptionsObserver implements ObserverInterface { /** * Tax data diff --git a/app/code/Magento/Tax/Test/Unit/Model/Calculation/RateTest.php b/app/code/Magento/Tax/Test/Unit/Model/Calculation/RateTest.php index a3edcdcf9a363aa03296c30e99cd210a8c340989..e6ff4cbd6f6ca69fa11ce38000bdd6d99fdb145e 100644 --- a/app/code/Magento/Tax/Test/Unit/Model/Calculation/RateTest.php +++ b/app/code/Magento/Tax/Test/Unit/Model/Calculation/RateTest.php @@ -24,7 +24,7 @@ class RateTest extends \PHPUnit_Framework_TestCase { $this->objectHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this); $this->resourceMock = $this->getMock( - 'Magento\Framework\Model\ModelResource\AbstractResource', + 'Magento\Framework\Model\ResourceModel\AbstractResource', ['_construct', 'getConnection', 'getIdFieldName', 'beginTransaction', 'rollBack'], [], diff --git a/app/code/Magento/Tax/Test/Unit/Model/Config/TaxClassTest.php b/app/code/Magento/Tax/Test/Unit/Model/Config/TaxClassTest.php index 6accac40069c3f95cc90965ef5337896271213c6..633c043772069824f2379790ceb36646dd13206f 100644 --- a/app/code/Magento/Tax/Test/Unit/Model/Config/TaxClassTest.php +++ b/app/code/Magento/Tax/Test/Unit/Model/Config/TaxClassTest.php @@ -37,7 +37,7 @@ class TaxClassTest extends \PHPUnit_Framework_TestCase ->method('create') ->will($this->returnValue($attributeMock)); - $resourceMock = $this->getMockBuilder('\Magento\Framework\Model\ModelResource\Db\AbstractDb') + $resourceMock = $this->getMockBuilder('\Magento\Framework\Model\ResourceModel\Db\AbstractDb') ->disableOriginalConstructor() ->setMethods(['beginTransaction', '_construct', 'getIdFieldName', 'addCommitCallback', 'commit', 'save', '__wakeup', ]) diff --git a/app/code/Magento/Tax/Test/Unit/Model/TaxClass/Type/ProductTest.php b/app/code/Magento/Tax/Test/Unit/Model/TaxClass/Type/ProductTest.php index 0ddf456a5eee8f4ac207cebac24601ab76f67960..04a9a3b2a1e84ff19a71a89dc2335dc2d5d2f9ac 100644 --- a/app/code/Magento/Tax/Test/Unit/Model/TaxClass/Type/ProductTest.php +++ b/app/code/Magento/Tax/Test/Unit/Model/TaxClass/Type/ProductTest.php @@ -9,7 +9,7 @@ class ProductTest extends \PHPUnit_Framework_TestCase { public function testIsAssignedToObjects() { - $collectionClassName = 'Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection'; + $collectionClassName = 'Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection'; $collectionMock = $this->getMockBuilder($collectionClassName) ->setMethods(['addAttributeToFilter', 'getSize'])->disableOriginalConstructor()->getMock(); $collectionMock->expects($this->once())->method('addAttributeToFilter') diff --git a/app/code/Magento/Tax/Test/Unit/Observer/AfterAddressSaveTest.php b/app/code/Magento/Tax/Test/Unit/Observer/AfterAddressSaveObserverTest.php similarity index 95% rename from app/code/Magento/Tax/Test/Unit/Observer/AfterAddressSaveTest.php rename to app/code/Magento/Tax/Test/Unit/Observer/AfterAddressSaveObserverTest.php index 60f0d86c356f7e4e06ddb7dc38eda7aae9f47241..b3eced9d517bf544df01a1bbe1e77c7aabb567e2 100644 --- a/app/code/Magento/Tax/Test/Unit/Observer/AfterAddressSaveTest.php +++ b/app/code/Magento/Tax/Test/Unit/Observer/AfterAddressSaveObserverTest.php @@ -11,9 +11,8 @@ use Magento\Framework\Module\Manager; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\PageCache\Model\Config; use Magento\Tax\Helper\Data; -use Magento\Tax\Observer\AfterAddressSave; -class AfterAddressSaveTest extends \PHPUnit_Framework_TestCase +class AfterAddressSaveObserverTest extends \PHPUnit_Framework_TestCase { /** * @var Observer @@ -82,7 +81,7 @@ class AfterAddressSaveTest extends \PHPUnit_Framework_TestCase ->getMock(); $this->session = $this->objectManager->getObject( - 'Magento\Tax\Observer\AfterAddressSave', + 'Magento\Tax\Observer\AfterAddressSaveObserver', [ 'customerSession' => $this->customerSessionMock, 'taxHelper' => $this->taxHelperMock, diff --git a/app/code/Magento/Tax/Test/Unit/Observer/CustomerLoggedInTest.php b/app/code/Magento/Tax/Test/Unit/Observer/CustomerLoggedInObserverTest.php similarity index 96% rename from app/code/Magento/Tax/Test/Unit/Observer/CustomerLoggedInTest.php rename to app/code/Magento/Tax/Test/Unit/Observer/CustomerLoggedInObserverTest.php index f21850d3dea3b18486ee66d340bfa591ecfe27d3..f384cdbd343abfede2971c5540393fbbd1dc88ad 100644 --- a/app/code/Magento/Tax/Test/Unit/Observer/CustomerLoggedInTest.php +++ b/app/code/Magento/Tax/Test/Unit/Observer/CustomerLoggedInObserverTest.php @@ -5,7 +5,7 @@ */ namespace Magento\Tax\Test\Unit\Observer; -class CustomerLoggedInTest extends \PHPUnit_Framework_TestCase +class CustomerLoggedInObserverTest extends \PHPUnit_Framework_TestCase { /** * @var \Magento\Framework\Event\Observer @@ -42,7 +42,7 @@ class CustomerLoggedInTest extends \PHPUnit_Framework_TestCase protected $taxHelperMock; /** - * @var \Magento\Tax\Observer\CustomerLoggedIn + * @var \Magento\Tax\Observer\CustomerLoggedInObserver */ protected $session; @@ -81,7 +81,7 @@ class CustomerLoggedInTest extends \PHPUnit_Framework_TestCase ->getMock(); $this->session = $this->objectManager->getObject( - 'Magento\Tax\Observer\CustomerLoggedIn', + 'Magento\Tax\Observer\CustomerLoggedInObserver', [ 'groupRepository' => $this->groupRepositoryMock, 'customerSession' => $this->customerSessionMock, diff --git a/app/code/Magento/Tax/Test/Unit/Observer/UpdateProductOptionsTest.php b/app/code/Magento/Tax/Test/Unit/Observer/UpdateProductOptionsObserverTest.php similarity index 96% rename from app/code/Magento/Tax/Test/Unit/Observer/UpdateProductOptionsTest.php rename to app/code/Magento/Tax/Test/Unit/Observer/UpdateProductOptionsObserverTest.php index 387fc9fe6c16afb72eab0ef1953c1503672061c7..f93fb0ab057aa68cb955e47a34c462a2f451317e 100644 --- a/app/code/Magento/Tax/Test/Unit/Observer/UpdateProductOptionsTest.php +++ b/app/code/Magento/Tax/Test/Unit/Observer/UpdateProductOptionsObserverTest.php @@ -8,7 +8,7 @@ namespace Magento\Tax\Test\Unit\Observer; use \Magento\Framework\TestFramework\Unit\Helper\ObjectManager; -class UpdateProductOptionsTest extends \PHPUnit_Framework_TestCase +class UpdateProductOptionsObserverTest extends \PHPUnit_Framework_TestCase { /** * Tests the methods that rely on the ScopeConfigInterface object to provide their return values @@ -66,7 +66,7 @@ class UpdateProductOptionsTest extends \PHPUnit_Framework_TestCase $objectManager = new ObjectManager($this); $taxObserverObject = $objectManager->getObject( - 'Magento\Tax\Observer\UpdateProductOptions', + 'Magento\Tax\Observer\UpdateProductOptionsObserver', [ 'taxData' => $taxData, 'registry' => $registry, diff --git a/app/code/Magento/Tax/etc/crontab.xml b/app/code/Magento/Tax/etc/crontab.xml index e957b5e7ccbd53e5233371beaf35706afcd4042f..58a7dc30522fc917f2c0acb51c4f275f217b7f04 100644 --- a/app/code/Magento/Tax/etc/crontab.xml +++ b/app/code/Magento/Tax/etc/crontab.xml @@ -7,7 +7,8 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Cron:etc/crontab.xsd"> <group id="default"> - <job name="aggregate_sales_report_tax_data" instance="Magento\Tax\Observer\AggregateSalesReportTaxData" method="invoke"> + <job name="aggregate_sales_report_tax_data" instance="Magento\Tax\Model\AggregateSalesReportTaxData" + method="invoke"> <schedule>0 0 * * *</schedule> </job> </group> diff --git a/app/code/Magento/Tax/etc/events.xml b/app/code/Magento/Tax/etc/events.xml index 8db5024ff15eded86c52b7ad08b8051b775d4e04..6d1b77d65b073c66df2c0741aa1e254bdf438beb 100644 --- a/app/code/Magento/Tax/etc/events.xml +++ b/app/code/Magento/Tax/etc/events.xml @@ -7,6 +7,6 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="catalog_product_view_config"> - <observer name="tax" instance="\Magento\Tax\Observer\UpdateProductOptions" method="execute" /> + <observer name="tax" instance="\Magento\Tax\Observer\UpdateProductOptionsObserver" /> </event> </config> diff --git a/app/code/Magento/Tax/etc/frontend/events.xml b/app/code/Magento/Tax/etc/frontend/events.xml index d0e946198bb2c95d2f1f15aa8c9afc5f276348de..371084966a535458aa86370986de3f87086c3084 100644 --- a/app/code/Magento/Tax/etc/frontend/events.xml +++ b/app/code/Magento/Tax/etc/frontend/events.xml @@ -7,9 +7,9 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="customer_data_object_login"> - <observer name="customer_tax_logged_in" instance="Magento\Tax\Observer\CustomerLoggedIn" method="execute" /> + <observer name="customer_tax_logged_in" instance="Magento\Tax\Observer\CustomerLoggedInObserver" /> </event> <event name="customer_address_save_after"> - <observer name="customer_tax_after_address_save" instance="Magento\Tax\Observer\AfterAddressSave" method="execute" /> + <observer name="customer_tax_after_address_save" instance="Magento\Tax\Observer\AfterAddressSaveObserver" /> </event> </config> diff --git a/app/code/Magento/Tax/view/adminhtml/templates/rule/edit.phtml b/app/code/Magento/Tax/view/adminhtml/templates/rule/edit.phtml index c2fa7a5543d56ac9a40e955344b717c6cb5c2812..e04ddfeeefeb8028d1d6159558ef2340b8e80c1c 100644 --- a/app/code/Magento/Tax/view/adminhtml/templates/rule/edit.phtml +++ b/app/code/Magento/Tax/view/adminhtml/templates/rule/edit.phtml @@ -11,25 +11,25 @@ <script> require([ "jquery", + 'Magento_Ui/js/modal/alert', "jquery/ui", "jquery/editableMultiselect/js/jquery.multiselect", - "mage/mage" -], function($){ + "mage/mage", + 'Magento_Ui/js/modal/modal' +], function($, alert){ - $.widget("adminhtml.dialogRates", $.ui.dialog, { + $.widget("adminhtml.dialogRates", $.mage.modal, { options: { itemRate: {}, itemRateDefault: {} }, _create: function() { - $.ui.dialog.prototype._create.apply(this); + this._super(); this._getFormData(this.options.itemRateDefault); }, - open: function() { - var zipIsRange = this.uiDialog.find('#zip_is_range'); - if (this._trigger('beforeOpen', null, this) === false) { - return; - } + openModal: function() { + var zipIsRange = this.modal.find('#zip_is_range'); + this._applyItem(this.options.itemRateDefault); if (this.options.itemRate && !$.isEmptyObject(this.options.itemRate)) { this._applyItem(this.options.itemRate); @@ -37,13 +37,14 @@ require([ zipIsRange.attr('checked', zipIsRange.val() == 1); zipIsRange.trigger('change'); updater.update(); - $.ui.dialog.prototype.open.apply(this); + this._super(); }, - close: function() { - $.ui.dialog.prototype.close.apply(this); + closeModal: function() { + this._super(); }, _applyItem: function(rate) { - var dialogElement = this.uiDialog; + var dialogElement = this.modal; + $.each(rate, function(key, value) { if (!value) { value = ''; @@ -55,7 +56,7 @@ require([ this._getFormData(this.options.itemRate); }, _getFormData: function(data) { - $.each(this.uiDialog.find(':input'), function() { + $.each(this.modal.find(':input'), function() { if (this.name) { data[this.name] = this.value } @@ -91,14 +92,20 @@ require([ } else { if (result.error_message) - alert(result.error_message); + alert({ + content: result.error_message + }); else - alert('<?php /* @escapeNotVerified */ echo __('An error occurred'); ?>'); + alert({ + content: '<?php /* @escapeNotVerified */ echo __('An error occurred'); ?>' + }); } }, error: function () { $('body').trigger('processStop'); - alert('<?php /* @escapeNotVerified */ echo __('An error occurred'); ?>'); + alert({ + content: '<?php /* @escapeNotVerified */ echo __('An error occurred'); ?>' + }); }, dataType: "json" }); @@ -177,14 +184,20 @@ require([ select.find('option').eq(index).remove(); } else { if (result.error_message) - alert(result.error_message); + alert({ + content: result.error_message + }); else - alert('<?php /* @escapeNotVerified */ echo __('An error occurred'); ?>'); + alert({ + content: '<?php /* @escapeNotVerified */ echo __('An error occurred'); ?>' + }); } }, error: function () { $('body').trigger('processStop'); - alert('<?php /* @escapeNotVerified */ echo __('An error occurred'); ?>'); + alert({ + content: '<?php /* @escapeNotVerified */ echo __('An error occurred'); ?>' + }); } }; $.ajax(ajaxOptions); @@ -193,7 +206,7 @@ require([ .on('click.mselectAdd', '.mselect-button-add', function () { taxRateForm .dialogRates({itemRate: {}}) - .dialogRates('open'); + .dialogRates('openModal'); }) .on('click.mselect-checked', '.mselect-list-item input', function (event) { var el = $(this), @@ -205,42 +218,20 @@ require([ taxRateForm.dialogRates({ title: '<?php /* @escapeNotVerified */ echo __('Tax Rate'); ?>', - autoOpen: false, + type: 'slide', id: '<?php /* @escapeNotVerified */ echo $block->getJsId() ?>', - minWidth: 560, - modal: true, - dialogClass: 'tax-rate-popup', - resizable: false, - width: '75%', - position: { - my: 'left top', - at: 'center top', - of: 'body' - }, - open: function () { - var topMargin; - - $(this).closest('.ui-dialog').addClass('ui-dialog-active'); - topMargin = $(this).closest('.ui-dialog').children('.ui-dialog-titlebar').outerHeight() + 80; - $(this).closest('.ui-dialog').css({ - top: '1%', - position: 'absolute', - left: '10%' - }); - $(this).closest('.ui-dialog').css('margin-top', topMargin); - $(this).addClass('admin__scope-old'); // ToDo UI: remove with old styles removal - }, - close: function() { - $(this).closest('.ui-dialog').removeClass('ui-dialog-active'); + modalClass: 'tax-rate-popup', + closed: function () { + taxRateFormElement.data('validation').clearError(); }, buttons: [{ text: '<?php /* @escapeNotVerified */ echo __('Save'); ?>', - id: '<?php /* @escapeNotVerified */ echo $block->getJsId('apply-button') ?>', 'class': 'action-save action-primary', click: function() { - $(this).dialogRates('updateItemRate'); - var itemRate = $(this).dialogRates('option').itemRate, + this.updateItemRate(); + var itemRate = this.option('itemRate'), itemRateData = $.extend({}, itemRate); + if (itemRateData.itemElement) { delete itemRateData.itemElement; } @@ -272,29 +263,27 @@ require([ taxRateField.find('option[value=""]:last') .val(itemRate.tax_calculation_rate_id); } - taxRateForm.dialogRates("close"); + taxRateForm.dialogRates('closeModal'); } else { if (result.error_message) - alert(result.error_message); + alert({ + content: result.error_message + }); else - alert('<?php /* @escapeNotVerified */ echo __('An error occurred'); ?>'); + alert({ + content: '<?php /* @escapeNotVerified */ echo __('An error occurred'); ?>' + }); } }, error: function () { $('body').trigger('processStop'); - alert('<?php /* @escapeNotVerified */ echo __('An error occurred'); ?>'); + alert({ + content: '<?php /* @escapeNotVerified */ echo __('An error occurred'); ?>' + }); } }; $.ajax(ajaxOptions); } - }, { - text: '<?php /* @escapeNotVerified */ echo __('Cancel'); ?>', - id: '<?php /* @escapeNotVerified */ echo $block->getJsId('close-button') ?>', - 'class': 'action-close', - click: function() { - $(this).dialogRates("close"); - taxRateFormElement.data('validation').clearError(); - } }] }); $('.grid-loading-mask').hide(); diff --git a/app/code/Magento/Theme/Block/Html/Title.php b/app/code/Magento/Theme/Block/Html/Title.php index 1863fa9468a85b86ee627c1b3133d78650f23bd6..a92c2a3a278002d4899c95acbaafd16d961a423b 100644 --- a/app/code/Magento/Theme/Block/Html/Title.php +++ b/app/code/Magento/Theme/Block/Html/Title.php @@ -37,6 +37,19 @@ class Title extends \Magento\Framework\View\Element\Template return $this->pageConfig->getTitle()->getShort(); } + /** + * Provide own page content heading + * + * @return string + */ + public function getPageHeading() + { + if (!empty($this->pageTitle)) { + return $this->pageTitle; + } + return $this->pageConfig->getTitle()->getShortHeading(); + } + /** * Set own page title * diff --git a/app/code/Magento/Theme/Model/Design.php b/app/code/Magento/Theme/Model/Design.php index b9547c3a92fe0c5df763d35b7d47b34677cf087e..7a982eefe56f4483ed0673d4d8ae8587ba3b19e1 100644 --- a/app/code/Magento/Theme/Model/Design.php +++ b/app/code/Magento/Theme/Model/Design.php @@ -7,7 +7,7 @@ namespace Magento\Theme\Model; use Magento\Framework\App\DesignInterface; use Magento\Framework\Model\AbstractModel; -use Magento\Framework\Model\ModelResource\AbstractResource; +use Magento\Framework\Model\ResourceModel\AbstractResource; use Magento\Framework\DataObject\IdentityInterface; /** diff --git a/app/code/Magento/Theme/Model/Design/Backend/Exceptions.php b/app/code/Magento/Theme/Model/Design/Backend/Exceptions.php index 948f64ef6a7210db3aed9c1815bf9196602b9f64..e2fe1ac8f19d780acc688ab42497d16535f6351f 100644 --- a/app/code/Magento/Theme/Model/Design/Backend/Exceptions.php +++ b/app/code/Magento/Theme/Model/Design/Backend/Exceptions.php @@ -23,7 +23,7 @@ class Exceptions extends ArraySerialized * @param \Magento\Framework\Registry $registry * @param \Magento\Framework\App\Config\ScopeConfigInterface $config * @param \Magento\Framework\View\DesignInterface $design - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -32,7 +32,7 @@ class Exceptions extends ArraySerialized \Magento\Framework\Registry $registry, \Magento\Framework\App\Config\ScopeConfigInterface $config, \Magento\Framework\View\DesignInterface $design, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Theme/Model/Design/Backend/Theme.php b/app/code/Magento/Theme/Model/Design/Backend/Theme.php index 5e85a547c3718612292cf89413f8777fbfda284d..ae2af06192c8b673198edebc41c945d84b988adf 100644 --- a/app/code/Magento/Theme/Model/Design/Backend/Theme.php +++ b/app/code/Magento/Theme/Model/Design/Backend/Theme.php @@ -23,7 +23,7 @@ class Theme extends Value * @param \Magento\Framework\Registry $registry * @param \Magento\Framework\App\Config\ScopeConfigInterface $config * @param \Magento\Framework\View\DesignInterface $design - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -32,7 +32,7 @@ class Theme extends Value \Magento\Framework\Registry $registry, \Magento\Framework\App\Config\ScopeConfigInterface $config, \Magento\Framework\View\DesignInterface $design, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Theme/Model/ResourceModel/Design.php b/app/code/Magento/Theme/Model/ResourceModel/Design.php index 74e111ce5d39bdc12f438e24e9f46fce22a23f97..2edb0163bae1bbe4563af38cc17b8b8af850c7e1 100644 --- a/app/code/Magento/Theme/Model/ResourceModel/Design.php +++ b/app/code/Magento/Theme/Model/ResourceModel/Design.php @@ -3,7 +3,6 @@ * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ - // @codingStandardsIgnoreFile namespace Magento\Theme\Model\ResourceModel; @@ -14,7 +13,7 @@ use Magento\Framework\Stdlib\DateTime; * * @author Magento Core Team <core@magentocommerce.com> */ -class Design extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Design extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * @var DateTime @@ -22,12 +21,12 @@ class Design extends \Magento\Framework\Model\ModelResource\Db\AbstractDb protected $dateTime; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param DateTime $dateTime * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, DateTime $dateTime, $connectionName = null ) { diff --git a/app/code/Magento/Theme/Model/ResourceModel/Design/Collection.php b/app/code/Magento/Theme/Model/ResourceModel/Design/Collection.php index dea2b172830ab9f7ccaf19be070d7ec30dbf3bd6..bc79a10f113558adf4fb3b9d0319e0f74f94d4a9 100644 --- a/app/code/Magento/Theme/Model/ResourceModel/Design/Collection.php +++ b/app/code/Magento/Theme/Model/ResourceModel/Design/Collection.php @@ -8,7 +8,7 @@ namespace Magento\Theme\Model\ResourceModel\Design; /** * Core Design resource collection */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * @var \Magento\Framework\Stdlib\DateTime @@ -22,7 +22,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab * @param \Magento\Framework\Event\ManagerInterface $eventManager * @param \Magento\Framework\Stdlib\DateTime $dateTime * @param mixed $connection - * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource + * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource */ public function __construct( \Magento\Framework\Data\Collection\EntityFactory $entityFactory, @@ -31,7 +31,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab \Magento\Framework\Event\ManagerInterface $eventManager, \Magento\Framework\Stdlib\DateTime $dateTime, \Magento\Framework\DB\Adapter\AdapterInterface $connection = null, - \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null + \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null ) { $this->dateTime = $dateTime; parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource); diff --git a/app/code/Magento/Theme/Model/ResourceModel/Theme.php b/app/code/Magento/Theme/Model/ResourceModel/Theme.php index c185e5f1666fbf2e9cb834f8a832b31ec10965b3..e93820180a089974d73ea300c8177f8c6b513c40 100644 --- a/app/code/Magento/Theme/Model/ResourceModel/Theme.php +++ b/app/code/Magento/Theme/Model/ResourceModel/Theme.php @@ -8,7 +8,7 @@ namespace Magento\Theme\Model\ResourceModel; /** * Theme resource model */ -class Theme extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Theme extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Resource initialization diff --git a/app/code/Magento/Theme/Model/ResourceModel/Theme/Collection.php b/app/code/Magento/Theme/Model/ResourceModel/Theme/Collection.php index db070283bcf9993373185b3e8bbaf7fb358212be..6ca5a367cb790992bdff5994233ea79accb260c5 100644 --- a/app/code/Magento/Theme/Model/ResourceModel/Theme/Collection.php +++ b/app/code/Magento/Theme/Model/ResourceModel/Theme/Collection.php @@ -8,7 +8,7 @@ namespace Magento\Theme\Model\ResourceModel\Theme; /** * Theme collection */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection implements +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection implements \Magento\Framework\View\Design\Theme\Label\ListInterface, \Magento\Framework\View\Design\Theme\ListInterface { diff --git a/app/code/Magento/Theme/Model/ResourceModel/Theme/Customization/Update.php b/app/code/Magento/Theme/Model/ResourceModel/Theme/Customization/Update.php index 35b8f6f3b5760cad797eb9cb9390667736fc7293..a0aa877a368e2352f8efab96dc5fe477484e0a42 100644 --- a/app/code/Magento/Theme/Model/ResourceModel/Theme/Customization/Update.php +++ b/app/code/Magento/Theme/Model/ResourceModel/Theme/Customization/Update.php @@ -8,7 +8,7 @@ namespace Magento\Theme\Model\ResourceModel\Theme\Customization; /** * Theme customization link resource model */ -class Update extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Update extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Resource initialization diff --git a/app/code/Magento/Theme/Model/ResourceModel/Theme/File.php b/app/code/Magento/Theme/Model/ResourceModel/Theme/File.php index 239d8a75fd4e402f76298d9d0764a3f06594b12b..0e5ebf11d2f87a6459fb667f1885dc436652fb0c 100644 --- a/app/code/Magento/Theme/Model/ResourceModel/Theme/File.php +++ b/app/code/Magento/Theme/Model/ResourceModel/Theme/File.php @@ -8,7 +8,7 @@ namespace Magento\Theme\Model\ResourceModel\Theme; /** * Theme files resource model */ -class File extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class File extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Resource initialization diff --git a/app/code/Magento/Theme/Model/ResourceModel/Theme/File/Collection.php b/app/code/Magento/Theme/Model/ResourceModel/Theme/File/Collection.php index ebb7df34c7c52cc65dae8c5353ce0684bf2fa20b..ad78ceddba811641444891ec8850cbaf2866d2bf 100644 --- a/app/code/Magento/Theme/Model/ResourceModel/Theme/File/Collection.php +++ b/app/code/Magento/Theme/Model/ResourceModel/Theme/File/Collection.php @@ -8,7 +8,7 @@ namespace Magento\Theme\Model\ResourceModel\Theme\File; /** * Theme files collection */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection implements +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection implements \Magento\Framework\View\Design\Theme\File\CollectionInterface { /** diff --git a/app/code/Magento/Theme/Model/Theme/File.php b/app/code/Magento/Theme/Model/Theme/File.php index cd28e80b67dff6331ab611bf076a061530727f8f..e3b5d723cf1bb4700d743ca0fd512084544e128c 100644 --- a/app/code/Magento/Theme/Model/Theme/File.php +++ b/app/code/Magento/Theme/Model/Theme/File.php @@ -53,7 +53,7 @@ class File extends AbstractModel implements FileInterface * @param \Magento\Framework\Registry $registry * @param \Magento\Framework\View\Design\Theme\FlyweightFactory $themeFactory * @param \Magento\Framework\View\Design\Theme\Customization\FileServiceFactory $fileServiceFactory - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -62,7 +62,7 @@ class File extends AbstractModel implements FileInterface \Magento\Framework\Registry $registry, \Magento\Framework\View\Design\Theme\FlyweightFactory $themeFactory, \Magento\Framework\View\Design\Theme\Customization\FileServiceFactory $fileServiceFactory, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Theme/Test/Unit/Block/Html/TitleTest.php b/app/code/Magento/Theme/Test/Unit/Block/Html/TitleTest.php new file mode 100644 index 0000000000000000000000000000000000000000..074316ccab3a9dfa12cb4a6064b0d6e711e09de7 --- /dev/null +++ b/app/code/Magento/Theme/Test/Unit/Block/Html/TitleTest.php @@ -0,0 +1,113 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Theme\Test\Unit\Block\Html; + +use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper; + +class TitleTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var ObjectManagerHelper + */ + protected $objectManagerHelper; + + /** + * @var \Magento\Framework\View\Page\Config|\PHPUnit_Framework_MockObject_MockObject + */ + protected $pageConfigMock; + + /** + * @var \Magento\Framework\View\Page\Title|\PHPUnit_Framework_MockObject_MockObject + */ + protected $pageTitleMock; + + /** + * @var \Magento\Theme\Block\Html\Title + */ + protected $htmlTitle; + + /** + * @return void + */ + protected function setUp() + { + $this->objectManagerHelper = new ObjectManagerHelper($this); + $this->pageConfigMock = $this->getMock('Magento\Framework\View\Page\Config', [], [], '', false); + $this->pageTitleMock = $this->getMock('Magento\Framework\View\Page\Title', [], [], '', false); + + $context = $this->objectManagerHelper->getObject( + 'Magento\Framework\View\Element\Template\Context', + ['pageConfig' => $this->pageConfigMock] + ); + + $this->htmlTitle = $this->objectManagerHelper->getObject( + 'Magento\Theme\Block\Html\Title', + ['context' => $context] + ); + } + + /** + * @return void + */ + public function testGetPageTitleWithSetPageTitle() + { + $title = 'some title'; + + $this->htmlTitle->setPageTitle($title); + $this->pageConfigMock->expects($this->never()) + ->method('getTitle'); + + $this->assertEquals($title, $this->htmlTitle->getPageTitle()); + } + + /** + * @return void + */ + public function testGetPageTitle() + { + $title = 'some title'; + + $this->pageTitleMock->expects($this->once()) + ->method('getShort') + ->willReturn($title); + $this->pageConfigMock->expects($this->once()) + ->method('getTitle') + ->willReturn($this->pageTitleMock); + + $this->assertEquals($title, $this->htmlTitle->getPageTitle()); + } + + /** + * @return void + */ + public function testGetPageHeadingWithSetPageTitle() + { + $title = 'some title'; + + $this->htmlTitle->setPageTitle($title); + $this->pageConfigMock->expects($this->never()) + ->method('getTitle'); + + $this->assertEquals($title, $this->htmlTitle->getPageHeading()); + } + + /** + * @return void + */ + public function testGetPageHeading() + { + $title = 'some title'; + + $this->pageTitleMock->expects($this->once()) + ->method('getShortHeading') + ->willReturn($title); + $this->pageConfigMock->expects($this->once()) + ->method('getTitle') + ->willReturn($this->pageTitleMock); + + $this->assertEquals($title, $this->htmlTitle->getPageHeading()); + } +} diff --git a/app/code/Magento/Theme/Test/Unit/Model/DesignTest.php b/app/code/Magento/Theme/Test/Unit/Model/DesignTest.php index 1bd3ea40aba2924844c1bfa7fa99fe2f148c74fa..ae92f434c3919c214e83d00dc35c7f9549f087cb 100644 --- a/app/code/Magento/Theme/Test/Unit/Model/DesignTest.php +++ b/app/code/Magento/Theme/Test/Unit/Model/DesignTest.php @@ -39,7 +39,7 @@ class DesignTest extends \PHPUnit_Framework_TestCase protected $dateTime; /** - * @var \Magento\Framework\Model\ModelResource\AbstractResource|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Model\ResourceModel\AbstractResource|\PHPUnit_Framework_MockObject_MockObject */ protected $resource; diff --git a/app/code/Magento/Theme/etc/events.xml b/app/code/Magento/Theme/etc/events.xml index 1d4fb79dcf8275006a9b011bd048a7fa1169b0eb..2f6155eeade189bad071d27a50cfa808f2244c1d 100644 --- a/app/code/Magento/Theme/etc/events.xml +++ b/app/code/Magento/Theme/etc/events.xml @@ -7,13 +7,13 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="theme_delete_before"> - <observer name="clean_theme_related_content" instance="Magento\Theme\Observer\CleanThemeRelatedContentObserver" method="execute" /> + <observer name="clean_theme_related_content" instance="Magento\Theme\Observer\CleanThemeRelatedContentObserver" /> </event> <event name="theme_save_after"> - <observer name="check_theme_is_assigned" instance="Magento\Theme\Observer\CheckThemeIsAssignedObserver" method="execute" /> + <observer name="check_theme_is_assigned" instance="Magento\Theme\Observer\CheckThemeIsAssignedObserver" /> </event> <event name="theme_registration_from_filesystem"> <observer name="theme_registration_observer" instance="Magento\Theme\Observer\ThemeRegistrationObserver" - method="execute" /> + /> </event> </config> diff --git a/app/code/Magento/Theme/etc/frontend/events.xml b/app/code/Magento/Theme/etc/frontend/events.xml index 747cf783f4dbb53b9e8c3d9593a945c626b003f3..695fe4c94a525ff6147fbc8e6481a2bc31165762 100644 --- a/app/code/Magento/Theme/etc/frontend/events.xml +++ b/app/code/Magento/Theme/etc/frontend/events.xml @@ -7,6 +7,6 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="controller_action_layout_render_before"> - <observer name="theme" instance="Magento\Theme\Observer\ApplyThemeCustomizationObserver" method="execute" /> + <observer name="theme" instance="Magento\Theme\Observer\ApplyThemeCustomizationObserver" /> </event> </config> diff --git a/app/code/Magento/Theme/view/adminhtml/templates/browser/content.phtml b/app/code/Magento/Theme/view/adminhtml/templates/browser/content.phtml index 1d1a41632209d262c7e99da8cb001a9ffd718a3b..e2413267b89dd29112696096904445d17c5709d2 100644 --- a/app/code/Magento/Theme/view/adminhtml/templates/browser/content.phtml +++ b/app/code/Magento/Theme/view/adminhtml/templates/browser/content.phtml @@ -13,17 +13,6 @@ ?> <?php echo $block->getChildHtml('wysiwyg_files.js') ?> -<div class="content-header skip-header" id="content_header"> - <table> - <tr> - <td><h3 id="content_header_text"><?php /* @escapeNotVerified */ echo $block->getHeaderText() ?></h3></td> - <td class="form-buttons"> - <?php echo $block->getButtonsHtml() ?> - </td> - </tr> - </table> -</div> - -<div id="contents-uploader"><?php echo $block->getChildHtml('wysiwyg_files.uploader') ?></div> +<div id="contents-uploader" class="contents-uploader"><?php echo $block->getChildHtml('wysiwyg_files.uploader') ?></div> <div id="contents"></div> <div id="contents-newfolder" class="no-display"><?php echo $block->getChildHtml('wysiwyg_files.newfolder') ?></div> diff --git a/app/code/Magento/Theme/view/adminhtml/templates/tabs/css.phtml b/app/code/Magento/Theme/view/adminhtml/templates/tabs/css.phtml index 4fe1d1b1aec2550192f6dbdc1314e54b5620db06..192ca0fbcdba756148ef5980cc3fc22af3c25658 100644 --- a/app/code/Magento/Theme/view/adminhtml/templates/tabs/css.phtml +++ b/app/code/Magento/Theme/view/adminhtml/templates/tabs/css.phtml @@ -12,9 +12,10 @@ <script> require([ "jquery", + "Magento_Ui/js/modal/alert", "jquery/file-uploader", "mage/translate" -], function($){ +], function($, alert){ $( '#css_file_uploader' ).fileupload({ dataType: 'json', @@ -65,7 +66,9 @@ require([ */ fail: function(e, data) { $(this).val(''); - alert($.mage.__("We don't recognize this file extension.")); + alert({ + content: $.mage.__("We don't recognize this file extension.") + }); } }); diff --git a/app/code/Magento/Theme/view/adminhtml/templates/tabs/js.phtml b/app/code/Magento/Theme/view/adminhtml/templates/tabs/js.phtml index 8c7e677ceeb2001019fc2ed1d6349f78419e0377..5ba996c844600d9e4151c43b1347c22d3686f669 100644 --- a/app/code/Magento/Theme/view/adminhtml/templates/tabs/js.phtml +++ b/app/code/Magento/Theme/view/adminhtml/templates/tabs/js.phtml @@ -10,11 +10,12 @@ <script> require([ "jquery", - 'mage/template', + "mage/template", + "Magento_Ui/js/modal/alert", "jquery/file-uploader", "Magento_Theme/js/sortable", "mage/translate" -], function ($, mageTemplate) { +], function ($, mageTemplate, alert) { $('#js_files_uploader').fileupload({ dataType: 'json', @@ -109,7 +110,9 @@ require([ $(progressSelector).removeClass('upload-progress').addClass('upload-failure'); $(this).val(''); - alert($.mage.__("We don't recognize this file extension.")); + alert({ + content: $.mage.__("We don't recognize this file extension.") + }); } }); diff --git a/app/code/Magento/Theme/view/base/requirejs-config.js b/app/code/Magento/Theme/view/base/requirejs-config.js index e5504adda39b61a16fd166e91e159572528e41a5..f1f164431d417a681ac0e2424e6549beb2108f85 100644 --- a/app/code/Magento/Theme/view/base/requirejs-config.js +++ b/app/code/Magento/Theme/view/base/requirejs-config.js @@ -7,7 +7,9 @@ var config = { "waitSeconds": 0, "map": { "*": { - "mageUtils": "mage/utils/main" + "mageUtils": "mage/utils/main", + "ko": "knockoutjs/knockout", + "knockout": "knockoutjs/knockout" } }, "shim": { @@ -19,16 +21,12 @@ var config = { "mage/captcha": ["prototype"], "mage/common": ["jquery"], "mage/new-gallery": ["jquery"], - "mage/requirejs/plugin/id-normalizer": ["jquery"], "mage/webapi": ["jquery"], "jquery/ui": ["jquery"], "MutationObserver": ["es6-collections"], "tinymce": { "exports": "tinymce" }, - "ko": { - "exports": "ko" - }, "moment": { "exports": "moment" }, @@ -48,7 +46,6 @@ var config = { "jquery/jquery-storageapi": "jquery/jquery.storageapi.min", "text": "requirejs/text", "domReady": "requirejs/domReady", - "ko": "ko/ko", "tinymce": "tiny_mce/tiny_mce_src" }, "deps": [ diff --git a/app/code/Magento/Theme/view/frontend/templates/html/title.phtml b/app/code/Magento/Theme/view/frontend/templates/html/title.phtml index 1b9fb45d47c1dac2f4d6de80af76b6bcf66fdd47..f6941ca9ef234cce21d03f68ded26a04682c8722 100644 --- a/app/code/Magento/Theme/view/frontend/templates/html/title.phtml +++ b/app/code/Magento/Theme/view/frontend/templates/html/title.phtml @@ -11,9 +11,9 @@ */ $cssClass = $block->getCssClass() ? ' ' . $block->getCssClass() : ''; $title = ''; -if (trim($block->getPageTitle())) { +if (trim($block->getPageHeading())) { $title = '<span class="base" data-ui-id="page-title-wrapper" ' . $block->getAddBaseAttribute() . '>' - . $block->escapeHtml($block->getPageTitle()) . '</span>'; + . $block->escapeHtml($block->getPageHeading()) . '</span>'; } ?> <?php if ($title): ?> diff --git a/app/code/Magento/Translation/Model/ResourceModel/StringUtils.php b/app/code/Magento/Translation/Model/ResourceModel/StringUtils.php index 351334ad7724519a7560d8e843014aae05e0057a..c743e7c17a5a7a3d50e96dd2046b6deacc0bf1a7 100644 --- a/app/code/Magento/Translation/Model/ResourceModel/StringUtils.php +++ b/app/code/Magento/Translation/Model/ResourceModel/StringUtils.php @@ -5,7 +5,7 @@ */ namespace Magento\Translation\Model\ResourceModel; -class StringUtils extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class StringUtils extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * @var \Magento\Framework\Locale\ResolverInterface @@ -23,14 +23,14 @@ class StringUtils extends \Magento\Framework\Model\ModelResource\Db\AbstractDb protected $scope; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Framework\Locale\ResolverInterface $localeResolver * @param \Magento\Framework\App\ScopeResolverInterface $scopeResolver * @param string $connectionName * @param string|null $scope */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Framework\Locale\ResolverInterface $localeResolver, \Magento\Framework\App\ScopeResolverInterface $scopeResolver, $connectionName = null, diff --git a/app/code/Magento/Translation/Model/ResourceModel/Translate.php b/app/code/Magento/Translation/Model/ResourceModel/Translate.php index d45d45c6e8f699d6d7850c57ba84f816faca5eab..6f545b96bd04315961ca4ff4dddc280f6024b427 100644 --- a/app/code/Magento/Translation/Model/ResourceModel/Translate.php +++ b/app/code/Magento/Translation/Model/ResourceModel/Translate.php @@ -5,7 +5,7 @@ */ namespace Magento\Translation\Model\ResourceModel; -class Translate extends \Magento\Framework\Model\ModelResource\Db\AbstractDb implements +class Translate extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb implements \Magento\Framework\Translate\ResourceInterface { /** @@ -19,13 +19,13 @@ class Translate extends \Magento\Framework\Model\ModelResource\Db\AbstractDb imp protected $scope; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Framework\App\ScopeResolverInterface $scopeResolver * @param string $connectionName * @param null|string $scope */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Framework\App\ScopeResolverInterface $scopeResolver, $connectionName = null, $scope = null diff --git a/app/code/Magento/Ui/Component/AbstractComponent.php b/app/code/Magento/Ui/Component/AbstractComponent.php index 27ffd158016cb207e0943056847539813cacb7a8..f6b0d543c0469531d2976f74d6831e9a34739fe6 100644 --- a/app/code/Magento/Ui/Component/AbstractComponent.php +++ b/app/code/Magento/Ui/Component/AbstractComponent.php @@ -9,6 +9,7 @@ use Magento\Framework\DataObject; use Magento\Framework\View\Element\UiComponentInterface; use Magento\Framework\View\Element\UiComponent\ContextInterface; use Magento\Framework\View\Element\UiComponent\DataSourceInterface; +use Magento\Framework\View\Element\UiComponent\ObserverInterface; /** * Abstract class AbstractComponent @@ -52,6 +53,8 @@ abstract class AbstractComponent extends DataObject implements UiComponentInterf ) { $this->context = $context; $this->components = $components; + $this->initObservers($data); + $this->context->getProcessor()->register($this); $this->_data = array_replace_recursive($this->_data, $data); } @@ -92,6 +95,7 @@ abstract class AbstractComponent extends DataObject implements UiComponentInterf if ($this->hasData('buttons')) { $this->getContext()->addButtons($this->getData('buttons'), $this); } + $this->getContext()->getProcessor()->notify($this->getComponentName()); } /** @@ -239,4 +243,25 @@ abstract class AbstractComponent extends DataObject implements UiComponentInterf { return []; } + + /** + * Initiate observers + * + * @param array $data + * @return void + */ + protected function initObservers(array & $data = []) + { + if (isset($data['observers']) && is_array($data['observers'])) { + foreach ($data['observers'] as $observerType => $observer) { + if (!is_object($observer)) { + $observer = $this; + } + if ($observer instanceof ObserverInterface) { + $this->getContext()->getProcessor()->attach($observerType, $observer); + } + unset($data['observers']); + } + } + } } diff --git a/app/code/Magento/Ui/Component/Filters.php b/app/code/Magento/Ui/Component/Filters.php index c250487fc91367abf1d81dbb39ca2b08a572160a..dadcdc2f09535bb7b8275eedea8f52f8dfc1b55f 100644 --- a/app/code/Magento/Ui/Component/Filters.php +++ b/app/code/Magento/Ui/Component/Filters.php @@ -5,13 +5,57 @@ */ namespace Magento\Ui\Component; +use Magento\Framework\View\Element\UiComponent\ContextInterface; +use Magento\Framework\View\Element\UiComponent\ObserverInterface; +use Magento\Framework\View\Element\UiComponentFactory; +use Magento\Framework\View\Element\UiComponentInterface; +use Magento\Ui\Component\Listing\Columns\ColumnInterface; + /** * Class Filters */ -class Filters extends AbstractComponent +class Filters extends AbstractComponent implements ObserverInterface { const NAME = 'filters'; + /** + * Filters created from columns + * + * @var UiComponentInterface[] + */ + protected $columnFilters = []; + + /** + * Maps filter declaration to type + * + * @var array + */ + protected $filterMap = [ + 'text' => 'filterInput', + 'textRange' => 'filterRange', + 'select' => 'filterSelect', + 'dateRange' => 'filterDate', + ]; + + /** + * @var UiComponentFactory + */ + protected $uiComponentFactory; + + /** + * @inheritDoc + */ + public function __construct( + ContextInterface $context, + UiComponentFactory $uiComponentFactory, + array $components = [], + array $data = [] + ) { + parent::__construct($context, $components, $data); + $this->uiComponentFactory = $uiComponentFactory; + } + + /** * Get component name * @@ -21,4 +65,52 @@ class Filters extends AbstractComponent { return static::NAME; } + + /** + * @inheritDoc + */ + public function update(UiComponentInterface $component) + { + if ($component instanceof ColumnInterface) { + $filterType = $component->getData('config/filter'); + if (!$filterType) { + return; + } + + if (isset($this->filterMap[$filterType])) { + $filterComponent = $this->uiComponentFactory->create( + $component->getName(), + $this->filterMap[$filterType], + ['context' => $this->getContext()] + ); + $filterComponent->setData('config', $component->getConfiguration()); + $filterComponent->prepare(); + $this->addComponent($component->getName(), $filterComponent); + } + } + } + + /** + * @inheritDoc + */ + public function addComponent($name, UiComponentInterface $component) + { + $this->columnFilters[$name] = $component; + parent::addComponent($name, $component); + } + + /** + * @inheritDoc + */ + public function getChildComponents() + { + $result = parent::getChildComponents(); + foreach (array_keys($this->columnFilters) as $componentName) { + if ($this->getComponent($componentName)) { + unset($result[$componentName]); + } + } + + return $result; + } } diff --git a/app/code/Magento/Ui/Component/Filters/Type/Date.php b/app/code/Magento/Ui/Component/Filters/Type/Date.php index f1689efa87af25bc441fc8a0669ebe0b903427df..98e782a4da1c201b8820f6596e189242b0752b1c 100644 --- a/app/code/Magento/Ui/Component/Filters/Type/Date.php +++ b/app/code/Magento/Ui/Component/Filters/Type/Date.php @@ -66,16 +66,40 @@ class Date extends AbstractFilter if (isset($this->filterData[$this->getName()])) { $value = $this->filterData[$this->getName()]; - if (!empty($value)) { - $value = $this->wrappedComponent->convertDate($value); + if (empty($value)) { + return; + } - $filter = $this->filterBuilder->setConditionType('eq') - ->setField($this->getName()) - ->setValue($value->format('Y-m-d H:i:s')) - ->create(); + if (is_array($value)) { + if (isset($value['from'])) { + $this->applyFilterByType('gteq', $this->wrappedComponent->convertDate($value['from'])); + } - $this->getContext()->getDataProvider()->addFilter($filter); + if (isset($value['to'])) { + $this->applyFilterByType('lteq', $this->wrappedComponent->convertDate($value['to'])); + } + } else { + $this->applyFilterByType('eq', $this->wrappedComponent->convertDate($value)); } } } + + /** + * Apply filter by its type + * + * @param string $type + * @param string $value + * @return void + */ + protected function applyFilterByType($type, $value) + { + if (!empty($value)) { + $filter = $this->filterBuilder->setConditionType($type) + ->setField($this->getName()) + ->setValue($value->format('Y-m-d H:i:s')) + ->create(); + + $this->getContext()->getDataProvider()->addFilter($filter); + } + } } diff --git a/app/code/Magento/Ui/Component/Listing/Columns.php b/app/code/Magento/Ui/Component/Listing/Columns.php index b0f3142b920a61fccbd123c708ad40d5ef4ef08f..29eaf63f6bafdbfb40de35a712e4a867ef8f3046 100644 --- a/app/code/Magento/Ui/Component/Listing/Columns.php +++ b/app/code/Magento/Ui/Component/Listing/Columns.php @@ -44,25 +44,7 @@ class Columns extends AbstractComponent } } } - $this->buildUrlsForInlineEditing(); - parent::prepare(); - } - /** - * Build urls for inline editing - * - * @return void - */ - protected function buildUrlsForInlineEditing() - { - $config = $this->getConfiguration(); - if (isset($config['editorConfig']) && isset($config['editorConfig']['clientConfig'])) { - foreach ($config['editorConfig']['clientConfig'] as $key => &$value) { - if (in_array($key, ['saveUrl', 'validateUrl'])) { - $value = $this->getContext()->getUrl($value); - } - } - } - $this->setData('config', $config); + parent::prepare(); } } diff --git a/app/code/Magento/Ui/Component/MassAction.php b/app/code/Magento/Ui/Component/MassAction.php index 62498131c1bdb011a79c8b1f23f923ad7aca2b2f..4acb21e7cf97262160043084a7ed51d44983be76 100644 --- a/app/code/Magento/Ui/Component/MassAction.php +++ b/app/code/Magento/Ui/Component/MassAction.php @@ -29,6 +29,7 @@ class MassAction extends AbstractComponent } $this->setData('config', $config); + $this->components = []; parent::prepare(); } diff --git a/app/code/Magento/Ui/DataProvider/AbstractDataProvider.php b/app/code/Magento/Ui/DataProvider/AbstractDataProvider.php index a2984c4d0383faf0d4b7a38683f1f8abf7b82ccf..f37eddfa303bb754dee1baff52dc3cff8b7b4c38 100644 --- a/app/code/Magento/Ui/DataProvider/AbstractDataProvider.php +++ b/app/code/Magento/Ui/DataProvider/AbstractDataProvider.php @@ -6,7 +6,7 @@ namespace Magento\Ui\DataProvider; use Magento\Framework\View\Element\UiComponent\DataProvider\DataProviderInterface; -use Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection; +use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection; abstract class AbstractDataProvider implements DataProviderInterface { diff --git a/app/code/Magento/Ui/Model/ResourceModel/Bookmark.php b/app/code/Magento/Ui/Model/ResourceModel/Bookmark.php index aa5a8684b807968979fdd4fe8f264cf44d0b977c..7cc214fdf111422ab2750c30f6bb9086724cfade 100644 --- a/app/code/Magento/Ui/Model/ResourceModel/Bookmark.php +++ b/app/code/Magento/Ui/Model/ResourceModel/Bookmark.php @@ -5,7 +5,7 @@ */ namespace Magento\Ui\Model\ResourceModel; -use Magento\Framework\Model\ModelResource\Db\AbstractDb; +use Magento\Framework\Model\ResourceModel\Db\AbstractDb; /** * Bookmark resource @@ -18,12 +18,12 @@ class Bookmark extends AbstractDb protected $dateTime; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Framework\Stdlib\DateTime $dateTime * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Framework\Stdlib\DateTime $dateTime, $connectionName = null ) { diff --git a/app/code/Magento/Ui/Model/ResourceModel/Bookmark/Collection.php b/app/code/Magento/Ui/Model/ResourceModel/Bookmark/Collection.php index 995281dd587ed944b4b538d190fbfe03aa2c343b..354ab273b59a330cfdad25e03161dc102eac7e41 100644 --- a/app/code/Magento/Ui/Model/ResourceModel/Bookmark/Collection.php +++ b/app/code/Magento/Ui/Model/ResourceModel/Bookmark/Collection.php @@ -5,7 +5,7 @@ */ namespace Magento\Ui\Model\ResourceModel\Bookmark; -use Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection; +use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection; /** * Bookmark Collection diff --git a/app/code/Magento/Ui/Test/Unit/Component/Control/ActionTest.php b/app/code/Magento/Ui/Test/Unit/Component/Control/ActionTest.php index be25a5957f10d22e90fc5f2b91be11910b60b342..6d02b1395bad9608ddcbb2b8032e9366d4a9af3b 100644 --- a/app/code/Magento/Ui/Test/Unit/Component/Control/ActionTest.php +++ b/app/code/Magento/Ui/Test/Unit/Component/Control/ActionTest.php @@ -28,9 +28,14 @@ class ActionTest extends \PHPUnit_Framework_TestCase */ public function setUp() { + $context = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\ContextInterface') + ->getMockForAbstractClass(); + $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor') + ->disableOriginalConstructor() + ->getMock(); + $context->expects($this->any())->method('getProcessor')->willReturn($processor); $this->objectManager = new ObjectManager($this); - - $this->action = $this->objectManager->getObject('Magento\Ui\Component\Control\Action'); + $this->action = $this->objectManager->getObject('Magento\Ui\Component\Control\Action', ['context' => $context]); } /** diff --git a/app/code/Magento/Ui/Test/Unit/Component/Control/LinkTest.php b/app/code/Magento/Ui/Test/Unit/Component/Control/LinkTest.php index 1615690f8674f3668f502e6b45328c535286fe74..00cd56b56f84e66ea8055b2d51c64763d3dbfdb0 100644 --- a/app/code/Magento/Ui/Test/Unit/Component/Control/LinkTest.php +++ b/app/code/Magento/Ui/Test/Unit/Component/Control/LinkTest.php @@ -28,9 +28,15 @@ class LinkTest extends \PHPUnit_Framework_TestCase */ public function setUp() { - $this->objectManager = new ObjectManager($this); + $context = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\ContextInterface') + ->getMockForAbstractClass(); + $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor') + ->disableOriginalConstructor() + ->getMock(); + $context->expects($this->any())->method('getProcessor')->willReturn($processor); - $this->link = $this->objectManager->getObject('Magento\Ui\Component\Control\Link'); + $this->objectManager = new ObjectManager($this); + $this->link = $this->objectManager->getObject('Magento\Ui\Component\Control\Link', ['context' => $context]); } /** diff --git a/app/code/Magento/Ui/Test/Unit/Component/ExportButtonTest.php b/app/code/Magento/Ui/Test/Unit/Component/ExportButtonTest.php index 0e65e804ce8583c7ab67147c31c46a575156edd7..dc6a1004b69fb79cfc77137f6b2cd63ca72d089b 100644 --- a/app/code/Magento/Ui/Test/Unit/Component/ExportButtonTest.php +++ b/app/code/Magento/Ui/Test/Unit/Component/ExportButtonTest.php @@ -29,6 +29,12 @@ class ExportButtonTest extends \PHPUnit_Framework_TestCase protected function setUp() { + $context = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\ContextInterface') + ->getMockForAbstractClass(); + $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor') + ->disableOriginalConstructor() + ->getMock(); + $context->expects($this->any())->method('getProcessor')->willReturn($processor); $this->objectManager = new ObjectManager($this); $this->urlBuilderMock = $this->getMockBuilder('Magento\Framework\UrlInterface') @@ -37,7 +43,8 @@ class ExportButtonTest extends \PHPUnit_Framework_TestCase $this->model = $this->objectManager->getObject( 'Magento\Ui\Component\ExportButton', [ - 'urlBuilder' => $this->urlBuilderMock + 'urlBuilder' => $this->urlBuilderMock, + 'context' => $context, ] ); } diff --git a/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/DateRangeTest.php b/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/DateRangeTest.php index 6a2a0b545678dc66181b408795e15be8bebbba4d..29262bc9e3f8679cbca8e3cfabfa71cd1dcf8da1 100644 --- a/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/DateRangeTest.php +++ b/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/DateRangeTest.php @@ -48,6 +48,10 @@ class DateRangeTest extends \PHPUnit_Framework_TestCase '', false ); + $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor') + ->disableOriginalConstructor() + ->getMock(); + $this->contextMock->expects($this->any())->method('getProcessor')->willReturn($processor); $this->uiComponentFactory = $this->getMock( 'Magento\Framework\View\Element\UiComponentFactory', ['create'], diff --git a/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/DateTest.php b/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/DateTest.php index 79af8056579f644d965f348b20302f9c8dd122b6..e921d1d52d19b885e960189277e835f3b0f584a8 100644 --- a/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/DateTest.php +++ b/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/DateTest.php @@ -48,6 +48,10 @@ class DateTest extends \PHPUnit_Framework_TestCase '', false ); + $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor') + ->disableOriginalConstructor() + ->getMock(); + $this->contextMock->expects($this->any())->method('getProcessor')->willReturn($processor); $this->uiComponentFactory = $this->getMock( 'Magento\Framework\View\Element\UiComponentFactory', ['create'], diff --git a/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/InputTest.php b/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/InputTest.php index a3736ad6bd5028bbfc4e2201253a6aaa4043a59c..e4b291134e6f9df9902cc55bf29876cf8efa3d02 100644 --- a/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/InputTest.php +++ b/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/InputTest.php @@ -48,6 +48,10 @@ class InputTest extends \PHPUnit_Framework_TestCase '', false ); + $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor') + ->disableOriginalConstructor() + ->getMock(); + $this->contextMock->expects($this->any())->method('getProcessor')->willReturn($processor); $this->uiComponentFactory = $this->getMock( 'Magento\Framework\View\Element\UiComponentFactory', ['create'], diff --git a/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/RangeTest.php b/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/RangeTest.php index d28cb78ee21c9e8dd2535003786193975c1e9f45..8907f0c02aacbd47767e9760df915611a4654507 100644 --- a/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/RangeTest.php +++ b/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/RangeTest.php @@ -47,7 +47,10 @@ class RangeTest extends \PHPUnit_Framework_TestCase '', false ); - + $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor') + ->disableOriginalConstructor() + ->getMock(); + $this->contextMock->expects($this->any())->method('getProcessor')->willReturn($processor); $this->uiComponentFactory = $this->getMock( 'Magento\Framework\View\Element\UiComponentFactory', [], diff --git a/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/SelectTest.php b/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/SelectTest.php index 45b200fc58494f0964058447e5fe04cb97a5de94..469e8ef5696537a84d0216a9f18d0b2798de62eb 100644 --- a/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/SelectTest.php +++ b/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/SelectTest.php @@ -48,6 +48,10 @@ class SelectTest extends \PHPUnit_Framework_TestCase '', false ); + $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor') + ->disableOriginalConstructor() + ->getMock(); + $this->contextMock->expects($this->any())->method('getProcessor')->willReturn($processor); $this->uiComponentFactory = $this->getMock( 'Magento\Framework\View\Element\UiComponentFactory', ['create'], diff --git a/app/code/Magento/Ui/Test/Unit/Component/Form/Field/MultilineTest.php b/app/code/Magento/Ui/Test/Unit/Component/Form/Field/MultilineTest.php index c1e717c1525fed4c226a20a697b0e9ce5f488172..c724bc049fedb5959e8266b584a8b8aef9295bbb 100644 --- a/app/code/Magento/Ui/Test/Unit/Component/Form/Field/MultilineTest.php +++ b/app/code/Magento/Ui/Test/Unit/Component/Form/Field/MultilineTest.php @@ -47,6 +47,10 @@ class MultilineTest extends \PHPUnit_Framework_TestCase ->getMock(); $this->contextMock = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\ContextInterface') ->getMockForAbstractClass(); + $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor') + ->disableOriginalConstructor() + ->getMock(); + $this->contextMock->expects($this->any())->method('getProcessor')->willReturn($processor); $this->multiline = new Multiline( $this->contextMock, diff --git a/app/code/Magento/Ui/Test/Unit/Component/Form/FieldTest.php b/app/code/Magento/Ui/Test/Unit/Component/Form/FieldTest.php index 86a47115d31129abfedb6fe3ceafafc394879912..a5462493e45d7214aedad235ccd63568f43208c7 100644 --- a/app/code/Magento/Ui/Test/Unit/Component/Form/FieldTest.php +++ b/app/code/Magento/Ui/Test/Unit/Component/Form/FieldTest.php @@ -56,6 +56,10 @@ class FieldTest extends \PHPUnit_Framework_TestCase ->getMock(); $this->contextMock = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\ContextInterface') ->getMockForAbstractClass(); + $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor') + ->disableOriginalConstructor() + ->getMock(); + $this->contextMock->expects($this->any())->method('getProcessor')->willReturn($processor); $this->field = new Field( $this->contextMock, @@ -138,7 +142,7 @@ class FieldTest extends \PHPUnit_Framework_TestCase $wrappedComponentMock->expects($this->once()) ->method('getChildComponents') ->willReturn($this->getComponentsMock()); - $wrappedComponentMock->expects($this->exactly(2)) + $wrappedComponentMock->expects($this->any()) ->method('getComponentName') ->willReturn(self::COMPONENT_NAME); $wrappedComponentMock->expects($this->once()) diff --git a/app/code/Magento/Ui/Test/Unit/Component/Listing/Columns/ColumnTest.php b/app/code/Magento/Ui/Test/Unit/Component/Listing/Columns/ColumnTest.php index 98005246955763c90120fd66e06ff8f9eabb0a1a..c42ba043d2db78a7763dc845c5567121e1ba70fe 100644 --- a/app/code/Magento/Ui/Test/Unit/Component/Listing/Columns/ColumnTest.php +++ b/app/code/Magento/Ui/Test/Unit/Component/Listing/Columns/ColumnTest.php @@ -43,6 +43,10 @@ class ColumnTest extends \PHPUnit_Framework_TestCase true, [] ); + $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor') + ->disableOriginalConstructor() + ->getMock(); + $this->contextMock->expects($this->any())->method('getProcessor')->willReturn($processor); } /** @@ -78,7 +82,10 @@ class ColumnTest extends \PHPUnit_Framework_TestCase public function testPrepareItems() { $testItems = ['item1','item2', 'item3']; - $column = $this->objectManager->getObject('Magento\Ui\Component\Listing\Columns\Column'); + $column = $this->objectManager->getObject( + 'Magento\Ui\Component\Listing\Columns\Column', + ['context' => $this->contextMock] + ); $this->assertEquals($testItems, $column->prepareItems($testItems)); } diff --git a/app/code/Magento/Ui/Test/Unit/Component/Listing/ColumnsTest.php b/app/code/Magento/Ui/Test/Unit/Component/Listing/ColumnsTest.php index fca1b2a4eded577e2f550170522318559b310a07..e381cc7a096643719291d4cc89647b7e963ecbb6 100644 --- a/app/code/Magento/Ui/Test/Unit/Component/Listing/ColumnsTest.php +++ b/app/code/Magento/Ui/Test/Unit/Component/Listing/ColumnsTest.php @@ -42,6 +42,10 @@ class ColumnsTest extends \PHPUnit_Framework_TestCase true, [] ); + $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor') + ->disableOriginalConstructor() + ->getMock(); + $this->contextMock->expects($this->any())->method('getProcessor')->willReturn($processor); } /** @@ -105,10 +109,6 @@ class ColumnsTest extends \PHPUnit_Framework_TestCase $this->contextMock->expects($this->once()) ->method('addComponentDefinition') ->with('columns', ['extends' => 'test_config_extends']); - $this->contextMock->expects($this->once()) - ->method('getUrl') - ->with($saveUrl) - ->willReturn('http://localhost.com/admin/' . $saveUrl); $dataProviderMock->expects($this->once()) ->method('getFieldMetaInfo') @@ -152,7 +152,7 @@ class ColumnsTest extends \PHPUnit_Framework_TestCase 'test_config_data' => 'test_config_value', 'editorConfig' => [ 'clientConfig' => [ - 'saveUrl' => 'http://localhost.com/admin/' . $saveUrl, + 'saveUrl' => $saveUrl, ] ] ], diff --git a/app/code/Magento/Ui/Test/Unit/Component/ListingTest.php b/app/code/Magento/Ui/Test/Unit/Component/ListingTest.php index 9ee36c9ad4acbdda69373ad5fc92482f626af166..530e02138f1849db442f29650cd747d943cf2988 100644 --- a/app/code/Magento/Ui/Test/Unit/Component/ListingTest.php +++ b/app/code/Magento/Ui/Test/Unit/Component/ListingTest.php @@ -38,6 +38,10 @@ class ListingTest extends \PHPUnit_Framework_TestCase '', false ); + $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor') + ->disableOriginalConstructor() + ->getMock(); + $this->contextMock->expects($this->any())->method('getProcessor')->willReturn($processor); } /** diff --git a/app/code/Magento/Ui/Test/Unit/Component/MassAction/Columns/ColumnTest.php b/app/code/Magento/Ui/Test/Unit/Component/MassAction/Columns/ColumnTest.php index 43b9271d4e013ab291e2e0b0346298456ef6be12..2d35559c0c1ef08270ccf82134d305830d1fcfcc 100644 --- a/app/code/Magento/Ui/Test/Unit/Component/MassAction/Columns/ColumnTest.php +++ b/app/code/Magento/Ui/Test/Unit/Component/MassAction/Columns/ColumnTest.php @@ -45,6 +45,10 @@ class ColumnTest extends \PHPUnit_Framework_TestCase true, [] ); + $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor') + ->disableOriginalConstructor() + ->getMock(); + $this->contextMock->expects($this->any())->method('getProcessor')->willReturn($processor); $this->column = $this->objectManager->getObject( 'Magento\Ui\Component\MassAction\Columns\Column', diff --git a/app/code/Magento/Ui/Test/Unit/Component/MassActionTest.php b/app/code/Magento/Ui/Test/Unit/Component/MassActionTest.php index a2d2401fed792d07c4c63f4a0ff62d58435e66ad..5f4174a99b580bbe0c88b8796d918ee02bc8e7e8 100644 --- a/app/code/Magento/Ui/Test/Unit/Component/MassActionTest.php +++ b/app/code/Magento/Ui/Test/Unit/Component/MassActionTest.php @@ -33,6 +33,10 @@ class MassActionTest extends \PHPUnit_Framework_TestCase $this->contextMock = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\ContextInterface') ->getMockForAbstractClass(); + $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor') + ->disableOriginalConstructor() + ->getMock(); + $this->contextMock->expects($this->any())->method('getProcessor')->willReturn($processor); } /** diff --git a/app/code/Magento/Ui/Test/Unit/Component/PagingTest.php b/app/code/Magento/Ui/Test/Unit/Component/PagingTest.php index fd4c63c3b28870ad1a60068d66ee86eb52c6291a..3992644a9b6fdf0347247873224614993a206a27 100644 --- a/app/code/Magento/Ui/Test/Unit/Component/PagingTest.php +++ b/app/code/Magento/Ui/Test/Unit/Component/PagingTest.php @@ -41,6 +41,10 @@ class PagingTest extends \PHPUnit_Framework_TestCase true, [] ); + $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor') + ->disableOriginalConstructor() + ->getMock(); + $this->contextMock->expects($this->any())->method('getProcessor')->willReturn($processor); } /** diff --git a/app/code/Magento/Ui/view/base/requirejs-config.js b/app/code/Magento/Ui/view/base/requirejs-config.js index b96c395b7c5582be713dd54b917241f72653db75..604ed1e59043efd150359f4a8381cb3a72488a63 100644 --- a/app/code/Magento/Ui/view/base/requirejs-config.js +++ b/app/code/Magento/Ui/view/base/requirejs-config.js @@ -9,10 +9,13 @@ var config = { }, map: { '*': { - uiComponent: 'Magento_Ui/js/lib/component/main', - uiRegistry: 'Magento_Ui/js/lib/registry/registry', - uiLayout: 'Magento_Ui/js/core/renderer/layout', - uiClass: 'Magento_Ui/js/lib/class' + uiElement: 'Magento_Ui/js/lib/core/element/element', + uiCollection: 'Magento_Ui/js/lib/core/collection', + uiComponent: 'Magento_Ui/js/lib/core/collection', + uiClass: 'Magento_Ui/js/lib/core/class', + uiEvents: 'Magento_Ui/js/lib/core/events', + uiRegistry: 'Magento_Ui/js/lib/registry/registry', + uiLayout: 'Magento_Ui/js/core/renderer/layout' } } }; diff --git a/app/code/Magento/Ui/view/base/ui_component/etc/definition.xml b/app/code/Magento/Ui/view/base/ui_component/etc/definition.xml index edb853da11302f136131afa172f139bcc815a43a..b8485998fec512fafd41dc1aa3dcf606a16b6e7e 100755 --- a/app/code/Magento/Ui/view/base/ui_component/etc/definition.xml +++ b/app/code/Magento/Ui/view/base/ui_component/etc/definition.xml @@ -12,7 +12,7 @@ <item name="template" xsi:type="string">templates/listing/default</item> <item name="save_parameters_in_session" xsi:type="string">1</item> <item name="client_root" xsi:type="string">mui/index/render</item> - <item name="js_config" xsi:type="array"> + <item name="config" xsi:type="array"> <item name="component" xsi:type="string">uiComponent</item> </item> </argument> @@ -20,17 +20,22 @@ <paging class="Magento\Ui\Component\Paging"> <argument name="data" xsi:type="array"> - <item name="template" xsi:type="string">templates/paging/default</item> - <item name="js_config" xsi:type="array"> + <item name="config" xsi:type="array"> <item name="component" xsi:type="string">Magento_Ui/js/grid/paging/paging</item> + <item name="displayArea" xsi:type="string">bottom</item> </item> </argument> </paging> <filters class="Magento\Ui\Component\Filters"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> + <item name="config" xsi:type="array"> <item name="component" xsi:type="string">Magento_Ui/js/grid/filters/filters</item> + <item name="displayArea" xsi:type="string">dataGridFilters</item> + <item name="dataScope" xsi:type="string">filters</item> + </item> + <item name="observers" xsi:type="array"> + <item name="column" xsi:type="string">column</item> </item> </argument> </filters> @@ -39,7 +44,6 @@ <item name="config" xsi:type="array"> <item name="component" xsi:type="string">Magento_Ui/js/grid/search/search</item> <item name="displayArea" xsi:type="string">dataGridFilters</item> - </item> </argument> </filterSearch> @@ -52,8 +56,8 @@ </filterSelect> <filterRange class="Magento\Ui\Component\Filters\Type\Range"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/filters/group</item> + <item name="config" xsi:type="array"> + <item name="component" xsi:type="string">Magento_Ui/js/grid/filters/range</item> </item> </argument> </filterRange> @@ -73,7 +77,7 @@ </filterDate> <container class="Magento\Ui\Component\Container"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> + <item name="config" xsi:type="array"> <item name="component" xsi:type="string">uiComponent</item> </item> <item name="template" xsi:type="string">templates/container/default</item> @@ -81,22 +85,22 @@ </container> <massaction class="Magento\Ui\Component\MassAction"> <argument name="data" xsi:type="array"> - <item name="template" xsi:type="string">templates/listingcontainer/massaction/default</item> - <item name="js_config" xsi:type="array"> + <item name="config" xsi:type="array"> <item name="component" xsi:type="string">Magento_Ui/js/grid/massactions</item> + <item name="displayArea" xsi:type="string">bottom</item> </item> </argument> </massaction> <actions class="Magento\Ui\Component\Control\Action"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> + <item name="config" xsi:type="array"> <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/actions</item> </item> </argument> </actions> <action class="Magento\Ui\Component\Action"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> + <item name="config" xsi:type="array"> <item name="component" xsi:type="string">uiComponent</item> </item> </argument> @@ -104,7 +108,7 @@ <columns class="Magento\Ui\Component\Listing\Columns"> <argument name="data" xsi:type="array"> - <item name="js_config" xsi:type="array"> + <item name="config" xsi:type="array"> <item name="component" xsi:type="string">Magento_Ui/js/grid/listing</item> </item> </argument> @@ -112,9 +116,37 @@ <column class="Magento\Ui\Component\Listing\Columns\Column"> <argument name="data" xsi:type="array"> <item name="state_prefix" xsi:type="string">columns</item> + <item name="config" xsi:type="array"> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item> + <item name="dataType" xsi:type="string">text</item> + </item> </argument> </column> + <actionsColumn class="Magento\Ui\Component\Listing\Columns\Column"> + <argument name="data" xsi:type="array"> + <item name="config" xsi:type="array"> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/actions</item> + <item name="dataType" xsi:type="string">actions</item> + <item name="label" xsi:type="string" translate="true">Action</item> + </item> + </argument> + </actionsColumn> + <selectionsColumn class="Magento\Ui\Component\MassAction\Columns\Column"> + <argument name="data" xsi:type="array"> + <item name="state_prefix" xsi:type="string">columns</item> + <item name="config" xsi:type="array"> + <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item> + </item> + </argument> + </selectionsColumn> + <component class="Magento\Ui\Component\Container"> + <argument name="data" xsi:type="array"> + <item name="config" xsi:type="array"> + <item name="component" xsi:type="string">uiComponent</item> + </item> + </argument> + </component> <form class="Magento\Ui\Component\Form"> <argument name="data" xsi:type="array"> @@ -212,7 +244,7 @@ <image class="Magento\Ui\Component\Form\Element\DataType\Media"> <argument name="data" xsi:type="array"> <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/form/element/abstract</item> + <item name="component" xsi:type="string">Magento_Ui/js/form/element/media</item> <item name="config" xsi:type="array"> <item name="template" xsi:type="string">ui/form/field</item> <item name="elementTmpl" xsi:type="string">ui/form/element/media</item> @@ -220,6 +252,17 @@ </item> </argument> </image> + <file class="Magento\Ui\Component\Form\Element\DataType\Media"> + <argument name="data" xsi:type="array"> + <item name="js_config" xsi:type="array"> + <item name="component" xsi:type="string">Magento_Ui/js/form/element/media</item> + <item name="config" xsi:type="array"> + <item name="template" xsi:type="string">ui/form/field</item> + <item name="elementTmpl" xsi:type="string">ui/form/element/media</item> + </item> + </item> + </argument> + </file> <date class="Magento\Ui\Component\Form\Element\DataType\Date"> <argument name="data" xsi:type="array"> <item name="js_config" xsi:type="array"> @@ -279,15 +322,20 @@ <!-- bookmark --> <bookmark class="Magento\Ui\Component\Bookmark"> <argument name="data" xsi:type="array"> + <item name="config" xsi:type="array"> + <item name="component" xsi:type="string">Magento_Ui/js/grid/controls/bookmarks/bookmarks</item> + <item name="displayArea" xsi:type="string">dataGridActions</item> + <item name="storageConfig" xsi:type="array"> + <item name="saveUrl" xsi:type="url" path="mui/bookmark/save"/> + <item name="deleteUrl" xsi:type="url" path="mui/bookmark/delete"/> + </item> + </item> </argument> </bookmark> <exportButton class="Magento\Ui\Component\ExportButton"> <argument name="data" xsi:type="array"> - <item name="template" xsi:type="string">templates/export/button</item> - <item name="js_config" xsi:type="array"> - <item name="component" xsi:type="string">Magento_Ui/js/grid/export</item> - </item> <item name="config" xsi:type="array"> + <item name="component" xsi:type="string">Magento_Ui/js/grid/export</item> <item name="displayArea" xsi:type="string">dataGridActions</item> <item name="options" xsi:type="array"> <item name="cvs" xsi:type="array"> diff --git a/app/code/Magento/Ui/view/base/web/js/block-loader.js b/app/code/Magento/Ui/view/base/web/js/block-loader.js index e3cb1b422bb31f070307e26f8f037cb3753f4e99..bc1d30db768d1b2a38c889a078fb058033e16a73 100644 --- a/app/code/Magento/Ui/view/base/web/js/block-loader.js +++ b/app/code/Magento/Ui/view/base/web/js/block-loader.js @@ -5,7 +5,7 @@ define([ 'ko', 'jquery', - 'Magento_Ui/js/lib/loader', + 'Magento_Ui/js/lib/ko/template/loader', 'mage/template' ], function (ko, $, templateLoader, template) { 'use strict'; diff --git a/app/code/Magento/Ui/view/base/web/js/core/app.js b/app/code/Magento/Ui/view/base/web/js/core/app.js index 5c4593bd486a312ecc1233c2a4cc2940d2025817..b009aca28d21d930df9d33bd5b5d04ada6e10ed1 100644 --- a/app/code/Magento/Ui/view/base/web/js/core/app.js +++ b/app/code/Magento/Ui/view/base/web/js/core/app.js @@ -4,7 +4,8 @@ */ define([ './renderer/types', - './renderer/layout' + './renderer/layout', + 'Magento_Ui/js/lib/ko/initialize' ], function (types, layout) { 'use strict'; diff --git a/app/code/Magento/Ui/view/base/web/js/core/renderer/layout.js b/app/code/Magento/Ui/view/base/web/js/core/renderer/layout.js index 68509f43b5d1f5de1418380f4284bda3c34149f0..57082ee7922fc5d800568003888362b6aff90677 100644 --- a/app/code/Magento/Ui/view/base/web/js/core/renderer/layout.js +++ b/app/code/Magento/Ui/view/base/web/js/core/renderer/layout.js @@ -140,7 +140,7 @@ define([ return false; } - if (node.disabled === true) { + if (node.componentDisabled === true) { return false; } diff --git a/app/code/Magento/Ui/view/base/web/js/form/client.js b/app/code/Magento/Ui/view/base/web/js/form/client.js index 6c6bdbfcf30067a496a874c1fd1eb24e4d4eec05..6deaa92dfb5e9a2b7ef8c64648153b60df2f2077 100644 --- a/app/code/Magento/Ui/view/base/web/js/form/client.js +++ b/app/code/Magento/Ui/view/base/web/js/form/client.js @@ -6,7 +6,7 @@ define([ 'jquery', 'underscore', 'mageUtils', - 'Magento_Ui/js/lib/class' + 'uiClass' ], function ($, _, utils, Class) { 'use strict'; @@ -15,7 +15,7 @@ define([ data = utils.serialize(data); - data.form_key = FORM_KEY; + data.form_key = window.FORM_KEY; if (!url) { save.resolve(); @@ -52,15 +52,6 @@ define([ } return Class.extend({ - /** - * Initializes DataProvider instance. - * @param {Object} settings - Settings to initialize object with. - */ - initialize: function (config) { - _.extend(this, config); - - return this; - }, /** * Assembles data and submits it using 'utils.submit' method @@ -79,8 +70,6 @@ define([ options = options || {}; - data.form_key = FORM_KEY; - if (!options.redirect) { url += 'back/edit'; } @@ -88,7 +77,7 @@ define([ utils.submit({ url: url, data: data - }); + }, options.attributes); return this; } diff --git a/app/code/Magento/Ui/view/base/web/js/form/components/collection.js b/app/code/Magento/Ui/view/base/web/js/form/components/collection.js index bf10209d9d97cd0b08da0742c85a19f22bc8b1d5..b9c812af84d67cc253f7336808adddd342a2b30e 100644 --- a/app/code/Magento/Ui/view/base/web/js/form/components/collection.js +++ b/app/code/Magento/Ui/view/base/web/js/form/components/collection.js @@ -7,8 +7,9 @@ define([ 'mageUtils', 'uiRegistry', 'uiComponent', - 'Magento_Ui/js/core/renderer/layout' -], function (_, utils, registry, Component, layout) { + 'uiLayout', + 'Magento_Ui/js/modal/confirm' +], function (_, utils, registry, Component, layout, confirm) { 'use strict'; var childTemplate = { @@ -67,6 +68,7 @@ define([ return this; }, + /** * Creates new item of collection, based on incoming 'index'. * If not passed creates one with 'new_' prefix. @@ -152,11 +154,16 @@ define([ * it requires function to invoke. */ removeAddress: function (elem) { - var confirmed = confirm(this.removeMessage); - - if (confirmed) { - this._removeAddress(elem); - } + var self = this; + + confirm({ + content: this.removeMessage, + actions: { + confirm: function () { + self._removeAddress(elem) + } + } + }); }, /** diff --git a/app/code/Magento/Ui/view/base/web/js/form/components/collection/item.js b/app/code/Magento/Ui/view/base/web/js/form/components/collection/item.js index 4f7c38f4adbf958ea6689c344be3f04d079d0ff8..91cee0068ca97df41e1d0629633ad6015784b6a9 100644 --- a/app/code/Magento/Ui/view/base/web/js/form/components/collection/item.js +++ b/app/code/Magento/Ui/view/base/web/js/form/components/collection/item.js @@ -54,7 +54,7 @@ define([ * * @return {Object} - reference to instance */ - initProperties: function () { + initConfig: function () { this._super(); this.displayed = []; @@ -69,12 +69,11 @@ define([ * @return {Object} - reference to instance */ initObservable: function () { - this._super(); - - this.observe({ - 'noPreview': true, - 'indexed': {} - }); + this._super() + .observe({ + noPreview: true, + indexed: {} + }); return this; }, @@ -109,6 +108,27 @@ define([ return this; }, + /** + * Destroys current instance along with all of its' children. + * Overrides base method to clear data when this method is called. + */ + destroy: function () { + this._super(); + this._clearData(); + }, + + /** + * Clears all data associated with component. + * @private + * + * @returns {Item} Chainable. + */ + _clearData: function () { + this.source.remove(this.dataScope); + + return this; + }, + /** * Formats incoming previews array via parsePreview function. * @@ -157,7 +177,7 @@ define([ items = items.map(function (index) { var elem = elems[index]; - preview = elem && elem.visible() ? elem.delegate('getPreview') : ''; + preview = elem && elem.visible() ? elem.getPreview() : ''; preview = Array.isArray(preview) ? _.compact(preview).join(', ') : diff --git a/app/code/Magento/Ui/view/base/web/js/form/components/group.js b/app/code/Magento/Ui/view/base/web/js/form/components/group.js index daf56e7e564a719823b153883f8a74bc508f24fb..468dff2ec6678aa1a13f520fcaab3e8ca248228c 100644 --- a/app/code/Magento/Ui/view/base/web/js/form/components/group.js +++ b/app/code/Magento/Ui/view/base/web/js/form/components/group.js @@ -4,11 +4,11 @@ */ define([ 'underscore', - 'uiComponent' -], function (_, Component) { + 'uiCollection' +], function (_, Collection) { 'use strict'; - return Component.extend({ + return Collection.extend({ defaults: { visible: true, label: '', @@ -88,6 +88,15 @@ define([ */ isMultiple: function () { return this.elems.getLength() > 1; + }, + + /** + * Returns an array of child components previews. + * + * @returns {Array} + */ + getPreview: function () { + return this.elems.map('getPreview'); } }); }); diff --git a/app/code/Magento/Ui/view/base/web/js/form/components/tab.js b/app/code/Magento/Ui/view/base/web/js/form/components/tab.js index 61560892e3e9ddd8dc3885644eb3d874a50ea9fb..bd9537f747e23709a257beac0da9faf4941ae212 100644 --- a/app/code/Magento/Ui/view/base/web/js/form/components/tab.js +++ b/app/code/Magento/Ui/view/base/web/js/form/components/tab.js @@ -3,11 +3,11 @@ * See COPYING.txt for license details. */ define([ - 'uiComponent' -], function (Component) { + 'uiCollection' +], function (Collection) { 'use strict'; - return Component.extend({ + return Collection.extend({ defaults: { uniqueProp: 'active', active: false, @@ -35,14 +35,6 @@ define([ return this; }, - onUniqueUpdate: function (name) { - var active = name === this.name; - - this._super(); - - this.trigger('active', active); - }, - /** * Sets active property to true, then invokes pushParams method. */ @@ -51,6 +43,8 @@ define([ this.wasActivated(true); this.setUnique(); + + return true; } }); }); diff --git a/app/code/Magento/Ui/view/base/web/js/form/element/abstract.js b/app/code/Magento/Ui/view/base/web/js/form/element/abstract.js index 591d9de82b07ce80f2840b8f28f98f3daeb47bd5..4795afde0002490438afa082fe3e0d59b0a61e35 100755 --- a/app/code/Magento/Ui/view/base/web/js/form/element/abstract.js +++ b/app/code/Magento/Ui/view/base/web/js/form/element/abstract.js @@ -6,19 +6,18 @@ define([ 'underscore', 'mageUtils', - 'uiComponent', + 'uiElement', 'Magento_Ui/js/lib/validation/validator' -], function (_, utils, Component, validator) { +], function (_, utils, Element, validator) { 'use strict'; - return Component.extend({ + return Element.extend({ defaults: { visible: true, preview: '', focused: false, required: false, disabled: false, - tmpPath: 'ui/form/element/', tooltipTpl: 'ui/form/element/helper/tooltip', 'input_type': 'input', placeholder: '', @@ -78,15 +77,20 @@ define([ * * @returns {Abstract} Chainable. */ - initProperties: function () { - var uid = utils.uniqueid(); + initConfig: function () { + var uid = utils.uniqueid(), + name, + scope; this._super(); + scope = this.dataScope, + name = scope.split('.').slice(1); + _.extend(this, { - 'uid': uid, - 'noticeId': 'notice-' + uid, - 'inputName': utils.serializeName(this.dataScope) + uid: uid, + noticeId: 'notice-' + uid, + inputName: utils.serializeName(name.join('.')) }); return this; diff --git a/app/code/Magento/Ui/view/base/web/js/form/element/date.js b/app/code/Magento/Ui/view/base/web/js/form/element/date.js index c9ee948d681470da296ae16a1ebe6ff213017928..d4dc131c7a29a030dbd404e30d5a4c5ca7711e13 100644 --- a/app/code/Magento/Ui/view/base/web/js/form/element/date.js +++ b/app/code/Magento/Ui/view/base/web/js/form/element/date.js @@ -20,10 +20,12 @@ define([ * * @returns {Object} Chainable. */ - initProperties: function () { + initConfig: function () { + this._super(); + this.dateFormat = utils.normalizeDate(this.dateFormat); - return this._super(); + return this; }, /** diff --git a/app/code/Magento/Ui/view/base/web/js/form/element/helpers/options.js b/app/code/Magento/Ui/view/base/web/js/form/element/helpers/options.js deleted file mode 100644 index 99b14e19582ee7c32ae6113b313c89aa24e8d578..0000000000000000000000000000000000000000 --- a/app/code/Magento/Ui/view/base/web/js/form/element/helpers/options.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Copyright © 2015 Magento. All rights reserved. - * See COPYING.txt for license details. - */ - -define([ - 'uiComponent' -], function (Component) { - 'use strict'; - - return Component.extend({ - }); -}); diff --git a/app/code/Magento/Ui/view/base/web/js/form/element/media.js b/app/code/Magento/Ui/view/base/web/js/form/element/media.js new file mode 100644 index 0000000000000000000000000000000000000000..31b610c481bc17c31024a0e8640f05964204c7f7 --- /dev/null +++ b/app/code/Magento/Ui/view/base/web/js/form/element/media.js @@ -0,0 +1,48 @@ +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +define([ + 'mageUtils', + './abstract' +], function (utils, Abstract) { + 'use strict'; + + return Abstract.extend({ + defaults: { + links: { + value: '' + } + }, + + /** + * Initializes file component. + * + * @returns {Media} Chainable. + */ + initialize: function () { + this._super() + .initFormId(); + + return this; + }, + + /** + * Defines form ID with which file input will be associated. + * + * @returns {Media} Chainable. + */ + initFormId: function () { + var namespace; + + if (this.formId) { + return this; + } + + namespace = this.name.split('.'); + this.formId = namespace[0]; + + return this; + } + }); +}); diff --git a/app/code/Magento/Ui/view/base/web/js/form/element/multiselect.js b/app/code/Magento/Ui/view/base/web/js/form/element/multiselect.js index 624d2df5c7e79eaf3b3add5fd049051010a4b4e1..6c5de791d1e87337876b2919c7b1c6180729ff1a 100644 --- a/app/code/Magento/Ui/view/base/web/js/form/element/multiselect.js +++ b/app/code/Magento/Ui/view/base/web/js/form/element/multiselect.js @@ -16,12 +16,11 @@ define([ }, /** - * Calls 'getInitialValue' of parent and if the result of it is not empty - * string, returs it, else returnes caption or first found option's value + * Splits incoming string value. * - * @returns {Array|String} + * @returns {Array} */ - getInitialValue: function () { + normalizeData: function () { var value = this._super(); return _.isString(value) ? value.split(',') : value; @@ -29,6 +28,7 @@ define([ /** * Defines if value has changed + * * @returns {Boolean} */ hasChanged: function () { diff --git a/app/code/Magento/Ui/view/base/web/js/form/element/select.js b/app/code/Magento/Ui/view/base/web/js/form/element/select.js index 1298d5fd2b4d12d1fd22a3744b1b40e30f4c5643..061844da9b05a357a325bd50195fca0d140d7ad7 100644 --- a/app/code/Magento/Ui/view/base/web/js/form/element/select.js +++ b/app/code/Magento/Ui/view/base/web/js/form/element/select.js @@ -7,7 +7,7 @@ define([ 'mageUtils', 'uiRegistry', './abstract', - 'Magento_Ui/js/core/renderer/layout' + 'uiLayout' ], function (_, utils, registry, Abstract, layout) { 'use strict'; @@ -31,14 +31,14 @@ define([ * @param {Array} nodes * @return {Object} */ - function parseOptions(nodes) { + function parseOptions(nodes, captionValue) { var caption, value; nodes = _.map(nodes, function (node) { value = node.value; - if (value === null || value === '') { + if (value === null || value === captionValue) { if (_.isUndefined(caption)) { caption = node.label; } @@ -131,7 +131,9 @@ define([ * @returns {Object} Chainable. */ initConfig: function (config) { - var result = parseOptions(config.options); + var options = config.options, + captionValue = config.captionValue || '', + result = parseOptions(options, captionValue); if (config.caption) { delete result.caption; diff --git a/app/code/Magento/Ui/view/base/web/js/form/element/textarea.js b/app/code/Magento/Ui/view/base/web/js/form/element/textarea.js index b5d263cc344d080936252d8881bcd963fd9a06ab..2731725ae2de939d83016d2be506473169dc0a79 100644 --- a/app/code/Magento/Ui/view/base/web/js/form/element/textarea.js +++ b/app/code/Magento/Ui/view/base/web/js/form/element/textarea.js @@ -10,9 +10,9 @@ define([ return Abstract.extend({ defaults: { - cols: 15, - rows: 2, - template: 'ui/form/element/textarea' + cols: 15, + rows: 2, + template: 'ui/form/element/textarea' } }); }); diff --git a/app/code/Magento/Ui/view/base/web/js/form/element/ui-select.js b/app/code/Magento/Ui/view/base/web/js/form/element/ui-select.js index 638f78341d61d774a342ca07ce0aad752bb02b82..5547e3ad9dba80b8a4573e5ea08c6fc2107e710a 100644 --- a/app/code/Magento/Ui/view/base/web/js/form/element/ui-select.js +++ b/app/code/Magento/Ui/view/base/web/js/form/element/ui-select.js @@ -5,12 +5,10 @@ define([ 'underscore', - 'ko', './abstract', 'Magento_Ui/js/lib/key-codes', - 'mage/translate', - 'uiLayout' -], function (_, ko, Abstract, keyCodes, $t, layout) { + 'mage/translate' +], function (_, Abstract, keyCodes, $t) { 'use strict'; /** @@ -52,20 +50,10 @@ define([ defaultPlaceholder: $t('Select...'), lotPlaceholders: $t('Selected') }, - optionsConfig: { - name: '${ $.name }_options', - component: 'Magento_Ui/js/form/element/helpers/options' - }, hoverElIndex: null, listens: { listVisible: 'cleanHoveredElement', filterInputValue: 'filterOptionsList' - }, - imports: { - options: '${ $.optionsConfig.name }:options' - }, - modules: { - optionsProvider: '${ $.optionsConfig.name }' } }, @@ -134,18 +122,6 @@ define([ return this; }, - /** - * Initializes optionsProvider - * - * @returns {Object} Chainable. - */ - initOptions: function () { - this.optionsConfig.options = this.options(); - layout([this.optionsConfig]); - - return this; - }, - /** * Handler outerClick event. Closed options list */ @@ -490,16 +466,11 @@ define([ * @returns {String} */ getPreview: function () { - var i = 0, - selected = this.getSelected(), - length = selected.length, - result = []; - - for (i; i < length; i++) { - result.push(selected[i].label); - } + var selected = this.getSelected(); - return result.join(', '); + return selected.map(function (option) { + return option.label; + }).join(', '); } }); }); diff --git a/app/code/Magento/Ui/view/base/web/js/form/form.js b/app/code/Magento/Ui/view/base/web/js/form/form.js index 2a192c20c2463e29397750f0ade0e147ac0d80bd..25e193877c1804c4610d94b253b881bd1a8d5105 100644 --- a/app/code/Magento/Ui/view/base/web/js/form/form.js +++ b/app/code/Magento/Ui/view/base/web/js/form/form.js @@ -4,10 +4,10 @@ */ define([ 'underscore', - 'uiComponent', + 'uiCollection', 'Magento_Ui/js/lib/spinner', './adapter' -], function (_, Component, loader, adapter) { +], function (_, Collection, loader, adapter) { 'use strict'; function collectData(selector) { @@ -23,7 +23,7 @@ define([ return result; } - return Component.extend({ + return Collection.extend({ initialize: function () { this._super() .initAdapter() @@ -42,7 +42,7 @@ define([ return this; }, - initProperties: function () { + initConfig: function () { this._super(); this.selector = '[data-form-part=' + this.namespace + ']'; @@ -76,7 +76,10 @@ define([ }); source.save({ - redirect: redirect + redirect: redirect, + attributes: { + id: this.namespace + } }); }, diff --git a/app/code/Magento/Ui/view/base/web/js/form/provider.js b/app/code/Magento/Ui/view/base/web/js/form/provider.js index 8b182d2b8f2383266f101921d4e8668478c2934b..d992c8e1678bb423cfde5b2675dde6d97f655bf1 100644 --- a/app/code/Magento/Ui/view/base/web/js/form/provider.js +++ b/app/code/Magento/Ui/view/base/web/js/form/provider.js @@ -4,12 +4,26 @@ */ define([ 'underscore', - 'uiComponent', + 'uiElement', './client' -], function (_, Component, Client) { +], function (_, Element, Client) { 'use strict'; - return Component.extend({ + return Element.extend({ + defaults: { + clientConfig: { + urls: { + save: '${ $.submit_url }', + beforeSave: '${ $.validate_url }' + } + } + }, + + /** + * Initializes provider component. + * + * @returns {Provider} Chainable. + */ initialize: function () { this._super() .initClient(); @@ -17,17 +31,23 @@ define([ return this; }, + /** + * Initializes client component. + * + * @returns {Provider} Chainable. + */ initClient: function () { - this.client = new Client({ - urls: { - beforeSave: this.validate_url, - save: this.submit_url - } - }); + this.client = new Client(this.clientConfig); return this; }, + /** + * Saves currently available data. + * + * @param {Object} [options] - Addtitional request options. + * @returns {Provider} Chainable. + */ save: function (options) { var data = this.get('data'); diff --git a/app/code/Magento/Ui/view/base/web/js/grid/columns/actions.js b/app/code/Magento/Ui/view/base/web/js/grid/columns/actions.js index 091cd9ee2ea570a238e72a1a27cb9eb36d579322..e1bbb011db85044800729329c92a7810d42a11e3 100644 --- a/app/code/Magento/Ui/view/base/web/js/grid/columns/actions.js +++ b/app/code/Magento/Ui/view/base/web/js/grid/columns/actions.js @@ -15,12 +15,17 @@ define([ return Column.extend({ defaults: { bodyTmpl: 'ui/grid/cells/actions', + sortable: false, + draggable: false, actions: [], rows: [], + rowsProvider: '${ $.parentName }', + fieldClass: { + 'data-grid-actions-cell': true + }, templates: { actions: {} }, - rowsProvider: '${ $.parentName }', imports: { rows: '${ $.rowsProvider }:rows' }, @@ -36,7 +41,7 @@ define([ */ initObservable: function () { this._super() - .observe('actions'); + .track('actions'); return this; }, @@ -50,7 +55,7 @@ define([ * @returns {Array|Object} */ getAction: function (rowIndex, actionIndex) { - var rowActions = this.actions()[rowIndex]; + var rowActions = this.actions[rowIndex]; return rowActions && actionIndex ? rowActions[actionIndex] : @@ -93,10 +98,7 @@ define([ * @returns {ActionsColumn} Chainable. */ updateActions: function () { - var rows = this.rows, - actions = rows.map(this._formatActions, this); - - this.actions(actions); + this.actions = this.rows.map(this._formatActions, this); return this; }, @@ -156,6 +158,34 @@ define([ return this; }, + /** + * Creates handler for the provided action if it's required. + * + * @param {Object} action - Action object. + * @returns {Function|Undefined} + */ + getActionHandler: function (action) { + var index = action.index, + rowIndex = action.rowIndex; + + if (this.isHandlerRequired(index, rowIndex)) { + return this.applyAction.bind(this, index, rowIndex); + } + }, + + /** + * Checks if specified action requires a handler function. + * + * @param {String} actionIndex - Actions' identifier. + * @param {Number} rowIndex - Index of a row. + * @returns {Boolean} + */ + isHandlerRequired: function (actionIndex, rowIndex) { + var action = this.getAction(rowIndex, actionIndex); + + return _.isObject(action.callback) || action.confirm || !action.href; + }, + /** * Creates action callback based on its' data. If action doesn't spicify * a callback function than the default one will be used. @@ -244,16 +274,13 @@ define([ }, /** - * Checks if specified action requires a handler function. + * Overrides base method, because this component + * can't have global field action. * - * @param {String} actionIndex - Actions' identifier. - * @param {Number} rowIndex - Index of a row. - * @returns {Boolean} + * @returns {Boolean} False. */ - isHandlerRequired: function (actionIndex, rowIndex) { - var action = this.getAction(rowIndex, actionIndex); - - return _.isObject(action.callback) || action.confirm || !action.href; + hasFieldAction: function () { + return false; } }); }); diff --git a/app/code/Magento/Ui/view/base/web/js/grid/columns/column.js b/app/code/Magento/Ui/view/base/web/js/grid/columns/column.js index 06ee7dea8c3f30da8b76d9d8408ea8c2e3526e23..0d113fdbae53f4ad2b7a84cc8ef2b22bc6bfb391 100644 --- a/app/code/Magento/Ui/view/base/web/js/grid/columns/column.js +++ b/app/code/Magento/Ui/view/base/web/js/grid/columns/column.js @@ -6,25 +6,27 @@ define([ 'underscore', 'uiRegistry', 'mageUtils', - 'uiComponent' -], function (_, registry, utils, Component) { + 'uiElement' +], function (_, registry, utils, Element) { 'use strict'; - return Component.extend({ + return Element.extend({ defaults: { headerTmpl: 'ui/grid/columns/text', bodyTmpl: 'ui/grid/cells/text', disableAction: false, + controlVisibility: true, sortable: true, sorting: false, visible: true, draggable: true, + fieldClass: {}, ignoreTmpls: { fieldAction: true }, - links: { - visible: '${ $.storageConfig.path }.visible', - sorting: '${ $.storageConfig.path }.sorting' + statefull: { + visible: true, + sorting: true }, imports: { exportSorting: 'sorting' @@ -37,6 +39,18 @@ define([ } }, + /** + * Initializes column component. + * + * @returns {Column} Chainable. + */ + initialize: function () { + this._super() + .initFieldClass(); + + return this; + }, + /** * Initializes observable properties. * @@ -44,7 +58,27 @@ define([ */ initObservable: function () { this._super() - .observe('visible dragging dragover sorting disableAction'); + .track([ + 'visible', + 'sorting', + 'disableAction' + ]) + .observe([ + 'dragging' + ]); + + return this; + }, + + /** + * Extends list of field classes. + * + * @returns {Column} Chainable. + */ + initFieldClass: function () { + _.extend(this.fieldClass, { + _dragging: this.dragging + }); return this; }, @@ -54,7 +88,7 @@ define([ * * @param {String} state - Defines what state should be used: saved or default. * @param {String} [property] - Defines what columns' property should be applied. - * If not specfied, then all columns stored properties will be used. + * If not specified, then all columns stored properties will be used. * @returns {Column} Chainable. */ applyState: function (state, property) { @@ -64,7 +98,7 @@ define([ namespace += '.' + property; } - this.storage('applyState', state, namespace); + this.storage('applyStateOf', state, namespace); return this; }, @@ -78,47 +112,78 @@ define([ * @returns {Column} Chainable. */ sort: function (enable) { - var direction = false; - if (!this.sortable) { return this; } - if (enable !== false) { - direction = this.toggleDirection(); - } + enable !== false ? + this.toggleSorting() : + this.sorting = false; - this.sorting(direction); + return this; + }, + + /** + * Sets descending columns' sorting. + * + * @returns {Column} Chainable. + */ + sortDescending: function () { + if (this.sortable) { + this.sorting = 'desc'; + } return this; }, /** - * Exports sorting data to the dataProvider if - * sorting of a column is enabled. + * Sets ascending columns' sorting. * - * @param {(String|Boolean)} sorting - Columns' sorting state. + * @returns {Column} Chainable. */ - exportSorting: function (sorting) { - if (!sorting) { - return; + sortAscending: function () { + if (this.sortable) { + this.sorting = 'asc'; } - this.source('set', 'params.sorting', { - field: this.index, - direction: sorting - }); + return this; }, /** * Toggles sorting direction. * - * @returns {String} New direction. + * @returns {Column} Chainable. + */ + toggleSorting: function () { + this.sorting === 'asc' ? + this.sortDescending() : + this.sortAscending(); + + return this; + }, + + /** + * Checks if column is sorted. + * + * @returns {Boolean} + */ + isSorted: function () { + return !!this.sorting; + }, + + /** + * Exports sorting data to the dataProvider if + * sorting of a column is enabled. */ - toggleDirection: function () { - return this.sorting() === 'asc' ? - 'desc' : - 'asc'; + exportSorting: function () { + if (!this.sorting) { + return; + } + + this.source('set', 'params.sorting', { + field: this.index, + direction: this.sorting + }); }, /** @@ -151,7 +216,7 @@ define([ var action = this.fieldAction, callback; - if (!this.hasFieldAction() || this.disableAction()) { + if (!this.hasFieldAction() || this.disableAction) { return this; } @@ -169,12 +234,24 @@ define([ return this; }, + /** + * Returns field action handler if it was specified. + * + * @param {Object} record - Record object with which action is associated. + * @returns {Function|Undefined} + */ + getFieldHandler: function (record) { + if (this.hasFieldAction()) { + return this.applyFieldAction.bind(this, record._rowIndex); + } + }, + /** * Creates action callback based on its' data. * * @param {Object} action - Actions' object. * @returns {Function|Boolean} Callback function or false - * value if it was imposible create a callback. + * value if it was impossible create a callback. */ _getFieldCallback: function (action) { var args = action.params || [], @@ -198,11 +275,20 @@ define([ /** * Ment to preprocess data associated with a current columns' field. * - * @param {*} data - Data to be preprocessed. + * @param {Object} record - Data to be preprocessed. * @returns {String} */ - getLabel: function (data) { - return data; + getLabel: function (record) { + return record[this.index]; + }, + + /** + * Returns list of classes that should be applied to a field. + * + * @returns {Object} + */ + getFieldClass: function () { + return this.fieldClass; }, /** diff --git a/app/code/Magento/Ui/view/base/web/js/grid/columns/date.js b/app/code/Magento/Ui/view/base/web/js/grid/columns/date.js index 90ace7d79af6ad4eb96d1c0bceb5140ccdc7afe1..19ac459e2dc476338683cc0cd350f7ee34927f28 100644 --- a/app/code/Magento/Ui/view/base/web/js/grid/columns/date.js +++ b/app/code/Magento/Ui/view/base/web/js/grid/columns/date.js @@ -15,24 +15,25 @@ define([ }, /** - * Initializes components' static properties. + * Overrides base method to normalize date format. * * @returns {DateColumn} Chainable. */ - initProperties: function () { + initConfig: function () { + this._super(); + this.dateFormat = utils.normalizeDate(this.dateFormat); - return this._super(); + return this; }, /** * Formats incoming date based on the 'dateFormat' property. * - * @param {String} date - Date to be formatted. * @returns {String} Formatted date. */ - getLabel: function (date) { - date = moment(date); + getLabel: function () { + var date = moment(this._super()); date = date.isValid() ? date.format(this.dateFormat) : diff --git a/app/code/Magento/Ui/view/base/web/js/grid/columns/multiselect.js b/app/code/Magento/Ui/view/base/web/js/grid/columns/multiselect.js index b48f1c9ed8a35adc457b2f03b0190a2cb4d7c3d2..80ab7e814ae5cfcad6b2a15cd3646ea08cdad69c 100644 --- a/app/code/Magento/Ui/view/base/web/js/grid/columns/multiselect.js +++ b/app/code/Magento/Ui/view/base/web/js/grid/columns/multiselect.js @@ -13,14 +13,19 @@ define([ defaults: { headerTmpl: 'ui/grid/columns/multiselect', bodyTmpl: 'ui/grid/cells/multiselect', + controlVisibility: false, sortable: false, + draggable: false, menuVisible: false, excludeMode: false, allSelected: false, indetermine: false, - selected: [], disabled: [], + selected: [], excluded: [], + fieldClass: { + 'data-grid-checkbox-cell': true + }, actions: [{ value: 'selectAll', label: $t('Select All') @@ -195,10 +200,9 @@ define([ * @returns {Multiselect} Chainable. */ selectPage: function () { - var selected = _.difference( - _.union(this.selected(), this.getIds()), - this.disabled() - ); + var selected = _.union(this.selected(), this.getIds()); + + selected = _.difference(selected, this.disabled()); this.selected(selected); @@ -436,6 +440,16 @@ define([ return this; }, + /** + * Overrides base method, because this component + * can't have global field action. + * + * @returns {Boolean} False. + */ + hasFieldAction: function () { + return false; + }, + /** * Callback method to handle changes of selected items. * diff --git a/app/code/Magento/Ui/view/base/web/js/grid/columns/onoff.js b/app/code/Magento/Ui/view/base/web/js/grid/columns/onoff.js new file mode 100755 index 0000000000000000000000000000000000000000..407544fd2ccdc6d29b6324b6f91a08cfacc70bbb --- /dev/null +++ b/app/code/Magento/Ui/view/base/web/js/grid/columns/onoff.js @@ -0,0 +1,139 @@ +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +define([ + 'underscore', + 'mage/translate', + './multiselect', + 'uiRegistry' +], function (_, $t, Column, registry) { + 'use strict'; + + return Column.extend({ + defaults: { + headerTmpl: 'ui/grid/columns/onoff', + bodyTmpl: 'ui/grid/cells/onoff', + fieldClass: { + 'admin__scope-old': true, + 'data-grid-onoff-cell': true, + 'data-grid-checkbox-cell': false + }, + imports: { + selectedData: '${ $.provider }:data.selectedData' + }, + listens: { + '${ $.provider }:reloaded': 'setDefaultSelections' + } + }, + + /** + * @param {Integer} id + * @returns {*} + */ + getLabel: function (id) { + return this.selected.indexOf(id) !== -1 ? $t('On') : $t('Off'); + }, + + /** + * Initializes components' static properties. + * + * @returns {Column} Chainable. + */ + initProperties: function () { + this.actions = [{ + value: 'selectPage', + label: $t('Select all on this page') + }, { + value: 'deselectPage', + label: $t('Deselect all on this page') + }]; + + return this._super(); + }, + + /** + * Sets the ids for preselected elements + * @returns void + */ + setDefaultSelections: function () { + var positionCacheValid = registry.get('position_cache_valid'), + key, + i; + + registry.set('position_cache_valid', true); + + if (this.selected().length === this.selectedData.length || positionCacheValid) { + return; + } + // Check selected data + for (key in this.selectedData) { + if (this.selectedData.hasOwnProperty(key) && this.selected().indexOf(key) === -1) { + this.selected.push(key); + } + } + // Uncheck unselected data + for (i = 0; i < this.selected().length; i++) { + key = this.selected()[i]; + this.selectedData.hasOwnProperty(key) || this.selected.splice(this.selected().indexOf(key), 1); + } + }, + + /** + * Show/hide action in the massaction menu + * @param {Integer} actionId + * @returns {Boolean} + */ + isActionRelevant: function (actionId) { + var relevant = true; + + switch (actionId) { + case 'selectPage': + relevant = !this.isPageSelected(true); + break; + + case 'deselectPage': + relevant = this.isPageSelected(); + break; + } + + return relevant; + }, + + /** + * Updates values of the 'allSelected' + * and 'indetermine' properties. + * + * @returns {Multiselect} Chainable. + */ + updateState: function () { + var totalRecords = this.totalRecords(), + selected = this.selected().length, + excluded = this.excluded().length, + totalSelected = this.totalSelected(), + allSelected; + + // When filters are enabled then totalRecords is unknown + if (this.getFiltering()) { + if (this.getFiltering().search !== '') { + totalRecords = -1; + } + } + + allSelected = totalRecords && totalSelected === totalRecords; + + if (this.excludeMode()) { + if (excluded === totalRecords) { + this.deselectAll(); + } + } else if (totalRecords && selected === totalRecords) { + this.selectAll(); + } + + this.allSelected(allSelected); + this.indetermine(totalSelected && !allSelected); + + return this; + } + }); +}); diff --git a/app/code/Magento/Ui/view/base/web/js/grid/columns/select.js b/app/code/Magento/Ui/view/base/web/js/grid/columns/select.js index f55a2efdd6311ec0078830eb1a50d37dc82bb3a5..afa8831e5105b4d2041ca04cc082fc776ac25409 100644 --- a/app/code/Magento/Ui/view/base/web/js/grid/columns/select.js +++ b/app/code/Magento/Ui/view/base/web/js/grid/columns/select.js @@ -3,32 +3,41 @@ * See COPYING.txt for license details. */ define([ + 'underscore', './column' -], function (Column) { +], function (_, Column) { 'use strict'; return Column.extend({ + + /*eslint-disable eqeqeq*/ /** * Retrieves label associated with a provided value. * - * @param {Array} values - Values of the option. * @returns {String} */ - getLabel: function (values) { + getLabel: function () { var options = this.options || [], - labels = []; + values = this._super(), + label = []; + + if (!Array.isArray(values)) { + values = [values]; + } - values = values || []; + values = values.map(function (value) { + return value + ''; + }); - /*eslint-disable eqeqeq*/ options.forEach(function (item) { - if(values.indexOf(item.value) > -1) { - labels.push(item.label); + if (_.contains(values, item.value + '')) { + label.push(item.label); } }); - /*eslint-enable eqeqeq*/ - return labels.join(', '); + return label.join(', '); } + + /*eslint-enable eqeqeq*/ }); }); diff --git a/app/code/Magento/Ui/view/base/web/js/grid/columns/thumbnail.js b/app/code/Magento/Ui/view/base/web/js/grid/columns/thumbnail.js index 11455b30680706bf4d2ef578da5d45aa301fdbff..ef46cfc712452990de66364fd540322157ec662e 100644 --- a/app/code/Magento/Ui/view/base/web/js/grid/columns/thumbnail.js +++ b/app/code/Magento/Ui/view/base/web/js/grid/columns/thumbnail.js @@ -13,7 +13,10 @@ define([ return Column.extend({ defaults: { - bodyTmpl: 'ui/grid/cells/thumbnail' + bodyTmpl: 'ui/grid/cells/thumbnail', + fieldClass: { + 'data-grid-thumbnail-cell': true + } }, getSrc: function (row) { return row[this.index + '_src'] @@ -44,6 +47,11 @@ define([ innerScroll: true, modalClass: '_image-box', buttons: []}).trigger('openModal'); + }, + getFieldHandler: function (row) { + if (this.isPreviewAvailable()) { + return this.preview.bind(this, row); + } } }); }); diff --git a/app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/bookmarks.js b/app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/bookmarks.js index 8bd34bb57f6a29a6413a6405275506ca6fee1db8..02ab2b1ec167fccdf4003a4832f6c3cf8176aadf 100644 --- a/app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/bookmarks.js +++ b/app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/bookmarks.js @@ -5,9 +5,10 @@ define([ 'underscore', 'mageUtils', + 'mage/translate', 'uiLayout', - 'uiComponent' -], function (_, utils, layout, Component) { + 'uiCollection' +], function (_, utils, $t, layout, Collection) { 'use strict'; /** @@ -26,27 +27,14 @@ define([ return path.join('.'); } - return Component.extend({ + return Collection.extend({ defaults: { template: 'ui/grid/controls/bookmarks/bookmarks', + viewTmpl: 'ui/grid/controls/bookmarks/view', + newViewLabel: $t('New View'), defaultIndex: 'default', activeIndex: 'default', hasChanges: false, - templates: { - view: { - parent: '${ $.$data.name }', - name: '${ $.$data.index }', - label: '${ $.$data.label }', - provider: '${ $.$data.provider }', - component: 'Magento_Ui/js/grid/controls/bookmarks/view' - }, - newView: { - label: 'New View', - index: '_${ Date.now() }', - editing: true, - isNew: true - } - }, storageConfig: { provider: '${ $.storageConfig.name }', name: '${ $.name }_storage', @@ -54,14 +42,14 @@ define([ }, views: { default: { - label: 'Default View', + label: $t('Default View'), index: 'default', editable: false } }, listens: { activeIndex: 'onActiveIndexChange', - activeView: 'checkChanges', + activeView: 'checkState', current: 'onStateChange' } }, @@ -72,9 +60,9 @@ define([ * @returns {Bookmarks} Chainable. */ initialize: function () { - utils.limit(this, 'saveSate', 2000); - utils.limit(this, '_defaultPolyfill', 1000); - utils.limit(this, 'checkChanges', 50); + utils.limit(this, 'checkState', 5); + utils.limit(this, 'saveState', 2000); + utils.limit(this, '_defaultPolyfill', 3000); this._super() .restore() @@ -91,7 +79,16 @@ define([ */ initObservable: function () { this._super() - .observe('activeView hasChanges'); + .track([ + 'hasChanges', + 'editing', + 'activeView', + 'customVisible', + 'customLabel' + ]) + .track({ + viewsArray: [] + }); return this; }, @@ -108,209 +105,436 @@ define([ }, /** - * Called when another element was added to the current component. + * Creates instances of a previously saved views. * - * @param {Object} elem - Instance of an element that was added. * @returns {Bookmarks} Chainable. */ - initElement: function (elem) { - var index = elem.index; + initViews: function () { + _.each(this.views, function (config) { + this.addView(config); + }, this); + + this.activeView = this.getActiveView(); + + return this; + }, + + /** + * Creates complete configuration for a view. + * + * @param {Object} [config] - Additional configuration object. + * @returns {Object} + */ + buildView: function (config) { + var view = { + label: this.newViewLabel, + index: '_' + Date.now(), + editable: true + }; + + utils.extend(view, config || {}); + + view.data = view.data || utils.copy(this.current); + view.value = view.label; + + this.observe.call(view, true, 'label value'); + + return view; + }, + + /** + * Creates instance of a view with a provided configuration. + * + * @param {Object} [config] - View configuration. + * @param {Boolean} [saveView=false] - Whether to save created view automatically or not. + * @param {Boolean} [applyView=false] - Whether to apply created view automatically or not. + * @returns {View} Created view. + */ + addView: function (config, saveView, applyView) { + var view = this.buildView(config), + index = view.index; - if (index === this.defaultIndex) { - this.defaultView = elem; + this.views[index] = view; + + if (saveView) { + this.saveView(index); } - if (index === this.activeIndex) { - this.activeView(elem); + if (applyView) { + this.applyView(index); } - elem.on({ - editing: this.onEditingChange.bind(this, elem) - }); + this.updateArray(); - return this._super(); + return view; }, /** - * Creates instances of a previously saved views. + * Removes specified view. * + * @param {String} index - Index of a view to be removed. * @returns {Bookmarks} Chainable. */ - initViews: function () { - var views = this.views, - active = _.findWhere(views, {index: this.activeIndex}); + removeView: function (index) { + var viewPath = this.getViewPath(index); - if (!active) { - this.activeIndex = this.defaultIndex; + if (this.isViewActive(index)) { + this.applyView(this.defaultIndex); } - _.each(views, this.createView, this); + this.endEdit(index) + .remove(viewPath) + .removeStored(viewPath) + .updateArray(); return this; }, /** - * Creates view with a provided data. + * Saves data of a specified view. * - * @param {Object} item - Data object that will be passed to a view instance. + * @param {String} index - Index of a view to be saved. * @returns {Bookmarks} Chainable. */ - createView: function (item) { - var data = _.extend({}, this, item), - child = utils.template(this.templates.view, data); + saveView: function (index) { + var viewPath = this.getViewPath(index); - _.extend(child, item); + this.updateViewLabel(index) + .endEdit(index) + .store(viewPath) + .checkState(); - if (this.activeIndex === item.index) { - child.active = true; - } + return this; + }, - layout([child]); + /** + * Sets specified view as active + * and applies its' state. + * + * @param {String} index - Index of a view to be applied. + * @returns {Bookmarks} Chainable. + */ + applyView: function (index) { + this.applyStateOf(index) + .set('activeIndex', index); return this; }, /** - * Creates new view instance. + * Updates data of a specified view if it's + * currently active and saves its' data. * + * @param {String} index - Index of a view. * @returns {Bookmarks} Chainable. */ - createNewView: function () { - var view = this.templates.newView; + updateAndSave: function (index) { + if (this.isViewActive(index)) { + this.updateActiveView(index); + } + + this.saveView(index); + + return this; + }, + + /** + * Returns instance of a specified view. + * + * @param {String} index - Index of a view to be retrieved. + * @returns {View} + */ + getView: function (index) { + return this.views[index]; + }, - view.data = this.current; + /** + * Returns instance of an active view. + * + * @returns {View} + */ + getActiveView: function () { + return this.views[this.activeIndex]; + }, - this.createView(view); + /** + * Checks if specified view is active. + * + * @param {String} index - Index of a view to be checked. + * @returns {Boolean} + */ + isViewActive: function (index) { + return this.activeView === this.getView(index); + }, + + /** + * Sets current state as a data of an active view. + * + * @returns {Bookmarks} Chainable. + */ + updateActiveView: function () { + this.setViewData(this.activeIndex, this.current); return this; }, /** - * Deletes specfied view. + * Replaces label a view with a provided one. + * If new label is not specified, then views' + * 'value' property will be taken. * - * @param {View} view - View to be deleted. + * @param {String} index - Index of a view. + * @param {String} [label=view.value] - New labels' value. * @returns {Bookmarks} Chainable. */ - removeView: function (view) { - if (view.active()) { - this.applyView(this.defaultIndex); - } + updateViewLabel: function (index, label) { + var view = this.getView(index), + current = view.label; - if (!view.isNew) { - this.removeStored('views.' + view.index); - } + label = (label || view.value).trim() || current; + label = this.uniqueLabel(label, current); - view.destroy(); + view.label = view.value = label; return this; }, /** - * Saves data of a specified view. + * Retrieves data of a specified view. * - * @param {View} view - View to be saved. - * @returns {Bookmarks} Chainable. + * @param {String} index - Index of a view whose data should be retrieved. + * @param {String} [property] - If not specified then whole views' data will be retrieved. + * @returns {Object} Views' data. */ - saveView: function (view) { - if (view.isNew || view.active()) { - view.setData(this.current); + getViewData: function (index, property) { + var view = this.getView(index), + data = view.data; - this.hasChanges(false); + if (property) { + data = utils.nested(data, property); } - this.store('views.' + view.index, view.exportView()); + return utils.copy(data); + }, - if (view.isNew) { - view.isNew = false; + /** + * Sets data to the specified view. + * + * @param {String} index - Index of a view whose data will be replaced. + * @param {Object} data - New view data. + * @returns {Bookmarks} Chainable. + */ + setViewData: function (index, data) { + var path = this.getViewPath(index) + '.data'; - view.active(true); - } + this.set(path, utils.copy(data)); return this; }, /** - * Activates specified view and applies its' data. + * Starts editing of a specified view. * - * @param {(View|String)} view - View to be applied. + * @param {String} index - Index of a view. * @returns {Bookmarks} Chainable. */ - applyView: function (view) { - if (typeof view === 'string') { - view = this.elems.findWhere({ - index: view - }); + editView: function (index) { + this.editing = index; + + return this; + }, + + /** + * Ends editing of specified view + * and restores its' label. + * + * @param {String} index - Index of a view. + * @returns {Bookmarks} Chainable. + */ + endEdit: function (index) { + var view; + + if (!this.isEditing(index)) { + return this; } - view.active(true); + index = index || this.editing; + view = this.getView(index); - this.activeView(view); - this.applyState('saved'); + view.value = view.label; + + this.editing = false; return this; }, /** - * Applies specified views' data on a current data object. + * Checks if specified view is in editing state. * - * @param {String} state - Defines what state shultd be used: default or saved. - * @param {String} [path] - Path to the property whose value - * will be inserted to a current data object. - * @returns {Bookmarks} Chainable. + * @param {String} index - Index of a view to be checked. + * @returns {Bollean} */ - applyState: function (state, path) { - var view, - value; + isEditing: function (index) { + return this.editing === index; + }, - view = state === 'default' ? - this.defaultView : - this.activeView(); + /** + * Generates label unique among present views, based + * on the incoming label pattern. + * + * @param {String} [label=this.newViewLabel] - Label pattern. + * @param {String} [exclude] + * @returns {String} + */ + uniqueLabel: function (label, exclude) { + var labels = _.pluck(this.views, 'label'), + hasParenth = _.last(label) === ')', + index = 2, + result, + suffix; - path = removeStateNs(path); - value = view.getData(path); + labels = _.without(labels, exclude); + result = label = label || this.newViewLabel; - if (!_.isUndefined(value)) { - path = path ? 'current.' + path : 'current'; + for (index = 2; _.contains(labels, result); index++) { + suffix = '(' + index + ')'; - this.set(path, value); + if (!hasParenth) { + suffix = ' ' + suffix; + } + + result = label + suffix; } + return result; + }, + + /** + * Applies state of a specified view, without + * making it active. + * + * @param {String} [state=this.activeIndex] + * @param {String} [property] + * @returns {Bookmarks} Chainable. + */ + applyStateOf: function (state, property) { + var index = state || this.activeIndex, + dataPath = removeStateNs(property), + viewData = this.getViewData(index, dataPath); + + dataPath = dataPath ? + 'current.' + dataPath : + 'current'; + + this.set(dataPath, viewData); + return this; }, /** - * Saves current data state. + * Saves current state. * * @returns {Bookmarks} Chainable. */ - saveSate: function () { + saveState: function () { this.store('current'); return this; }, /** - * Defines whether current state is different - * from a saved state of an active view. + * Applies state of an active view. + * + * @returns {Bookmarks} Chainable. + */ + resetState: function () { + this.applyStateOf(this.activeIndex); + + return this; + }, + + /** + * Checks if current state is different + * from the state of an active view. * * @returns {Bookmarks} Chainable. */ - checkChanges: function () { - var view = this.activeView(), - diff = utils.compare(view.getData(), this.current); + checkState: function () { + var viewData = this.getViewData(this.activeIndex), + diff = utils.compare(viewData, this.current); - this.hasChanges(!diff.equal); + this.hasChanges = !diff.equal; return this; }, /** - * Resets current state to a saved state of an active view. + * Returns path to the view instance, + * based on a provided index. + * + * @param {String} index - Index of a view. + * @returns {String} + */ + getViewPath: function (index) { + return 'views.' + index; + }, + + /** + * Updates the array of views. + * + * @returns {Bookmarks} Chainable + */ + updateArray: function () { + this.viewsArray = _.values(this.views); + + return this; + }, + + /** + * Shows custom view field and creates unique label for it. + * + * @returns {Bookmarks} Chainable. + */ + showCustom: function () { + this.customLabel = this.uniqueLabel(); + this.customVisible = true; + + return this; + }, + + /** + * Hides custom view field. * * @returns {Bookmarks} Chainable. */ - discardChanges: function () { - this.applyState('saved'); + hideCustom: function () { + this.customVisible = false; + + return this; + }, + + /** + * Checks if custom view field is visible. + * + * @returns {Boolean} + */ + isCustomVisible: function () { + return this.customVisible; + }, + + /** + * Creates new view instance with a label specified + * in a custom view field. + * + * @returns {Bookmarks} Chainable. + */ + applyCustom: function () { + var label = this.customLabel.trim(); + + this.hideCustom() + .addView({ + label: this.uniqueLabel(label) + }, true, true); return this; }, @@ -324,54 +548,37 @@ define([ * @returns {Bookmarks} Chainbale. */ _defaultPolyfill: function () { - var view = this.defaultView, - data = view.data; - - if (!_.size(data.items)) { - data.items = utils.copy(this.current); + var data = this.getViewData(this.defaultIndex); - this.store('views.' + view.index, view.exportView()); + if (!_.size(data)) { + this.setViewData(this.defaultIndex, this.current) + .saveView(this.defaultIndex); } this.defaultDefined = true; - this.checkChanges(); - return this; }, /** * Listener of the activeIndex property. - * - * @param {String} index - Index of the active view. */ - onActiveIndexChange: function (index) { - this.store('activeIndex') - .applyView(index); + onActiveIndexChange: function () { + this.activeView = this.getActiveView(); + + this.store('activeIndex'); }, /** - * Listens changes of a current data object. + * Listener of the activeIndex property. */ onStateChange: function () { - this.saveSate(); - - if (this.activeView()) { - this.checkChanges(); - } + this.checkState(); + this.saveState(); if (!this.defaultDefined) { this._defaultPolyfill(); } - }, - - /** - * Lsitens changes of the views' 'editing' property. - */ - onEditingChange: function (view, isEditing) { - if (!isEditing && view.isNew) { - this.removeView(view); - } } }); }); diff --git a/app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/storage.js b/app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/storage.js index ac0656ec5a4636d838f293fbd76f9c3e736de5ae..48d3e7fa73dac505e4da849a61f1b99d0ff1cc79 100644 --- a/app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/storage.js +++ b/app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/storage.js @@ -5,8 +5,8 @@ define([ 'jquery', 'mageUtils', - 'Magento_Ui/js/lib/storage', - 'Magento_Ui/js/lib/class' + 'Magento_Ui/js/lib/core/storage', + 'uiClass' ], function ($, utils, storage, Class) { 'use strict'; diff --git a/app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/view.js b/app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/view.js deleted file mode 100644 index afd5d4276de442947da6755cf208f191268226d3..0000000000000000000000000000000000000000 --- a/app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/view.js +++ /dev/null @@ -1,161 +0,0 @@ -/** - * Copyright © 2015 Magento. All rights reserved. - * See COPYING.txt for license details. - */ -define([ - 'uiComponent', - 'mageUtils' -], function (Component, utils) { - 'use strict'; - - return Component.extend({ - defaults: { - template: 'ui/grid/controls/bookmarks/view', - value: '${ $.isNew ? "" : $.label }', - active: false, - editable: true, - editing: false, - isNew: false, - statesProvider: '${ $.parentName }', - exports: { - active: 'onActivate' - }, - listens: { - 'editing value': 'syncLabel', - '${ $.statesProvider }:activeIndex': 'onActiveChange' - }, - modules: { - states: '${ $.statesProvider }' - } - }, - - /** - * Initializes view component. - * - * @returns {View} Chainable. - */ - initialize: function () { - this._super(); - - this.data = { - label: this.label(), - items: this.data || {} - }; - - return this; - }, - - /** - * Creates observable properties. - * - * @returns {View} Chainable. - */ - initObservable: function () { - this._super() - .observe('active label value editing'); - - return this; - }, - - /** - * Retrieves copied views' data. - * - * @param {String} [path] - Path to the specific property. - * @returns {*} - */ - getData: function (path) { - var data = this.data.items; - - if (path) { - data = utils.nested(data, path); - } - - return utils.copy(data); - }, - - /** - * Replaces current data with a provided one. - * - * @param {Object} data - New data object. - * @returns {View} Chainable. - */ - setData: function (data) { - if (this.editable) { - this.set('data.items', utils.copy(data)); - } - - return this; - }, - - /** - * Sets new label. - * - * @returns {View} Chainable. - */ - syncLabel: function () { - var label = this.value(); - - label = label.trim() || this.data.label; - - this.label(label); - this.value(label); - - this.data.label = label; - - return this; - }, - - /** - * Sets 'editing' flag to true. - * - * @returns {View} Chainable. - */ - startEdit: function () { - this.editing(true); - - return this; - }, - - /** - * Sets 'editing' flag to false. - * - * @returns {View} Chainable. - */ - endEdit: function () { - this.editing(false); - - return this; - }, - - /** - * Returns views' data including 'label' and 'index' properties. - * - * @returns {Object} - */ - exportView: function () { - return { - index: this.index, - label: this.label(), - data: this.data.items - }; - }, - - /** - * Listener of the 'active' property. - */ - onActivate: function (active) { - if (active) { - this.states('set', 'activeIndex', this.index); - } - }, - - /** - * Listener of the collections' active index value. - */ - onActiveChange: function (index) { - if (index !== this.index) { - this.active(false); - } - } - }); -}); diff --git a/app/code/Magento/Ui/view/base/web/js/grid/controls/columns.js b/app/code/Magento/Ui/view/base/web/js/grid/controls/columns.js index 4673bedd251f7a8b3ac778b40985bff8ed7a5eb0..9965231c535ef211cf963f71155b9a2fc83a3af0 100644 --- a/app/code/Magento/Ui/view/base/web/js/grid/controls/columns.js +++ b/app/code/Magento/Ui/view/base/web/js/grid/controls/columns.js @@ -6,21 +6,18 @@ define([ 'underscore', 'mageUtils', 'mage/translate', - 'uiComponent' -], function (_, utils, $t, Component) { + 'uiCollection' +], function (_, utils, $t, Collection) { 'use strict'; - return Component.extend({ + return Collection.extend({ defaults: { template: 'ui/grid/controls/columns', minVisible: 1, maxVisible: 30, viewportSize: 18, - columnsData: { - container: 'elems' - }, imports: { - addColumns: '${ $.columnsData.provider }:${ $.columnsData.container }' + addColumns: '${ $.columnsData.provider }:elems' }, templates: { headerMsg: $t('${ $.visible } out of ${ $.total } visible') @@ -44,7 +41,7 @@ define([ * @returns {Columns} Chainable. */ cancel: function () { - this.elems.each('applyState', 'saved', 'visible'); + this.elems.each('applyState', '', 'visible'); return this; }, @@ -86,7 +83,7 @@ define([ isDisabled: function (elem) { var visible = this.countVisible(); - return elem.visible() ? + return elem.visible ? visible === this.minVisible : visible === this.maxVisible; }, diff --git a/app/code/Magento/Ui/view/base/web/js/grid/dnd.js b/app/code/Magento/Ui/view/base/web/js/grid/dnd.js index fbcffc466f1d01583e1b470799550a8afa78e7fe..0f10358bb7db1eeb987bcacde0b7d72bdf8198a2 100644 --- a/app/code/Magento/Ui/view/base/web/js/grid/dnd.js +++ b/app/code/Magento/Ui/view/base/web/js/grid/dnd.js @@ -212,15 +212,19 @@ define([ return this; } + if (!ko.es5.isTracked(model, 'dragover')) { + model.track('dragover'); + } + this.columns.push(column); $(column).bindings({ css: { '_dragover-left': ko.computed(function () { - return model.dragover() === 'right'; + return model.dragover === 'right'; }), '_dragover-right': ko.computed(function () { - return model.dragover() === 'left'; + return model.dragover === 'left'; }) } }); @@ -468,7 +472,7 @@ define([ 'left' : 'right'; - getModel(dropArea.target).dragover(direction); + getModel(dropArea.target).dragover = direction; }, /** @@ -477,7 +481,7 @@ define([ * @param {Object} dropArea */ dragleave: function (dropArea) { - getModel(dropArea.target).dragover(false); + getModel(dropArea.target).dragover = false; }, /** @@ -511,7 +515,7 @@ define([ dragModel = getModel(dragArea.target); getModel(this.table).insertChild(dragModel, dropModel); - dropModel.dragover(false); + dropModel.dragover = false; }, /** diff --git a/app/code/Magento/Ui/view/base/web/js/grid/editing/bulk.js b/app/code/Magento/Ui/view/base/web/js/grid/editing/bulk.js index 9fd4e7e6795eea1f7fe8e4060d7de9c1fdd00cfe..9c259144b843816b20fd65f3c97937b466105171 100644 --- a/app/code/Magento/Ui/view/base/web/js/grid/editing/bulk.js +++ b/app/code/Magento/Ui/view/base/web/js/grid/editing/bulk.js @@ -2,7 +2,7 @@ * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ - + define([ 'underscore', 'mageUtils', @@ -50,7 +50,7 @@ define([ */ initObservable: function () { this._super() - .observe({ + .track({ hasData: false }); @@ -121,7 +121,7 @@ define([ var fields = _.keys(this.getData()), hasData = !!fields.length; - this.hasData(hasData); + this.hasData = hasData; if (!this.active()) { fields = []; diff --git a/app/code/Magento/Ui/view/base/web/js/grid/editing/client.js b/app/code/Magento/Ui/view/base/web/js/grid/editing/client.js index c5bcbeee459083799d6cf29f8b668132080c6370..6651a605f05a382298e96370efe2e4f9807d662b 100644 --- a/app/code/Magento/Ui/view/base/web/js/grid/editing/client.js +++ b/app/code/Magento/Ui/view/base/web/js/grid/editing/client.js @@ -2,7 +2,7 @@ * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ - + define([ 'jquery', 'underscore', diff --git a/app/code/Magento/Ui/view/base/web/js/grid/editing/editor-view.js b/app/code/Magento/Ui/view/base/web/js/grid/editing/editor-view.js index 9bd9d5318fef5db2c341e98c18abd6ad7bf211bc..64fa58ac17ce138bcdce42e7b5fffb0cc4efb41e 100644 --- a/app/code/Magento/Ui/view/base/web/js/grid/editing/editor-view.js +++ b/app/code/Magento/Ui/view/base/web/js/grid/editing/editor-view.js @@ -25,11 +25,13 @@ define([ '<!-- /ko -->', rowTmpl: '<!-- ko with: _editor -->' + - '<!-- ko scope: formRecordName($index(), true) -->' + - '<!-- ko template: rowTmpl --><!-- /ko -->' + - '<!-- /ko -->' + - '<!-- ko if: isActive($index(), true) && isSingleEditing() -->' + - '<!-- ko template: rowButtonsTmpl --><!-- /ko -->' + + '<!-- ko if: isActive($row()._rowIndex, true) -->' + + '<!-- ko with: getRecord($row()._rowIndex, true) -->' + + '<!-- ko template: rowTmpl --><!-- /ko -->' + + '<!-- /ko -->' + + '<!-- ko if: isSingleEditing -->' + + '<!-- ko template: rowButtonsTmpl --><!-- /ko -->' + + '<!-- /ko -->' + '<!-- /ko -->' + '<!-- /ko -->' }, @@ -112,14 +114,18 @@ define([ * @returns {View} Chainable. */ initRow: function (row) { + var $editingRow; + $(row).extendCtx({ _editor: this.model }).bindings(this.rowBindings); - $(this.rowTmpl) + $editingRow = $(this.rowTmpl) .insertBefore(row) .applyBindings(row); + ko.utils.domNodeDisposal.addDisposeCallback(row, this.removeEditingRow.bind(this, $editingRow)); + return this; }, @@ -134,7 +140,10 @@ define([ return { visible: ko.computed(function () { - return !model.isActive(ctx.$index(), true); + var record = ctx.$row(), + index = record && record._rowIndex; + + return !model.isActive(index, true); }) }; }, @@ -154,6 +163,15 @@ define([ }) } }; + }, + + /** + * Removes specified array of nodes. + * + * @param {ArrayLike} row + */ + removeEditingRow: function (row) { + _.toArray(row).forEach(ko.removeNode); } }); }); diff --git a/app/code/Magento/Ui/view/base/web/js/grid/editing/editor.js b/app/code/Magento/Ui/view/base/web/js/grid/editing/editor.js index 5bfde4f5705513ebf8c30a27ff5a88e245b1ecff..38c36ae137bd0516a3fd10fca983e1a5bd2ef66b 100644 --- a/app/code/Magento/Ui/view/base/web/js/grid/editing/editor.js +++ b/app/code/Magento/Ui/view/base/web/js/grid/editing/editor.js @@ -8,17 +8,16 @@ define([ 'mageUtils', 'uiLayout', 'mage/translate', - 'uiComponent' -], function (_, utils, layout, $t, Component) { + 'uiCollection' +], function (_, utils, layout, $t, Collection) { 'use strict'; - return Component.extend({ + return Collection.extend({ defaults: { rowButtonsTmpl: 'ui/grid/editing/row-buttons', headerButtonsTmpl: 'ui/grid/editing/header-buttons', successMsg: $t('You have successfully saved your edits.'), errorsCount: 0, - canSave: true, isMultiEditing: false, isSingleEditing: false, rowsData: [], @@ -91,14 +90,14 @@ define([ */ initObservable: function () { this._super() - .observe([ - 'canSave', + .track([ 'errorsCount', 'isMultiEditing', 'isSingleEditing' ]) .observe({ - active: [], + canSave: true, + activeRecords: [], messages: [] }); @@ -253,7 +252,7 @@ define([ * @returns {Editor} Chainable. */ hide: function () { - this.active.each('active', false); + this.activeRecords.each('active', false); return this; }, @@ -304,7 +303,7 @@ define([ * @returns {Array} An array of records and theirs validation results. */ validate: function () { - return this.active.map(function (record) { + return this.activeRecords.map(function (record) { return { target: record, valid: record.isValid() @@ -327,7 +326,7 @@ define([ * @returns {Object} Collection of records data. */ getData: function () { - var data = this.active.map('getData'); + var data = this.activeRecords.map('getData'); return _.indexBy(data, this.indexField); }, @@ -340,7 +339,7 @@ define([ * @returns {Editor} Chainable. */ setData: function (data, partial) { - this.active.each('setData', data, partial); + this.activeRecords.each('setData', data, partial); return this; }, @@ -457,7 +456,7 @@ define([ isActive: function (id, isIndex) { var record = this.getRecord(id, isIndex); - return record && record.active(); + return _.contains(this.activeRecords(), record); }, /** @@ -466,7 +465,7 @@ define([ * @returns {Boolean} */ hasActive: function () { - return !!this.active().length; + return !!this.activeRecords().length; }, /** @@ -475,7 +474,7 @@ define([ * @returns {Number} */ countActive: function () { - return this.active().length; + return this.activeRecords().length; }, /** @@ -486,11 +485,11 @@ define([ countErrors: function () { var errorsCount = 0; - this.active.each(function (record) { - errorsCount += record.errorsCount(); + this.activeRecords.each(function (record) { + errorsCount += record.errorsCount; }); - this.errorsCount(errorsCount); + this.errorsCount = errorsCount; return errorsCount; }, @@ -516,10 +515,10 @@ define([ columns.each('disableAction', !!activeCount); - this.isMultiEditing(activeCount > 1); - this.isSingleEditing(activeCount === 1); + this.isMultiEditing = activeCount > 1; + this.isSingleEditing = activeCount === 1; - this.active(active); + this.activeRecords(active); return this; }, diff --git a/app/code/Magento/Ui/view/base/web/js/grid/editing/record.js b/app/code/Magento/Ui/view/base/web/js/grid/editing/record.js index a6ba6aca19bb2d537f497622883a724cc1a9854a..15baff272c94cf5849a123493af00c4f6b33b0bf 100644 --- a/app/code/Magento/Ui/view/base/web/js/grid/editing/record.js +++ b/app/code/Magento/Ui/view/base/web/js/grid/editing/record.js @@ -7,11 +7,11 @@ define([ 'underscore', 'mageUtils', 'uiLayout', - 'uiComponent' -], function (_, utils, layout, Component) { + 'uiCollection' +], function (_, utils, layout, Collection) { 'use strict'; - return Component.extend({ + return Collection.extend({ defaults: { active: true, hasChanges: false, @@ -79,7 +79,8 @@ define([ */ initObservable: function () { this._super() - .observe('active fields errorsCount hasChanges'); + .track('errorsCount hasChanges') + .observe('active fields'); return this; }, @@ -119,19 +120,18 @@ define([ var fields = this.templates.fields, field = column.editor; - if (typeof field === 'object' && field.editorType) { + if (_.isObject(field) && field.editorType) { field = utils.extend({}, fields[field.editorType], field); - } else if (typeof field == 'string') { + } else if (_.isString(field)) { field = fields[field]; } field = utils.extend({}, fields.base, field); - field = utils.template(field, { + + return utils.template(field, { record: this, column: column }, true, true); - - return field; }, /** @@ -142,7 +142,7 @@ define([ */ createFields: function (columns) { columns.forEach(function (column) { - if (column.editor && !this.getField(column.index)) { + if (column.editor && !this.hasChild(column.index)) { this.initField(column); } }, this); @@ -150,18 +150,6 @@ define([ return this; }, - /** - * Returns instance of a field found by provided identifier. - * - * @param {String} index - Identifier of a field inside record. - * @returns {Object} - */ - getField: function (index) { - return this.elems.findWhere({ - index: index - }); - }, - /** * Returns instance of a column found by provided index. * @@ -169,7 +157,7 @@ define([ * @returns {Column} */ getColumn: function (index) { - return this.columns().getColumn(index); + return this.columns().getChild(index); }, /** @@ -292,7 +280,7 @@ define([ countErrors: function () { var errorsCount = this.elems.filter('error').length; - this.errorsCount(errorsCount); + this.errorsCount = errorsCount; return errorsCount; }, @@ -320,7 +308,7 @@ define([ var fields; fields = this.columns().elems.map(function (column) { - return this.getField(column.index) || column; + return this.getChild(column.index) || column; }, this); this.fields(fields); @@ -336,7 +324,7 @@ define([ updateState: function () { var diff = this.checkChanges(); - this.hasChanges(!diff.equal); + this.hasChanges = !diff.equal; return this; }, diff --git a/app/code/Magento/Ui/view/base/web/js/grid/export.js b/app/code/Magento/Ui/view/base/web/js/grid/export.js index 032f5fcc36717432c9a8c0f08a41d7f9c42f5d13..cbc99b0319e818307e78c1d0bc5095f8c2de535f 100644 --- a/app/code/Magento/Ui/view/base/web/js/grid/export.js +++ b/app/code/Magento/Ui/view/base/web/js/grid/export.js @@ -5,12 +5,11 @@ define([ 'jquery', 'underscore', - 'uiComponent' -], function ($, _, Component) { + 'uiElement' +], function ($, _, Element) { 'use strict'; - return Component.extend({ - + return Element.extend({ defaults: { template: 'ui/grid/exportButton', checked: '', diff --git a/app/code/Magento/Ui/view/base/web/js/grid/filters/chips.js b/app/code/Magento/Ui/view/base/web/js/grid/filters/chips.js index a31b1fd2d50ad971f39ad8f4644d7bdb361cd095..e7617aadf955b5854f33505e4adecb83814c67cf 100644 --- a/app/code/Magento/Ui/view/base/web/js/grid/filters/chips.js +++ b/app/code/Magento/Ui/view/base/web/js/grid/filters/chips.js @@ -3,11 +3,12 @@ * See COPYING.txt for license details. */ define([ - 'uiComponent' -], function (Component) { + 'underscore', + 'uiCollection' +], function (_, Collection) { 'use strict'; - return Component.extend({ + return Collection.extend({ defaults: { template: 'ui/grid/filters/chips', stickyTmpl: 'ui/grid/sticky/chips' @@ -18,9 +19,9 @@ define([ * * @returns {Boolean} */ - hasData: function () { + hasPreviews: function () { return this.elems().some(function (elem) { - return !!elem.previews().length; + return !!elem.previews.length; }); }, @@ -30,7 +31,7 @@ define([ * @returns {Chips} Chainable. */ clear: function () { - this.elems.each('clear'); + _.invoke(this.elems(), 'clear'); return this; } diff --git a/app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js b/app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js index e90dfd5984189c933635261bcfbf9d17da9dcbe8..d58e7895654517d1a749da6ee09b34eef4bca708 100644 --- a/app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js +++ b/app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js @@ -6,8 +6,8 @@ define([ 'underscore', 'mageUtils', 'uiLayout', - 'uiComponent' -], function (_, utils, layout, Component) { + 'uiCollection' +], function (_, utils, layout, Collection) { 'use strict'; /** @@ -34,32 +34,69 @@ define([ return utils.mapRecursive(data, utils.removeEmptyValues.bind(utils)); } - return Component.extend({ + return Collection.extend({ defaults: { template: 'ui/grid/filters/filters', stickyTmpl: 'ui/grid/sticky/filters', + _processed: [], applied: { placeholder: true }, filters: { placeholder: true }, + templates: { + filters: { + base: { + parent: '${ $.$data.filters.name }', + name: '${ $.$data.column.index }', + provider: '${ $.$data.filters.name }', + dataScope: '${ $.$data.column.index }', + label: '${ $.$data.column.label }', + imports: { + visible: '${ $.$data.column.name }:visible' + } + }, + text: { + component: 'Magento_Ui/js/form/element/abstract', + template: 'ui/grid/filters/elements/input' + }, + select: { + component: 'Magento_Ui/js/form/element/select', + template: 'ui/grid/filters/elements/select', + options: '${ JSON.stringify($.$data.column.options) }', + caption: ' ' + }, + dateRange: { + component: 'Magento_Ui/js/grid/filters/range', + rangeType: 'date' + }, + textRange: { + component: 'Magento_Ui/js/grid/filters/range', + rangeType: 'text' + } + } + }, chipsConfig: { name: '${ $.name }_chips', provider: '${ $.chipsConfig.name }', component: 'Magento_Ui/js/grid/filters/chips' }, listens: { - active: 'extractPreviews', - applied: 'cancel extractActive' + active: 'updatePreviews', + applied: 'cancel updateActive' }, - links: { - applied: '${ $.storageConfig.path }' + statefull: { + applied: true }, exports: { applied: '${ $.provider }:params.filters' }, + imports: { + 'onColumnsUpdate': '${ $.columnsProvider }:elems' + }, modules: { + columns: '${ $.columnsProvider }', chips: '${ $.chipsConfig.provider }' } }, @@ -70,10 +107,11 @@ define([ * @returns {Filters} Chainable. */ initialize: function () { + _.bindAll(this, 'updateActive'); + this._super() .initChips() - .cancel() - .extractActive(); + .cancel(); return this; }, @@ -85,7 +123,7 @@ define([ */ initObservable: function () { this._super() - .observe({ + .track({ active: [], previews: [] }); @@ -107,13 +145,16 @@ define([ }, /** - * Called when another element was added to current component. + * Called when another element was added to filters collection. * * @returns {Filters} Chainable. */ - initElement: function () { - this._super() - .extractActive(); + initElement: function (elem) { + this._super(); + + elem.on('elems', this.updateActive); + + this.updateActive(); return this; }, @@ -121,15 +162,14 @@ define([ /** * Clears filters data. * - * @param {Object} [filter] - If provided, then only specified filter will be cleared. - * Otherwise, clears all data. - * + * @param {Object} [filter] - If provided, then only specified + * filter will be cleared. Otherwise, clears all data. * @returns {Filters} Chainable. */ clear: function (filter) { filter ? filter.clear() : - this.active.each('clear'); + _.invoke(this.active, 'clear'); this.apply(); @@ -158,6 +198,95 @@ define([ return this; }, + /** + * Sets provided data to filter components (without applying it). + * + * @param {Object} data - Filters data. + * @param {Boolean} [partial=false] - Flag that defines whether + * to completely replace current filters data or to extend it. + * @returns {Filters} Chainable. + */ + setData: function (data, partial) { + var filters = partial ? this.filters : {}; + + data = utils.extend({}, filters, data); + + this.set('filters', data); + + return this; + }, + + /** + * Creates instance of a filter associated with the provided column. + * + * @param {Column} column - Column component for which to create a filter. + * @returns {Filters} Chainable. + */ + addFilter: function (column) { + var index = column.index, + processed = this._processed, + filter; + + if (!column.filter || _.contains(processed, index)) { + return this; + } + + filter = this.buildFilter(column); + + processed.push(index); + + layout([filter]); + + return this; + }, + + /** + * Creates filter component configuration associated with the provided column. + * + * @param {Column} column - Column component whith a basic filter declaration. + * @returns {Object} Filters' configuration. + */ + buildFilter: function (column) { + var filters = this.templates.filters, + filter = column.filter, + type = filters[filter.filterType]; + + if (_.isObject(filter) && type) { + filter = utils.extend({}, type, filter); + } else if (_.isString(filter)) { + filter = filters[filter]; + } + + filter = utils.extend({}, filters.base, filter); + + return utils.template(filter, { + filters: this, + column: column + }, true, true); + }, + + /** + * Returns an array of range filters. + * + * @returns {Array} + */ + getRanges: function () { + return this.elems.filter(function (filter) { + return filter.isRange; + }); + }, + + /** + * Returns an array of non-range filters. + * + * @returns {Array} + */ + getPlain: function () { + return this.elems.filter(function (filter) { + return !filter.isRange; + }); + }, + /** * Tells wether specified filter should be visible. * @@ -175,7 +304,7 @@ define([ * @returns {Boolean} */ isFilterActive: function (filter) { - return this.active.contains(filter); + return _.contains(this.active, filter); }, /** @@ -193,24 +322,46 @@ define([ * * @returns {Filters} Chainable. */ - extractActive: function () { - this.active(this.elems.filter('hasData')); + updateActive: function () { + var applied = _.keys(this.applied); + + this.active = this.elems.filter(function (elem) { + return _.contains(applied, elem.index); + }); return this; }, + /** + * Returns number of applied filters. + * + * @returns {Number} + */ + countActive: function () { + return this.active.length; + }, + /** * Extract previews of a specified filters. * * @param {Array} filters - Filters to be processed. * @returns {Filters} Chainable. */ - extractPreviews: function (filters) { + updatePreviews: function (filters) { var previews = filters.map(extractPreview); - this.previews(_.compact(previews)); + this.previews = _.compact(previews); return this; + }, + + /** + * Listener of the columns provider children array changes. + * + * @param {Array} columns - Current columns list. + */ + onColumnsUpdate: function (columns) { + columns.forEach(this.addFilter, this); } }); }); diff --git a/app/code/Magento/Ui/view/base/web/js/grid/filters/group.js b/app/code/Magento/Ui/view/base/web/js/grid/filters/group.js deleted file mode 100644 index 405436d7353c4179110c65b1329bc030b48c6a70..0000000000000000000000000000000000000000 --- a/app/code/Magento/Ui/view/base/web/js/grid/filters/group.js +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Copyright © 2015 Magento. All rights reserved. - * See COPYING.txt for license details. - */ -define([ - 'underscore', - 'Magento_Ui/js/form/components/group' -], function (_, Group) { - 'use strict'; - - return Group.extend({ - defaults: { - template: 'ui/grid/filters/elements/group', - isGroup: true - }, - - reset: function () { - this.elems.each('reset'); - - return this; - }, - - clear: function () { - this.elems.each('clear'); - - return this; - }, - - hasData: function () { - return this.elems.some('hasData'); - }, - - getPreview: function () { - return this.elems.map('getPreview'); - } - }); -}); diff --git a/app/code/Magento/Ui/view/base/web/js/grid/filters/range.js b/app/code/Magento/Ui/view/base/web/js/grid/filters/range.js new file mode 100644 index 0000000000000000000000000000000000000000..361d2db07139b0bae306671ceb0fe57f4067e0f5 --- /dev/null +++ b/app/code/Magento/Ui/view/base/web/js/grid/filters/range.js @@ -0,0 +1,109 @@ +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +define([ + 'underscore', + 'uiLayout', + 'mageUtils', + 'Magento_Ui/js/form/components/group' +], function (_, layout, utils, Group) { + 'use strict'; + + return Group.extend({ + defaults: { + template: 'ui/grid/filters/elements/group', + isRange: true, + templates: { + base: { + parent: '${ $.$data.group.name }', + provider: '${ $.$data.group.provider }' + }, + date: { + component: 'Magento_Ui/js/form/element/date', + template: 'ui/grid/filters/elements/date', + dateFormat: 'MM/dd/YYYY' + }, + text: { + component: 'Magento_Ui/js/form/element/abstract', + template: 'ui/grid/filters/elements/input' + }, + ranges: { + from: { + label: 'from', + dataScope: 'from' + }, + to: { + label: 'to', + dataScope: 'to' + } + } + } + }, + + /** + * Initializes range component. + * + * @returns {Range} Chainable. + */ + initialize: function () { + this._super() + .initChildren(); + + return this; + }, + + /** + * Creates instances of child components. + * + * @returns {Range} Chainable. + */ + initChildren: function () { + var children = this.buildChildren(); + + layout(children); + + return this; + }, + + /** + * Creates configuration for the child components. + * + * @returns {Object} + */ + buildChildren: function () { + var templates = this.templates, + typeTmpl = templates[this.rangeType], + tmpl = utils.extend({}, templates.base, typeTmpl), + children = {}; + + _.each(templates.ranges, function (range, key) { + children[key] = utils.extend({}, tmpl, range); + }); + + return utils.template(children, { + group: this + }, true, true); + }, + + /** + * Clears childrens data. + * + * @returns {Range} Chainable. + */ + clear: function () { + this.elems.each('clear'); + + return this; + }, + + /** + * Checks if some children has data. + * + * @returns {Boolean} + */ + hasData: function () { + return this.elems.some('hasData'); + } + }); +}); diff --git a/app/code/Magento/Ui/view/base/web/js/grid/listing.js b/app/code/Magento/Ui/view/base/web/js/grid/listing.js index 7ec985fcf76a53dc540a4cd020b5a339b8e9065e..5b68524bc698452e7afb5bb947c8b35e8ee8a48d 100644 --- a/app/code/Magento/Ui/view/base/web/js/grid/listing.js +++ b/app/code/Magento/Ui/view/base/web/js/grid/listing.js @@ -4,21 +4,19 @@ */ define([ + 'ko', 'underscore', 'Magento_Ui/js/lib/spinner', 'uiLayout', - 'uiComponent' -], function (_, loader, layout, Component) { + 'uiCollection' +], function (ko, _, loader, layout, Collection) { 'use strict'; - return Component.extend({ + return Collection.extend({ defaults: { template: 'ui/grid/listing', stickyTmpl: 'ui/grid/sticky/listing', positions: false, - storageConfig: { - positions: '${ $.storageConfig.path }.positions' - }, dndConfig: { name: '${ $.name }_dnd', component: 'Magento_Ui/js/grid/dnd', @@ -36,18 +34,13 @@ define([ name: '${ $.name }_resize', columnsProvider: '${ $.name }', component: 'Magento_Ui/js/grid/resize', - provider: '${ $.provider }', - classResize: 'shadow-div', - divsAttrParams: { - 'data-cl-elem': 'shadow-div' - }, - enabled: true + enabled: false }, imports: { rows: '${ $.provider }:data.items' }, listens: { - elems: 'setPositions', + elems: 'updatePositions updateVisible', '${ $.provider }:reload': 'showLoader', '${ $.provider }:reloaded': 'hideLoader' }, @@ -63,19 +56,12 @@ define([ * @returns {Listing} Chainable. */ initialize: function () { - this._super(); - - if (this.resizeConfig.enabled) { - this.initResize(); - } - - if (this.dndConfig.enabled) { - this.initDnd(); - } + _.bindAll(this, 'updateVisible'); - if (this.editorConfig.enabled) { - this.initEditor(); - } + this._super() + .initDnd() + .initEditor() + .initResize(); return this; }, @@ -87,8 +73,9 @@ define([ */ initObservable: function () { this._super() - .observe({ - rows: [] + .track({ + rows: [], + visibleColumns: [] }); return this; @@ -100,18 +87,22 @@ define([ * @returns {Listing} Chainable. */ initDnd: function () { - layout([this.dndConfig]); + if (this.dndConfig.enabled) { + layout([this.dndConfig]); + } return this; }, /** - * Creates resize widget instance. + * Inititalizes resize component. * * @returns {Listing} Chainable. */ initResize: function () { - layout([this.resizeConfig]); + if (this.resizeConfig.enabled) { + layout([this.resizeConfig]); + } return this; }, @@ -122,7 +113,9 @@ define([ * @returns {Listing} Chainable. */ initEditor: function () { - layout([this.editorConfig]); + if (this.editorConfig.enabled) { + layout([this.editorConfig]); + } return this; }, @@ -132,7 +125,7 @@ define([ * * @returns {Listing} Chainable. */ - initElement: function () { + initElement: function (element) { var currentCount = this.elems().length, totalCount = this.initChildCount; @@ -140,6 +133,8 @@ define([ this.initPositions(); } + element.on('visible', this.updateVisible); + return this._super(); }, @@ -149,14 +144,9 @@ define([ * @returns {Listing} Chainable. */ initPositions: function () { - var link = { - positions: this.storageConfig.positions - }; - this.on('positions', this.applyPositions.bind(this)); - this.setLinks(link, 'imports') - .setLinks(link, 'exports'); + this.setStatefull('positions'); return this; }, @@ -166,7 +156,7 @@ define([ * * @returns {Listing} Chainable. */ - setPositions: function () { + updatePositions: function () { var positions = {}; this.elems.each(function (elem, index) { @@ -201,38 +191,34 @@ define([ }, /** - * Returns instance of a column found by provided identifier. + * Returns reference to 'visibleColumns' array. * - * @param {String} index - Columns' identifier. - * @returns {Column} + * @returns {Array} */ - getColumn: function (index) { - return this.elems.findWhere({ - index: index - }); - }, + getVisible: function () { + var observable = ko.getObservable(this, 'visibleColumns'); - /** - * Hides loader. - */ - hideLoader: function () { - loader.get(this.name).hide(); + return observable || this.visibleColumns; }, /** - * Shows loader. + * Returns total number of displayed columns in grid. + * + * @returns {Number} */ - showLoader: function () { - loader.get(this.name).show(); + countVisible: function () { + return this.visibleColumns.length; }, /** - * Returns total number of displayed columns in grid. + * Updates array of visible columns. * - * @returns {Number} + * @returns {Listing} Chainable. */ - countVisible: function () { - return this.elems.filter('visible').length; + updateVisible: function () { + this.visibleColumns = this.elems.filter('visible'); + + return this; }, /** @@ -241,7 +227,21 @@ define([ * @returns {Boolean} */ hasData: function () { - return !!this.rows().length; + return !!this.rows.length; + }, + + /** + * Hides loader. + */ + hideLoader: function () { + loader.get(this.name).hide(); + }, + + /** + * Shows loader. + */ + showLoader: function () { + loader.get(this.name).show(); } }); }); diff --git a/app/code/Magento/Ui/view/base/web/js/grid/massactions.js b/app/code/Magento/Ui/view/base/web/js/grid/massactions.js index 2e9a39b2bddd261c83c889ff1f31de99836b9544..e2273b9a1f316b22e727d639eef394e1536d47bd 100644 --- a/app/code/Magento/Ui/view/base/web/js/grid/massactions.js +++ b/app/code/Magento/Ui/view/base/web/js/grid/massactions.js @@ -18,7 +18,6 @@ define([ defaults: { template: 'ui/grid/actions', stickyTmpl: 'ui/grid/sticky/actions', - componentType: 'massaction', selectProvider: '', actions: [], noItemsMsg: $t('You haven\'t selected any items!'), diff --git a/app/code/Magento/Ui/view/base/web/js/grid/paging/paging.js b/app/code/Magento/Ui/view/base/web/js/grid/paging/paging.js index 3f8c6cd8a658c3d9f660897434d1ca026033247a..5605f8faf92417905549d02dff1ae239bad17202 100644 --- a/app/code/Magento/Ui/view/base/web/js/grid/paging/paging.js +++ b/app/code/Magento/Ui/view/base/web/js/grid/paging/paging.js @@ -8,18 +8,17 @@ define([ 'underscore', 'mageUtils', 'uiLayout', - 'uiComponent' -], function (ko, _, utils, layout, Component) { + 'uiElement' +], function (ko, _, utils, layout, Element) { 'use strict'; - return Component.extend({ + return Element.extend({ defaults: { template: 'ui/grid/paging/paging', totalTmpl: 'ui/grid/paging-total', pageSize: 20, current: 1, selectProvider: '', - componentType: 'paging', sizesConfig: { component: 'Magento_Ui/js/grid/paging/sizes', @@ -38,13 +37,13 @@ define([ exports: { pageSize: '${ $.provider }:params.paging.pageSize', - current: '${ $.provider }:params.paging.current', - pages: '${ $.provider }:data.pages' + current: '${ $.provider }:params.paging.current' }, listens: { 'pages': 'onPagesChange', - 'pageSize totalRecords': 'countPages', + 'pageSize': 'onPageSizeChange', + 'totalRecords': 'updateCounter', '${ $.provider }:params.filters': 'goFirst' }, @@ -61,7 +60,7 @@ define([ initialize: function () { this._super() .initSizes() - .countPages(); + .updateCounter(); return this; }, @@ -73,17 +72,16 @@ define([ */ initObservable: function () { this._super() - .observe([ + .track([ 'totalSelected', 'totalRecords', 'pageSize', - 'current', 'pages', - 'options' + 'current' ]); this._current = ko.pureComputed({ - read: this.current, + read: ko.getObservable(this, 'current'), /** * Validates page change according to user's input. @@ -91,10 +89,8 @@ define([ * Calls reload method then. */ write: function (value) { - value = this.normalize(value); - - this.current(value); - this._current.notifySubscribers(value); + this.setPage(value) + ._current.notifySubscribers(this.current); }, owner: this @@ -121,7 +117,7 @@ define([ * @returns {Paging} Chainable. */ setPage: function (value) { - this.current(this.normalize(value)); + this.current = this.normalize(value); return this; }, @@ -132,7 +128,7 @@ define([ * @returns {Paging} Chainable. */ next: function () { - this.setPage(this.current() + 1); + this.setPage(this.current + 1); return this; }, @@ -143,7 +139,7 @@ define([ * @returns {Paging} Chainable. */ prev: function () { - this.setPage(this.current() - 1); + this.setPage(this.current - 1); return this; }, @@ -154,7 +150,7 @@ define([ * @returns {Paging} Chainable. */ goFirst: function () { - this.current(1); + this.current = 1; return this; }, @@ -165,7 +161,7 @@ define([ * @returns {Paging} Chainable. */ goLast: function () { - this.current(this.pages()); + this.current = this.pages; return this; }, @@ -176,7 +172,7 @@ define([ * @returns {Boolean} */ isFirst: function () { - return this.current() === 1; + return this.current === 1; }, /** @@ -185,7 +181,41 @@ define([ * @returns {Boolean} */ isLast: function () { - return this.current() === this.pages(); + return this.current === this.pages; + }, + + /** + * Updates number of pages. + */ + updateCounter: function () { + this.pages = Math.ceil(this.totalRecords / this.pageSize) || 1; + + return this; + }, + + /** + * Calculates new page cursor based on the + * previous and current page size values. + * + * @returns {Number} Updated cursor value. + */ + updateCursor: function () { + var cursor = this.current - 1, + size = this.pageSize, + oldSize = this.previousSize, + delta = cursor * (oldSize - size) / size; + + delta = size > oldSize ? + Math.ceil(delta) : + Math.floor(delta); + + cursor += delta + 1; + + this.previousSize = size; + + this.setPage(cursor); + + return this; }, /** @@ -196,37 +226,28 @@ define([ * @returns {Number} */ normalize: function (value) { - var total = this.pages(); - value = +value; if (isNaN(value)) { return 1; } - return utils.inRange(Math.round(value), 1, total); + return utils.inRange(Math.round(value), 1, this.pages); }, /** - * Calculates number of pages. + * Handles changes of the page size. */ - countPages: function () { - var pages = Math.ceil(this.totalRecords() / this.pageSize()); - - this.pages(pages || 1); + onPageSizeChange: function () { + this.updateCounter() + .updateCursor(); }, /** - * Listens changes of the 'pages' property. - * Might change current page if its' value - * is greater than total amount of pages. - * - * @param {Number} pages - Total amount of pages. + * Handles changes of the pages amount. */ - onPagesChange: function (pages) { - var current = this.current; - - current(utils.inRange(current(), 1, pages)); + onPagesChange: function () { + this.updateCursor(); } }); }); diff --git a/app/code/Magento/Ui/view/base/web/js/grid/paging/sizes.js b/app/code/Magento/Ui/view/base/web/js/grid/paging/sizes.js index 62908da372266e90bba65a6f5c8dd368d42129c9..0354dd4517e8f220efb5ae9c86b4d221f7a7c616 100644 --- a/app/code/Magento/Ui/view/base/web/js/grid/paging/sizes.js +++ b/app/code/Magento/Ui/view/base/web/js/grid/paging/sizes.js @@ -6,18 +6,16 @@ define([ 'ko', 'underscore', 'mageUtils', - 'uiComponent' -], function (ko, _, utils, Component) { + 'uiElement' +], function (ko, _, utils, Element) { 'use strict'; - return Component.extend({ + return Element.extend({ defaults: { template: 'ui/grid/paging/sizes', value: 20, minSize: 1, maxSize: 999, - customVisible: false, - customValue: '', options: { '20': { value: 20, @@ -40,10 +38,9 @@ define([ label: 200 } }, - optionsArray: [], - links: { - options: '${ $.storageConfig.path }.options', - value: '${ $.storageConfig.path }.value' + statefull: { + options: true, + value: true }, listens: { value: 'onValueChange', @@ -70,16 +67,18 @@ define([ */ initObservable: function () { this._super() - .observe([ - 'optionsArray', - 'editing', + .track([ 'value', + 'editing', 'customVisible', 'customValue' - ]); + ]) + .track({ + optionsArray: [] + }); this._value = ko.pureComputed({ - read: this.value, + read: ko.getObservable(this, 'value'), /** * Validates input field prior to updating 'value' property. @@ -87,7 +86,7 @@ define([ write: function (value) { value = this.normalize(value); - this.value(value); + this.value = value; this._value.notifySubscribers(value); }, @@ -104,7 +103,7 @@ define([ * @returns {Sizes} Chainable. */ edit: function (value) { - this.editing(value); + this.editing = value; return this; }, @@ -115,7 +114,7 @@ define([ * @returns {Sizes} Chainable. */ discardEditing: function () { - var value = this.editing(); + var value = this.editing; if (value) { this.updateSize(value, value); @@ -142,7 +141,7 @@ define([ * @returns {Number} */ getFirst: function () { - return this.optionsArray()[0].value; + return this.optionsArray[0].value; }, /** @@ -162,7 +161,7 @@ define([ * @returns {Sizes} Chainable. */ setSize: function (value) { - this.value(value); + this.value = value; return this; }, @@ -283,7 +282,7 @@ define([ * @returns {Sizes} Chainable. */ showCustom: function () { - this.customVisible(true); + this.customVisible = true; return this; }, @@ -294,7 +293,7 @@ define([ * @returns {Sizes} Chainable. */ hideCustom: function () { - this.customVisible(false); + this.customVisible = false; return this; }, @@ -305,7 +304,7 @@ define([ * @returns {Sizes} Chainable. */ clearCustom: function () { - this.customValue(''); + this.customValue = ''; return this; }, @@ -316,7 +315,7 @@ define([ * @returns {Sizes} Chainable. */ applyCustom: function () { - var value = this.customValue(); + var value = this.customValue; value = this.normalize(value); @@ -333,7 +332,7 @@ define([ * @returns {Boolean} */ isCustomVisible: function () { - return this.customVisible(); + return this.customVisible; }, /** @@ -361,9 +360,7 @@ define([ updateArray: function () { var array = _.values(this.options); - array = _.sortBy(array, 'value'); - - this.optionsArray(array); + this.optionsArray = _.sortBy(array, 'value'); return this; }, @@ -375,7 +372,7 @@ define([ * @returns {Boolean} */ isEditing: function (value) { - return this.editing() === value; + return this.editing === value; }, /** @@ -385,7 +382,7 @@ define([ * @returns {Boolean} */ isSelected: function (value) { - return this.value() === value; + return this.value === value; }, /** @@ -400,8 +397,9 @@ define([ * Listener of the 'options' object changes. */ onSizesChange: function () { - this.editing(false) - .updateArray(); + this.editing = false; + + this.updateArray(); } }); }); diff --git a/app/code/Magento/Ui/view/base/web/js/grid/provider.js b/app/code/Magento/Ui/view/base/web/js/grid/provider.js index f665319bdc1671181c4b84efaa02211bdd7ae343..9232347df8337c34a52bde3e76597c6c9f9c830e 100644 --- a/app/code/Magento/Ui/view/base/web/js/grid/provider.js +++ b/app/code/Magento/Ui/view/base/web/js/grid/provider.js @@ -7,13 +7,13 @@ define([ 'jquery', 'underscore', 'mageUtils', - 'uiComponent', + 'uiElement', 'Magento_Ui/js/modal/alert', 'mage/translate' -], function ($, _, utils, Component, alert, $t) { +], function ($, _, utils, Element, alert, $t) { 'use strict'; - return Component.extend({ + return Element.extend({ defaults: { listens: { params: 'reload' @@ -26,7 +26,7 @@ define([ * @returns {Provider} Chainable. */ initialize: function () { - utils.limit(this, 'reload', 200); + utils.limit(this, 'reload', 300); _.bindAll(this, 'onReload'); return this._super(); @@ -40,7 +40,7 @@ define([ initConfig: function () { this._super(); - _.extend(this.data, { + this.setData({ items: [], totalRecords: 0 }); @@ -48,20 +48,39 @@ define([ return this; }, + /** + * + * @param {Object} data + * @returns {Provider} Chainable. + */ + setData: function (data) { + data = this.processData(data); + + this.set('data', data); + + return this; + }, + /** * Reloads data with current parameters. */ reload: function () { this.trigger('reload'); - $.ajax({ - url: this.update_url, + if (this.request && this.request.readyState !== 4) { + this.request.abort(); + } + + this.request = $.ajax({ + url: this['update_url'], method: 'GET', data: this.get('params'), dataType: 'json' - }) - .error(this.onError) - .done(this.onReload); + }); + + this.request + .done(this.onReload) + .error(this.onError); }, /** @@ -83,7 +102,11 @@ define([ /** * Handles reload error. */ - onError: function () { + onError: function (xhr) { + if (xhr.statusText === 'abort') { + return; + } + alert({ content: $t('Something went wrong.') }); @@ -95,9 +118,7 @@ define([ * @param {Object} data - Retrieved data object. */ onReload: function (data) { - data = this.processData(data); - - this.set('data', data) + this.setData(data) .trigger('reloaded'); } }); diff --git a/app/code/Magento/Ui/view/base/web/js/grid/resize.js b/app/code/Magento/Ui/view/base/web/js/grid/resize.js index cef9cb707cf7d064cea50b21c89142009fb0c087..7f2b6cb26a0f4bca83c31f1a2fcb928941933ef5 100644 --- a/app/code/Magento/Ui/view/base/web/js/grid/resize.js +++ b/app/code/Magento/Ui/view/base/web/js/grid/resize.js @@ -10,11 +10,11 @@ define([ 'mageUtils', 'uiRegistry', 'Magento_Ui/js/lib/ko/extender/bound-nodes', - 'uiComponent' -], function ($, ko, _, utils, registry, boundedNodes, Component) { + 'uiElement' +], function ($, ko, _, utils, registry, boundedNodes, Element) { 'use strict'; - return Component.extend({ + return Element.extend({ defaults: { rootSelector: '${ $.columnsProvider }:.admin__data-grid-wrap', tableSelector: '${ $.rootSelector } -> table.data-grid', @@ -37,6 +37,7 @@ define([ visibleClass: '_resize-visible', cellContentElement: 'div.data-grid-cell-content', minColumnWidth: 40, + layoutFixedPolyfillIterator: 0, windowResize: false, resizable: false, resizeConfig: { @@ -92,6 +93,12 @@ define([ $(window).resize(this.checkAfterResize); } + //TODO - Must be deleted when Firefox fixed problem with table-layout: fixed + //ticket to Firefox: https://bugs.webkit.org/show_bug.cgi?id=90068 + if (navigator.userAgent.search(/Firefox/) > -1) { + this._layoutFixedPolyfill(); + } + $(table).addClass(this.fixedLayoutClass); return this; @@ -224,21 +231,27 @@ define([ this.refreshLastColumn(column); this.preprocessingWidth(); - //TODO - Must be deleted when Firefox fixed problem with table-layout: fixed - //ticket to Firefox: https://bugs.webkit.org/show_bug.cgi?id=90068 - if (navigator.userAgent.search(/Firefox/) > -1) { - setTimeout(function () { - $(table).css('table-layout', 'auto'); - setTimeout(function () { - $(table).css('table-layout', 'fixed'); - }, 500); - }, 500); - } - model.on('visible', this.refreshLastColumn.bind(this, column)); model.on('visible', this.preprocessingWidth.bind(this)); }, + /** + * Hack for mozilla firefox + */ + _layoutFixedPolyfill: function () { + var self = this; + + setTimeout(function () { + if (self.layoutFixedPolyfillIterator < 20) { + $(window).resize(); + self.layoutFixedPolyfillIterator++; + self._layoutFixedPolyfill(); + } else { + return false; + } + }, 500); + }, + /** * Check element is resizable or not * and append resizable element to DOM @@ -531,7 +544,7 @@ define([ nextElemData = this.hasColumn(nextElemModel, false, true); if (nextElemData) { - if (nextElemModel.visible()) { + if (nextElemModel.visible) { return nextElemData; } diff --git a/app/code/Magento/Ui/view/base/web/js/grid/search/search.js b/app/code/Magento/Ui/view/base/web/js/grid/search/search.js index 71e0570311aea9a9b4144a51340504846d7acd38..88c6bf6e4490d1d2a025b0579f0093e666bbfcfa 100644 --- a/app/code/Magento/Ui/view/base/web/js/grid/search/search.js +++ b/app/code/Magento/Ui/view/base/web/js/grid/search/search.js @@ -7,16 +7,19 @@ define([ 'uiLayout', 'mage/translate', 'mageUtils', - 'uiComponent' -], function (_, layout, $t, utils, Component) { + 'uiElement' +], function (_, layout, $t, utils, Element) { 'use strict'; - return Component.extend({ + return Element.extend({ defaults: { template: 'ui/grid/search/search', placeholder: $t('Search by keyword'), label: $t('Keyword'), value: '', + statefull: { + value: true + }, imports: { inputValue: 'value', updatePreview: 'value' @@ -24,9 +27,6 @@ define([ exports: { value: '${ $.provider }:params.search' }, - links: { - value: '${ $.storageConfig.path }' - }, modules: { chips: '${ $.chipsProvider }' } @@ -51,11 +51,8 @@ define([ */ initObservable: function () { this._super() - .observe([ - 'inputValue', - 'value' - ]) - .observe({ + .track('inputValue value') + .track({ previews: [] }); @@ -79,7 +76,7 @@ define([ * @returns {Search} Chainable. */ clear: function () { - this.value(''); + this.value = ''; return this; }, @@ -90,7 +87,7 @@ define([ * @returns {Search} Chainable. */ cancel: function () { - this.inputValue(this.value()); + this.inputValue = this.value; return this; }, @@ -103,10 +100,9 @@ define([ * @returns {Search} Chainable. */ apply: function (value) { - value = value || this.inputValue(); + value = value || this.inputValue; - this.value(value); - this.inputValue(value); + this.value = this.inputValue = value; return this; }, @@ -119,15 +115,15 @@ define([ updatePreview: function () { var preview = []; - if (this.value()) { + if (this.value) { preview.push({ elem: this, label: this.label, - preview: this.value() + preview: this.value }); } - this.previews(preview); + this.previews = preview; return this; } diff --git a/app/code/Magento/Ui/view/base/web/js/grid/sticky/sticky.js b/app/code/Magento/Ui/view/base/web/js/grid/sticky/sticky.js index e779851a9315625ebe3b60f5c09c8769098139d1..8daa9999633ac16af713551813a11e9128ecb522 100644 --- a/app/code/Magento/Ui/view/base/web/js/grid/sticky/sticky.js +++ b/app/code/Magento/Ui/view/base/web/js/grid/sticky/sticky.js @@ -58,6 +58,7 @@ define([ 'initListingNode', 'initToolbarNode', 'initContainerNode', + 'initColumns', 'initStickyListingNode', 'initStickyToolbarNode', 'initLeftDataGridCap', @@ -89,7 +90,7 @@ define([ */ initObservable: function () { this._super() - .observe(['visible']); + .track('visible'); return this; }, @@ -104,7 +105,7 @@ define([ return; } this.listingNode = $(node); - this.columns = this.listingNode.find(this.columnSelector); + $.async(this.columnSelector, node, this.initColumns); }, /** @@ -155,6 +156,14 @@ define([ this.initRightDataGridCap); }, + /** + * Init columns (each time when amount of columns is changed) + * + */ + initColumns: function () { + this.columns = this.listingNode.find(this.columnSelector); + }, + /** * Init left DataGridCap * @@ -237,7 +246,7 @@ define([ this.checkPos(); } - if (this.visible()) { + if (this.visible) { this.checkTableElemsWidth(); if (this.flags.originalWidthChanged) { @@ -364,13 +373,22 @@ define([ return this.otherStickyElsSize; }, + /** + * Get original bulk row height, if is visible + * + * @returns {Number}. + */ + getBulkRowHeight: function () { + return this.listingNode.find(this.bulkRowSelector).filter(':visible').height(); + }, + /** * Get top Y coord of the sticky header * * @returns {Number}. */ getListingTopYCoord: function () { - var bulkRowHeight = (this.listingNode.find(this.bulkRowSelector) || {}).height(); + var bulkRowHeight = this.getBulkRowHeight(); return this.listingNode.find('tbody').offset().top - this.containerNode.height() - @@ -387,8 +405,8 @@ define([ var stickyTopCondition = this.getListingTopYCoord() - this.getOtherStickyElementsSize(), stickyBottomCondition = this.listingNode.offset().top + this.listingNode.height() - - $(window).scrollTop() - - (this.listingNode.find(this.bulkRowSelector) || {}).height() - + $(window).scrollTop() + + this.getBulkRowHeight() - this.getOtherStickyElementsSize(); return stickyTopCondition < 0 && stickyBottomCondition > 0; @@ -449,9 +467,12 @@ define([ */ resizeBulk: function () { var bulk = this.containerNode.find(this.bulkRowHeaderSelector)[0]; - if (bulk){ + + if (bulk) { $(bulk).innerWidth(this.getListingWidth()); } + + return this; }, /** @@ -542,7 +563,7 @@ define([ * @returns {Object} Chainable. */ toggleContainerVisibility: function () { - this.visible(!this.visible()); + this.visible = !this.visible; return this; }, @@ -553,7 +574,7 @@ define([ * @returns {Boolean} whether the visibility of the sticky header was toggled. */ checkPos: function () { - var isSticky = this.visible(), + var isSticky = this.visible, mustBeSticky = this.getMustBeSticky(), needChange = isSticky !== mustBeSticky; diff --git a/app/code/Magento/Ui/view/base/web/js/lib/component/core.js b/app/code/Magento/Ui/view/base/web/js/lib/component/core.js deleted file mode 100644 index 65eca7b967d7a31cb7ad750cd213ee051ad0898c..0000000000000000000000000000000000000000 --- a/app/code/Magento/Ui/view/base/web/js/lib/component/core.js +++ /dev/null @@ -1,184 +0,0 @@ -/** - * Copyright © 2015 Magento. All rights reserved. - * See COPYING.txt for license details. - */ -define([ - 'underscore', - 'uiRegistry', - 'Magento_Ui/js/lib/storage' -], function (_, registry) { - 'use strict'; - - return { - defaults: { - template: 'ui/collection', - registerNodes: true, - ignoreTmpls: { - childDefaults: true - }, - storageConfig: { - provider: 'localStorage', - namespace: '${ $.name }', - path: '${ $.storageConfig.provider }:${ $.storageConfig.namespace }' - }, - modules: { - storage: '${ $.storageConfig.provider }' - }, - componentType: 'container' - }, - - /** - * Initializes component. - * - * @returns {Component} Chainable. - */ - initialize: function () { - this._super() - .initProperties() - .initObservable() - .initModules() - .initUnique() - .setListeners(this.listens) - .initLinks(); - - return this; - }, - - /** - * Defines various properties. - * - * @returns {Component} Chainable. - */ - initProperties: function () { - _.extend(this, { - source: registry.get(this.provider), - containers: [], - _elems: [] - }); - - return this; - }, - - /** - * Initializes observable properties. - * - * @returns {Component} Chainable. - */ - initObservable: function () { - this.observe({ - elems: [] - }); - - return this; - }, - - /** - * Initializes links between properties. - * - * @returns {Component} Chainbale. - */ - initLinks: function () { - this.setLinks(this.links, 'imports') - .setLinks(this.links, 'exports'); - - _.each({ - exports: this.exports, - imports: this.imports - }, this.setLinks, this); - - return this; - }, - - /** - * Parses 'modules' object and creates - * async wrappers on specified components. - * - * @returns {Component} Chainable. - */ - initModules: function () { - var modules = this.modules || {}; - - _.each(modules, function (component, property) { - this[property] = registry.async(component); - }, this); - - return this; - }, - - /** - * Initializes listeners of the unique property. - * - * @returns {Component} Chainable. - */ - initUnique: function () { - var update = this.onUniqueUpdate.bind(this), - uniqueNs = this.uniqueNs; - - this.hasUnique = this.uniqueProp && uniqueNs; - - if (this.hasUnique) { - this.source.on(uniqueNs, update, this.name); - } - - return this; - }, - - /** - * Called when current element was injected to another component. - * - * @param {Object} parent - Instance of a 'parent' component. - * @returns {Component} Chainable. - */ - initContainer: function (parent) { - this.containers.push(parent); - - return this; - }, - - /** - * Called when another element was added to current component. - * - * @param {Object} elem - Instance of an element that was added. - * @returns {Component} Chainable. - */ - initElement: function (elem) { - elem.initContainer(this); - - return this; - }, - - /** - * Returns path to components' template. - * @returns {String} - */ - getTemplate: function () { - return this.template; - }, - - /** - * Updates property specified in uniqueNs - * if components' unique property is set to 'true'. - * - * @returns {Component} Chainable. - */ - setUnique: function () { - var property = this.uniqueProp; - - if (this[property]()) { - this.source.set(this.uniqueNs, this.name); - } - - return this; - }, - - /** - * Callback which fires when property under uniqueNs has changed. - */ - onUniqueUpdate: function (name) { - var active = name === this.name, - property = this.uniqueProp; - - this[property](active); - } - }; -}); diff --git a/app/code/Magento/Ui/view/base/web/js/lib/component/main.js b/app/code/Magento/Ui/view/base/web/js/lib/component/main.js deleted file mode 100644 index a48220b0194dc4e8c41e1ed7af3e0a3c16f38cbc..0000000000000000000000000000000000000000 --- a/app/code/Magento/Ui/view/base/web/js/lib/component/main.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - * Copyright © 2015 Magento. All rights reserved. - * See COPYING.txt for license details. - */ -define([ - 'mageUtils', - './core', - './links', - './manip', - './traversal', - './provider', - 'uiClass', - 'Magento_Ui/js/lib/ko/initialize' -], function (utils, core, links, manip, traversal, provider, Class) { - 'use strict'; - - var extenders; - - extenders = utils.extend({}, core, links, manip, traversal, provider); - - return Class.extend(extenders); -}); diff --git a/app/code/Magento/Ui/view/base/web/js/lib/component/manip.js b/app/code/Magento/Ui/view/base/web/js/lib/component/manip.js deleted file mode 100644 index 8bc3f881796a8d50ce31e9a59e44ff0f80fbb49c..0000000000000000000000000000000000000000 --- a/app/code/Magento/Ui/view/base/web/js/lib/component/manip.js +++ /dev/null @@ -1,197 +0,0 @@ -/** - * Copyright © 2015 Magento. All rights reserved. - * See COPYING.txt for license details. - */ -define([ - 'ko', - 'underscore', - 'mageUtils', - 'uiRegistry' -], function (ko, _, utils, registry) { - 'use strict'; - - /** - * Removes non plain object items from the specfied array. - * - * @param {Array} container - Array whose value should be filtered. - * @returns {Array} - */ - function compact(container) { - return container.filter(utils.isObject); - } - - return { - /** - * Retrieves requested region. - * Creates region if it was not created yet - * - * @returns {ObservableArray}. - */ - getRegion: function (name) { - var regions = this.regions = this.regions || {}; - - if (!regions[name]) { - regions[name] = ko.observable([]); - } - - return regions[name]; - }, - - /** - * Replaces specified regions' data with a provided one. - * Creates region if it was not created yet. - * - * @param {Array} items - New regions' data. - * @param {String} name - Name of the region. - * @returns {Component} Chainable. - */ - updateRegion: function (items, name) { - var region = this.getRegion(name); - - region(items); - - return this; - }, - - /** - * Requests specified components to insert - * them into 'elems' array starting from provided position. - * - * @param {(String|Array)} elems - Name of the component to insert. - * @param {Number} [position=-1] - Position at which to insert elements. - * @returns {Component} Chainable. - */ - insertChild: function (elems, position) { - var container = this._elems, - insert = this._insert.bind(this), - update; - - if (!Array.isArray(elems)) { - elems = [elems]; - } - - elems.map(function (item) { - return item.elem ? - utils.insert(item.elem, container, item.position) : - utils.insert(item, container, position); - }).forEach(function (item) { - if (item === true) { - update = true; - } else if (_.isString(item)) { - registry.get(item, insert); - } else if (utils.isObject(item)) { - insert(item); - } - }); - - if (update) { - this._update(); - } - - return this; - }, - - /** - * Removes specified element from the 'elems' array. - * - * @param {Object} elem - Element to be removed. - * @returns {Component} Chainable. - */ - removeChild: function (elem) { - utils.remove(this._elems, elem); - this._update(); - - return this; - }, - - /** - * Destroys current instance along with all of its' children. - */ - destroy: function () { - this._dropHandlers() - ._clearData() - ._clearRefs(); - }, - - /** - * Removes events listeners. - * @private - * - * @returns {Component} Chainable. - */ - _dropHandlers: function () { - this.off(); - - this.source.off(this.name); - - return this; - }, - - /** - * Clears all data associated with component. - * @private - * - * @returns {Component} Chainable. - */ - _clearData: function () { - this.source.remove(this.dataScope); - this.source.remove('params.' + this.name); - - return this; - }, - - /** - * Removes all references to current instance and - * calls 'destroy' method on all of its' children. - * @private - * - * @returns {Component} Chainable. - */ - _clearRefs: function () { - registry.remove(this.name); - - this.containers.forEach(function (parent) { - parent.removeChild(this); - }, this); - - this.elems.each('destroy'); - - return this; - }, - - /** - * Inserts provided component into 'elems' array at a specified position. - * @private - * - * @param {Object} elem - Element to insert. - */ - _insert: function (elem) { - var index = this._elems.indexOf(elem.name); - - if (~index) { - this._elems[index] = elem; - } - - this._update() - .initElement(elem); - }, - - /** - * Synchronizes multiple elements arrays with a core '_elems' container. - * Performs elemets grouping by theirs 'displayArea' property. - * @private - * - * @returns {Component} Chainable. - */ - _update: function () { - var _elems = compact(this._elems), - grouped = _.groupBy(_elems, 'displayArea'); - - _.each(grouped, this.updateRegion, this); - - this.elems(_elems); - - return this; - } - }; -}); diff --git a/app/code/Magento/Ui/view/base/web/js/lib/component/provider.js b/app/code/Magento/Ui/view/base/web/js/lib/component/provider.js deleted file mode 100644 index c6c1c195186c775c19594040d632be143665fe89..0000000000000000000000000000000000000000 --- a/app/code/Magento/Ui/view/base/web/js/lib/component/provider.js +++ /dev/null @@ -1,193 +0,0 @@ -/** - * Copyright © 2015 Magento. All rights reserved. - * See COPYING.txt for license details. - */ -define([ - 'ko', - 'underscore', - 'mageUtils' -], function (ko, _, utils) { - 'use strict'; - - /** - * Wrapper for ko.observable and ko.observableArray. - * Assignes one or another ko property to obj[key] - * - * @param {Object} obj - object to store property to - * @param {String} key - key - * @param {*} value - initial value of observable - */ - function observe(obj, key, value) { - var method = Array.isArray(value) ? 'observableArray' : 'observable'; - - if (_.isFunction(obj[key]) && !ko.isObservable(obj[key])) { - return; - } - - if (ko.isObservable(obj[key])) { - if (ko.isObservable(value)) { - value = value(); - } - - obj[key](value); - - return; - } - - obj[key] = ko[method](value); - } - - return { - /** - * Returns value of the nested property. - * - * @param {String} path - Path to the property. - * @returns {*} Value of the property. - */ - get: function (path) { - return utils.nested(this, path); - }, - - /** - * Sets provided value as a value of the specified nested property. - * Triggers changes notifications, if value has mutated. - * - * @param {String} path - Path to property. - * @param {*} value - New value of the property. - * @returns {Component} Chainable. - */ - set: function (path, value) { - var data = utils.nested(this, path), - diffs; - - if (!_.isFunction(data)) { - diffs = utils.compare(data, value, path); - - utils.nested(this, path, value); - - this._notify(diffs); - } else { - utils.nested(this, path, value); - } - - return this; - }, - - /** - * Removes nested property from the object. - * - * @param {String} path - Path to the property. - * @returns {Component} Chainable. - */ - remove: function (path) { - var data, - diffs; - - if (!path) { - return this; - } - - data = utils.nested(this, path); - - if (!_.isUndefined(data) && !_.isFunction(data)) { - diffs = utils.compare(data, undefined, path); - - utils.nestedRemove(this, path); - - this._notify(diffs); - } - - return this; - }, - - /** - * If 2 params passed, path is considered as key. - * Else, path is considered as object. - * Assignes props to this based on incoming params - * - * @param {(Object|String)} path - * @returns {Component} Chainable. - */ - observe: function (path) { - var type = typeof path; - - if (type === 'string') { - path = path.split(' '); - } - - if (Array.isArray(path)) { - path.forEach(function (key) { - observe(this, key, this[key]); - }, this); - } else if (type === 'object') { - _.each(path, function (value, key) { - observe(this, key, value); - }, this); - } - - return this; - }, - - /** - * - */ - _notify: function (diffs) { - diffs.changes.forEach(function (change) { - this.trigger(change.path, change.value, change); - }, this); - - _.each(diffs.containers, function (changes, name) { - var value = utils.nested(this, name); - - this.trigger(name, value, changes); - }, this); - }, - - /** - * - */ - restore: function () { - var ns = this.storageConfig.namespace, - storage = this.storage(); - - if (storage) { - utils.extend(this, storage.get(ns)); - } - - return this; - }, - - /** - * Stores value of the specified property in components' storage module. - * - * @param {String} property - * @param {*} [data=this[property]] - * @returns {Component} Chainable. - */ - store: function (property, data) { - var ns = this.storageConfig.namespace, - path = utils.fullPath(ns, property); - - data = data || this.get(property); - - this.storage('set', path, data); - - return this; - }, - - /** - * Removes stored property. - * - * @param {String} property - Property to be removed from storage. - * @returns {Component} Chainable. - */ - removeStored: function (property) { - var ns = this.storageConfig.namespace, - path = utils.fullPath(ns, property); - - this.storage('remove', path); - - return this; - } - }; -}); diff --git a/app/code/Magento/Ui/view/base/web/js/lib/component/traversal.js b/app/code/Magento/Ui/view/base/web/js/lib/component/traversal.js deleted file mode 100644 index cb17ce3e2de78d0120d14ef3078e23109080e088..0000000000000000000000000000000000000000 --- a/app/code/Magento/Ui/view/base/web/js/lib/component/traversal.js +++ /dev/null @@ -1,76 +0,0 @@ -/** - * Copyright © 2015 Magento. All rights reserved. - * See COPYING.txt for license details. - */ -define([ - 'underscore', - 'Magento_Ui/js/lib/events' -], function (_, EventsBus) { - 'use strict'; - - return _.extend({}, EventsBus, { - /** - * Tries to call specified method of a current component, - * otherwise delegates attempt to its' children. - * - * @param {String} target - Name of the method. - * @param [...] Arguments that will be passed to method. - * @returns {*} Result of the method calls. - */ - delegate: function (target) { - var args = _.toArray(arguments); - - target = this[target]; - - if (_.isFunction(target)) { - return target.apply(this, args.slice(1)); - } - - return this._delegate(args); - }, - - /** - * Calls 'delegate' method of all of it's children components. - * @private - * - * @param {Array} args - An array of arguments to pass to the next delegation call. - * @returns {Array} An array of delegation resutls. - */ - _delegate: function (args) { - var result; - - result = this.elems.map(function (elem) { - return elem.delegate.apply(elem, args); - }); - - return _.flatten(result); - }, - - /** - * Overrides 'EventsBus.trigger' method to implement events bubbling. - * - * @param {String} name - Name of the event. - * @param [...] Any number of arguments that should be to the events' handler. - * @returns {Boolean} False if event bubbling was canceled. - */ - bubble: function () { - var args = _.toArray(arguments), - bubble = this.trigger.apply(this, args), - result; - - if (!bubble) { - return false; - } - - this.containers.forEach(function (parent) { - result = parent.bubble.apply(parent, args); - - if (result === false) { - bubble = false; - } - }); - - return !!bubble; - } - }); -}); diff --git a/app/code/Magento/Ui/view/base/web/js/lib/class.js b/app/code/Magento/Ui/view/base/web/js/lib/core/class.js similarity index 87% rename from app/code/Magento/Ui/view/base/web/js/lib/class.js rename to app/code/Magento/Ui/view/base/web/js/lib/core/class.js index 12b70b4a45cb1fcc881ca0c1d5a5945b19e0442f..4aab2423cd593909d962b9316d8fea5747d4ec27 100644 --- a/app/code/Magento/Ui/view/base/web/js/lib/class.js +++ b/app/code/Magento/Ui/view/base/web/js/lib/core/class.js @@ -20,7 +20,7 @@ define([ * @returns {*} Value of the property or false. */ function getOwn(obj, prop) { - return obj.hasOwnProperty(prop) && obj[prop]; + return _.isObject(obj) && obj.hasOwnProperty(prop) && obj[prop]; } /** @@ -34,13 +34,14 @@ define([ var constr = consturctor; if (!constr) { + /** * Default constructor function. */ constr = function () { var obj = this; - if (!obj || !Object.getPrototypeOf(obj) === constr.prototype) { + if (!_.isObject(obj) || Object.getPrototypeOf(obj) !== constr.prototype) { obj = Object.create(constr.prototype); } @@ -57,6 +58,7 @@ define([ } Class = createConstructor({ + /** * Entry point to the initialization of consturctors' instance. * @@ -112,10 +114,10 @@ define([ parentProto = parent.prototype, childProto = Object.create(parentProto), child = createConstructor(childProto, getOwn(extender, 'constructor')), - defaults = extender.defaults || {}; + defaults; - defaults = defaults || {}; extender = extender || {}; + defaults = extender.defaults; delete extender.defaults; @@ -123,10 +125,16 @@ define([ childProto[name] = wrapper.wrapSuper(parentProto[name], method); }); + child.defaults = utils.extend({}, parent.defaults || {}); + + if (defaults) { + utils.extend(child.defaults, defaults); + extender.defaults = defaults; + } + return _.extend(child, { __super__: parentProto, - extend: parent.extend, - defaults: utils.extend({}, parent.defaults, defaults) + extend: parent.extend }); } diff --git a/app/code/Magento/Ui/view/base/web/js/lib/core/collection.js b/app/code/Magento/Ui/view/base/web/js/lib/core/collection.js new file mode 100644 index 0000000000000000000000000000000000000000..5cac8edb895d7b81447342aeac5f7a19a8225b30 --- /dev/null +++ b/app/code/Magento/Ui/view/base/web/js/lib/core/collection.js @@ -0,0 +1,289 @@ +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +define([ + 'underscore', + 'mageUtils', + 'uiRegistry', + 'uiElement' +], function (_, utils, registry, Element) { + 'use strict'; + + /** + * Removes non plain object items from the specfied array. + * + * @param {Array} container - Array whose value should be filtered. + * @returns {Array} + */ + function compact(container) { + return container.filter(utils.isObject); + } + + return Element.extend({ + defaults: { + template: 'ui/collection', + _elems: [], + ignoreTmpls: { + childDefaults: true + } + }, + + /** + * Initializes observable properties. + * + * @returns {Model} Chainable. + */ + initObservable: function () { + this._super() + .observe({ + elems: [] + }); + + return this; + }, + + /** + * Called when another element was added to current component. + * + * @param {Object} elem - Instance of an element that was added. + * @returns {Collection} Chainable. + */ + initElement: function (elem) { + elem.initContainer(this); + + return this; + }, + + /** + * Returns instance of a child found by provided index. + * + * @param {String} index - Index of a child. + * @returns {Object} + */ + getChild: function (index) { + return _.findWhere(this.elems(), { + index: index + }); + }, + + /** + * Requests specified components to insert + * them into 'elems' array starting from provided position. + * + * @param {(String|Array)} elems - Name of the component to insert. + * @param {Number} [position=-1] - Position at which to insert elements. + * @returns {Collection} Chainable. + */ + insertChild: function (elems, position) { + var container = this._elems, + insert = this._insert.bind(this), + update; + + if (!Array.isArray(elems)) { + elems = [elems]; + } + + elems.map(function (item) { + return item.elem ? + utils.insert(item.elem, container, item.position) : + utils.insert(item, container, position); + }).forEach(function (item) { + if (item === true) { + update = true; + } else if (_.isString(item)) { + registry.get(item, insert); + } else if (utils.isObject(item)) { + insert(item); + } + }); + + if (update) { + this._updateCollection(); + } + + return this; + }, + + /** + * Removes specified child from collection. + * + * @param {(Object|String)} elem - Child or index of a child to be removed. + * @returns {Collection} Chainable. + */ + removeChild: function (elem) { + if (_.isString(elem)) { + elem = this.getChild(elem); + } + + if (elem) { + utils.remove(this._elems, elem); + this._updateCollection(); + } + + return this; + }, + + /** + * Checks if specified child exists in collection. + * + * @param {Sring} index - Index of a child. + * @returns {Boolean} + */ + hasChild: function (index) { + return !!this.getChild(index); + }, + + /** + * Creates 'async' wrapper for the specified child + * using uiRegistry 'async' method and caches it + * in a '_requested' components object. + * + * @param {String} index - Index of a child. + * @returns {Function} Async module wrapper. + */ + requestChild: function (index) { + var name = this.formChildName(index); + + return this.requestModule(name); + }, + + /** + * Creates complete child name based on a provided index. + * + * @param {String} index - Index of a child. + * @returns {String} + */ + formChildName: function (index) { + return this.name + '.' + index; + }, + + /** + * Retrieves requested region. + * Creates region if it was not created yet + * + * @returns {ObservableArray} + */ + getRegion: function (name) { + var regions = this.regions = this.regions || {}; + + if (!regions[name]) { + regions[name] = []; + + this.observe.call(regions, name); + } + + return regions[name]; + }, + + /** + * Replaces specified regions' data with a provided one. + * Creates region if it was not created yet. + * + * @param {Array} items - New regions' data. + * @param {String} name - Name of the region. + * @returns {Collection} Chainable. + */ + updateRegion: function (items, name) { + this.getRegion(name)(items); + + return this; + }, + + /** + * Destroys collection along with its' elements. + */ + destroy: function () { + this._super(); + + this.elems.each('destroy'); + }, + + /** + * Inserts provided component into 'elems' array at a specified position. + * @private + * + * @param {Object} elem - Element to insert. + */ + _insert: function (elem) { + var index = this._elems.indexOf(elem.name); + + if (~index) { + this._elems[index] = elem; + } + + this._updateCollection() + .initElement(elem); + }, + + /** + * Synchronizes multiple elements arrays with a core '_elems' container. + * Performs elemets grouping by theirs 'displayArea' property. + * @private + * + * @returns {Collection} Chainable. + */ + _updateCollection: function () { + var _elems = compact(this._elems), + grouped; + + grouped = _elems.filter(function (elem) { + return elem.displayArea && _.isString(elem.displayArea); + }); + grouped = _.groupBy(grouped, 'displayArea'); + + _.each(grouped, this.updateRegion, this); + + this.elems(_elems); + + return this; + }, + + /** + * Tries to call specified method of a current component, + * otherwise delegates attempt to its' children. + * + * @param {String} target - Name of the method. + * @param {...*} parameters - Arguments that will be passed to method. + * @returns {*} Result of the method calls. + */ + delegate: function (target) { + var args = _.toArray(arguments); + + target = this[target]; + + if (_.isFunction(target)) { + return target.apply(this, args.slice(1)); + } + + return this._delegate(args); + }, + + /** + * Calls 'delegate' method of all of it's children components. + * @private + * + * @param {Array} args - An array of arguments to pass to the next delegation call. + * @returns {Array} An array of delegation resutls. + */ + _delegate: function (args) { + var result; + + result = this.elems.map(function (elem) { + var target; + + if (!_.isFunction(elem.delegate)) { + target = elem[args[0]]; + + if (_.isFunction(target)) { + return target.apply(elem, args.slice(1)); + } + } else { + return elem.delegate.apply(elem, args); + } + }); + + return _.flatten(result); + } + }); +}); diff --git a/app/code/Magento/Ui/view/base/web/js/lib/core/element/element.js b/app/code/Magento/Ui/view/base/web/js/lib/core/element/element.js new file mode 100644 index 0000000000000000000000000000000000000000..4e83320b6b39224cf2d919e1e88520e665400cf0 --- /dev/null +++ b/app/code/Magento/Ui/view/base/web/js/lib/core/element/element.js @@ -0,0 +1,573 @@ +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +define([ + 'ko', + 'underscore', + 'mageUtils', + 'uiRegistry', + 'uiEvents', + 'uiClass', + './links', + '../storage' +], function (ko, _, utils, registry, Events, Class, links) { + 'use strict'; + + var Element; + + /** + * Creates observable property using knockouts' + * 'observableArray' or 'observable' methods, + * depending on a type of 'value' parameter. + * + * @param {Object} obj - Object to whom property belongs. + * @param {String} key - Key of the property. + * @param {*} value - Initial value. + */ + function observable(obj, key, value) { + var method = Array.isArray(value) ? 'observableArray' : 'observable'; + + if (_.isFunction(obj[key]) && !ko.isObservable(obj[key])) { + return; + } + + if (ko.isObservable(value)) { + value = value(); + } + + ko.isObservable(obj[key]) ? + obj[key](value) : + obj[key] = ko[method](value); + } + + /** + * Creates observable propery using 'track' method. + * + * @param {Object} obj - Object to whom property belongs. + * @param {String} key - Key of the property. + * @param {*} value - Initial value. + */ + function accessor(obj, key, value) { + if (_.isFunction(obj[key]) || ko.isObservable(obj[key])) { + return; + } + + obj[key] = value; + + if (!ko.es5.isTracked(obj, key)) { + ko.track(obj, [key]); + } + } + + Element = _.extend({ + defaults: { + template: '', + containers: [], + _requesetd: {}, + registerNodes: true, + storageConfig: { + provider: 'localStorage', + namespace: '${ $.name }', + path: '${ $.storageConfig.provider }:${ $.storageConfig.namespace }' + }, + maps: { + imports: {}, + exports: {} + }, + modules: { + storage: '${ $.storageConfig.provider }' + } + }, + + /** + * Initializes model instance. + * + * @returns {Element} Chainable. + */ + initialize: function () { + this._super() + .initObservable() + .initModules() + .initStatefull() + .initLinks() + .initUnique(); + + return this; + }, + + /** + * Initializes observable properties. + * + * @returns {Element} Chainable. + */ + initObservable: function () { + return this; + }, + + /** + * Parses 'modules' object and creates + * async wrappers for specified components. + * + * @returns {Element} Chainable. + */ + initModules: function () { + var modules = this.modules || {}; + + _.each(modules, function (name, property) { + this[property] = this.requestModule(name); + }, this); + + if (!_.isFunction(this.source)) { + this.source = registry.get(this.provider); + } + + return this; + }, + + /** + * Called when current element was injected to another component. + * + * @param {Object} parent - Instance of a 'parent' component. + * @returns {Collection} Chainable. + */ + initContainer: function (parent) { + this.containers.push(parent); + + return this; + }, + + /** + * Initializes statefull properties + * based on the keys of 'statefull' object. + * + * @returns {Element} Chainable. + */ + initStatefull: function () { + var statefull = this.statefull || {}; + + _.each(statefull, function (path, key) { + if (!path) { + return; + } + + this.setStatefull(key, path); + }, this); + + return this; + }, + + /** + * Initializes links between properties. + * + * @returns {Element} Chainbale. + */ + initLinks: function () { + this.setListeners(this.listens) + .setLinks(this.links, 'imports') + .setLinks(this.links, 'exports'); + + _.each({ + exports: this.exports, + imports: this.imports + }, this.setLinks, this); + + return this; + }, + + /** + * Initializes listeners of the unique property. + * + * @returns {Element} Chainable. + */ + initUnique: function () { + var update = this.onUniqueUpdate.bind(this), + uniqueNs = this.uniqueNs; + + this.hasUnique = this.uniqueProp && uniqueNs; + + if (this.hasUnique) { + this.source.on(uniqueNs, update, this.name); + } + + return this; + }, + + /** + * Makes specified property to be stored automatically. + * + * @param {String} key - Name of the property + * that will be stored. + * @param {String} [path=key] - Path to the property in storage. + * @returns {Element} Chainable. + */ + setStatefull: function (key, path) { + var link = {}; + + path = !_.isString(path) || !path ? key : path; + link[key] = this.storageConfig.path + '.' + path; + + this.setLinks(link, 'imports') + .setLinks(link, 'exports'); + + return this; + }, + + /** + * Updates property specified in uniqueNs + * if elements' unique property is set to 'true'. + * + * @returns {Element} Chainable. + */ + setUnique: function () { + var property = this.uniqueProp; + + if (this[property]()) { + this.source.set(this.uniqueNs, this.name); + } + + return this; + }, + + /** + * Creates 'async' wrapper for the specified component + * using uiRegistry 'async' method and caches it + * in a '_requested' components object. + * + * @param {String} name - Name of requested component. + * @returns {Function} Async module wrapper. + */ + requestModule: function (name) { + var requested = this._requesetd; + + if (!requested[name]) { + requested[name] = registry.async(name); + } + + return requested[name]; + }, + + /** + * Returns path to elements' template. + * + * @returns {String} + */ + getTemplate: function () { + return this.template; + }, + + /** + * Checks if template was specified for an element. + * + * @returns {Boolean} + */ + hasTemplate: function () { + return !!this.template; + }, + + /** + * Returns value of the nested property. + * + * @param {String} path - Path to the property. + * @returns {*} Value of the property. + */ + get: function (path) { + return utils.nested(this, path); + }, + + /** + * Sets provided value as a value of the specified nested property. + * Triggers changes notifications, if value has mutated. + * + * @param {String} path - Path to property. + * @param {*} value - New value of the property. + * @returns {Element} Chainable. + */ + set: function (path, value) { + var data = this.get(path), + diffs; + + diffs = !_.isFunction(data) && !this.isTracked(path) ? + utils.compare(data, value, path) : + false; + + utils.nested(this, path, value); + + if (diffs) { + this._notifyChanges(diffs); + } + + return this; + }, + + /** + * Removes nested property from the object. + * + * @param {String} path - Path to the property. + * @returns {Element} Chainable. + */ + remove: function (path) { + var data = utils.nested(this, path), + diffs; + + if (_.isUndefined(data) || _.isFunction(data)) { + return this; + } + + diffs = utils.compare(data, undefined, path); + + utils.nestedRemove(this, path); + + this._notifyChanges(diffs); + + return this; + }, + + /** + * Creates observable properties for the current object. + * + * If 'useTrack' flag is set to 'true' then each property will be + * created with a ES5 get/set accessor descriptors, instead of + * making them an observable functions. + * See 'knockout-es5' library for more information. + * + * @param {Boolean} [useAccessors=false] - Whether to create an + * observable function or to use property accesessors. + * @param {(Object|String|Array)} properties - List of observable properties. + * @returns {Element} Chainable. + * + * @example Sample declaration and equivalent knockout methods. + * this.key = 'value'; + * this.array = ['value']; + * + * this.observe(['key', 'array']); + * => + * this.key = ko.observable('value'); + * this.array = ko.observableArray(['value']); + * + * @example Another syntaxes of the previous example. + * this.observe({ + * key: 'value', + * array: ['value'] + * }); + */ + observe: function (useAccessors, properties) { + var model = this, + trackMethod; + + if (typeof useAccessors !== 'boolean') { + properties = useAccessors; + useAccessors = false; + } + + trackMethod = useAccessors ? accessor : observable; + + if (_.isString(properties)) { + properties = properties.split(' '); + } + + if (Array.isArray(properties)) { + properties.forEach(function (key) { + trackMethod(model, key, model[key]); + }); + } else if (typeof properties === 'object') { + _.each(properties, function (value, key) { + trackMethod(model, key, value); + }); + } + + return this; + }, + + /** + * Delegates call to 'observe' method but + * with a predefined 'useAccessors' flag. + * + * @param {(String|Array|Object)} properties - List of observable properties. + * @returns {Element} Chainable. + */ + track: function (properties) { + this.observe(true, properties); + + return this; + }, + + /** + * Checks if specified property is tracked. + * + * @param {String} property - Property to be checked. + * @returns {Boolean} + */ + isTracked: function (property) { + return ko.es5.isTracked(this, property); + }, + + /** + * Invokes subscribers for the provided changes. + * + * @param {Object} diffs - Object with changes descriptions. + * @returns {Element} Chainable. + */ + _notifyChanges: function (diffs) { + diffs.changes.forEach(function (change) { + this.trigger(change.path, change.value, change); + }, this); + + _.each(diffs.containers, function (changes, name) { + var value = utils.nested(this, name); + + this.trigger(name, value, changes); + }, this); + + return this; + }, + + /** + * Extracts all stored data and sets it to element. + * + * @returns {Element} Chainable. + */ + restore: function () { + var ns = this.storageConfig.namespace, + storage = this.storage(); + + if (storage) { + utils.extend(this, storage.get(ns)); + } + + return this; + }, + + /** + * Stores value of the specified property in components' storage module. + * + * @param {String} property + * @param {*} [data=this[property]] + * @returns {Element} Chainable. + */ + store: function (property, data) { + var ns = this.storageConfig.namespace, + path = utils.fullPath(ns, property); + + if (arguments.length < 2) { + data = this.get(property); + } + + this.storage('set', path, data); + + return this; + }, + + /** + * Extracts specified property from storage. + * + * @param {String} [property] - Name of the property + * to be extracted. If not specified then all of the + * stored will be returned. + * @returns {*} + */ + getStored: function (property) { + var ns = this.storageConfig.namespace, + path = utils.fullPath(ns, property), + storage = this.storage(), + data; + + if (storage) { + data = storage.get(path); + } + + return data; + }, + + /** + * Removes stored property. + * + * @param {String} property - Property to be removed from storage. + * @returns {Element} Chainable. + */ + removeStored: function (property) { + var ns = this.storageConfig.namespace, + path = utils.fullPath(ns, property); + + this.storage('remove', path); + + return this; + }, + + /** + * Destroys current instance along with all of its' children. + */ + destroy: function () { + this._dropHandlers() + ._clearRefs(); + }, + + /** + * Removes events listeners. + * @private + * + * @returns {Element} Chainable. + */ + _dropHandlers: function () { + this.off(); + this.source.off(this.name); + + return this; + }, + + /** + * Removes all references to current instance and + * calls 'destroy' method on all of its' children. + * @private + * + * @returns {Element} Chainable. + */ + _clearRefs: function () { + registry.remove(this.name); + + this.containers.forEach(function (parent) { + parent.removeChild(this); + }, this); + + return this; + }, + + /** + * Overrides 'EventsBus.trigger' method to implement events bubbling. + * + * @param {...*} parameters - Any number of arguments that should be passed to the events' handler. + * @returns {Boolean} False if event bubbling was canceled. + */ + bubble: function () { + var args = _.toArray(arguments), + bubble = this.trigger.apply(this, args), + result; + + if (!bubble) { + return false; + } + + this.containers.forEach(function (parent) { + result = parent.bubble.apply(parent, args); + + if (result === false) { + bubble = false; + } + }); + + return !!bubble; + }, + + /** + * Callback which fires when property under uniqueNs has changed. + */ + onUniqueUpdate: function (name) { + var active = name === this.name, + property = this.uniqueProp; + + this[property](active); + } + }, Events, links); + + return Class.extend(Element); +}); diff --git a/app/code/Magento/Ui/view/base/web/js/lib/component/links.js b/app/code/Magento/Ui/view/base/web/js/lib/core/element/links.js similarity index 97% rename from app/code/Magento/Ui/view/base/web/js/lib/component/links.js rename to app/code/Magento/Ui/view/base/web/js/lib/core/element/links.js index 83e963dfcb2fce31ce493d626aea78758c054a63..c769be3775f46ddba47d5d9110974fc2bd5782da 100644 --- a/app/code/Magento/Ui/view/base/web/js/lib/component/links.js +++ b/app/code/Magento/Ui/view/base/web/js/lib/core/element/links.js @@ -163,13 +163,6 @@ define([ } return { - defaults: { - maps: { - exports: {}, - imports: {} - } - }, - setListeners: function (listeners) { var owner = this, data; diff --git a/app/code/Magento/Ui/view/base/web/js/lib/events.js b/app/code/Magento/Ui/view/base/web/js/lib/core/events.js similarity index 89% rename from app/code/Magento/Ui/view/base/web/js/lib/events.js rename to app/code/Magento/Ui/view/base/web/js/lib/core/events.js index 5ef76cfa2ce998d3a7742b92ae59e2271998d61e..f5e086575527132319f2a8b5c0375f6f3ded0f4e 100644 --- a/app/code/Magento/Ui/view/base/web/js/lib/events.js +++ b/app/code/Magento/Ui/view/base/web/js/lib/core/events.js @@ -38,11 +38,16 @@ define([ * @param {String} name - Name of the event. */ function addHandler(obj, ns, callback, name) { - var events = getEvents(obj), + var events = getEvents(obj), + observable, data; - if (ko.isObservable(obj[name])) { - obj[name].subscribe(callback); + observable = !ko.isObservable(obj[name]) ? + ko.getObservable(obj, name) : + obj[name]; + + if (observable) { + observable.subscribe(callback); return; } @@ -86,6 +91,7 @@ define([ } return { + /** * Calls callback when name event is triggered. * @param {String} events @@ -134,9 +140,10 @@ define([ }, /** - * Triggers event and executes all attached callbacks - * @param {String} name - * @return {Object} reference to this + * Triggers event and executes all attached callbacks. + * + * @param {String} name - Name of the event to be triggered. + * @returns {Boolean} */ trigger: function (name) { var handlers, diff --git a/app/code/Magento/Ui/view/base/web/js/lib/storage.js b/app/code/Magento/Ui/view/base/web/js/lib/core/storage.js similarity index 89% rename from app/code/Magento/Ui/view/base/web/js/lib/storage.js rename to app/code/Magento/Ui/view/base/web/js/lib/core/storage.js index a41bad442f11e4f417d1c0360458c76c1026d63a..62f87dcd432d2ddec9b8ba11b01442cc8a5e92d5 100644 --- a/app/code/Magento/Ui/view/base/web/js/lib/storage.js +++ b/app/code/Magento/Ui/view/base/web/js/lib/core/storage.js @@ -6,19 +6,30 @@ define([ 'underscore', 'uiRegistry', 'mageUtils', - 'Magento_Ui/js/lib/events' + 'uiEvents' ], function (_, registry, utils, EventsBus) { 'use strict'; var root = 'appData', storage; + /** + * Extracts and parses data stored in localStorage by the + * key specified in 'root' varaible. + * + * @returns {Object} + */ function getRoot() { var data = localStorage.getItem(root); return !_.isNull(data) ? JSON.parse(data) : {}; } + /** + * Writes provided data to the localStorage. + * + * @param {*} data - Data to be stored. + */ function setRoot(data) { localStorage.setItem(root, JSON.stringify(data)); } @@ -28,6 +39,7 @@ define([ * as a single nested structure. */ storage = _.extend({ + /** * Retrieves value of the specified property. * diff --git a/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/after-render.js b/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/after-render.js index 2297f2d5cf1764d0198b791ec6011f3b2debf2b8..67a48c89a92a57de35bb95876bb9c8656a651c93 100644 --- a/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/after-render.js +++ b/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/after-render.js @@ -8,6 +8,7 @@ define([ 'use strict'; ko.bindingHandlers.afterRender = { + /** * Binding init callback. */ diff --git a/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/autoselect.js b/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/autoselect.js new file mode 100644 index 0000000000000000000000000000000000000000..5a6207b4c5a113d9a857729924b6aecec4669f80 --- /dev/null +++ b/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/autoselect.js @@ -0,0 +1,34 @@ +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +define([ + 'ko', + 'jquery' +], function (ko, $) { + 'use strict'; + + /** + * 'Focus' event handler. + * + * @param {EventObject} e + */ + function onFocus(e) { + e.target.select(); + } + + ko.bindingHandlers.autoselect = { + + /** + * Adds event handler which automatically + * selects inputs' element text when field gets focused. + */ + init: function (element, valueAccessor) { + var enabled = ko.unwrap(valueAccessor()); + + if (enabled !== false) { + $(element).on('focus', onFocus); + } + } + }; +}); diff --git a/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/class.js b/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/class.js deleted file mode 100644 index 8d3b6bbfbd02cf34ca83ad544b905a8dd225e989..0000000000000000000000000000000000000000 --- a/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/class.js +++ /dev/null @@ -1,53 +0,0 @@ -/** - * Copyright © 2015 Magento. All rights reserved. - * See COPYING.txt for license details. - */ -define([ - 'ko', - 'underscore' -], function(ko, _) { - 'use strict'; - - ko.bindingHandlers['class'] = { - /** - * @param {HTMLElement} element - Element, that binding is applied to - * @param {Function} valueAccessor - Function that returns value, passed to binding - */ - update: function (element, valueAccessor) { - var currentValue = ko.utils.unwrapObservable(valueAccessor()), - prevValue = element['__ko__previousClassValue__'], - - /** - * Helper for setting classes11 - * @param {Array|Object|String} singleValueOrArrayOrObject - * @param {Boolean} shouldHaveClass - */ - addOrRemoveClasses = function addOrRemoveClassesFn (singleValueOrArrayOrObject, shouldHaveClass) { - if (_.isArray(singleValueOrArrayOrObject)) { - ko.utils.arrayForEach(singleValueOrArrayOrObject, function (cssClass) { - var value = ko.utils.unwrapObservable(cssClass); - ko.utils.toggleDomNodeCssClass(element, value, shouldHaveClass); - }); - } else if (_.isObject(singleValueOrArrayOrObject)) { - _.each(singleValueOrArrayOrObject, function(classname, condition) { - if(ko.utils.unwrapObservable(condition)) { - ko.utils.toggleDomNodeCssClass(element, classname, shouldHaveClass); - } - }) - - } else if (singleValueOrArrayOrObject) { - ko.utils.toggleDomNodeCssClass(element, singleValueOrArrayOrObject, shouldHaveClass); - } - }; - - // Remove old value(s) (preserves any existing CSS classes) - addOrRemoveClasses(prevValue, false); - - // Set new value(s) - addOrRemoveClasses(currentValue, true); - - // Store a copy of the current value - element['__ko__previousClassValue__'] = currentValue.concat(); - } - }; -}); \ No newline at end of file diff --git a/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/optgroup.js b/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/optgroup.js index b95709baf311418d8a362f9a7ad86f1f40c389fb..dbecd15e8843dc8ef6c18abcd3599ebdac7b7830 100644 --- a/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/optgroup.js +++ b/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/optgroup.js @@ -4,11 +4,14 @@ */ define([ - 'ko' -], function (ko) { + 'ko', + 'mageUtils' + ], function (ko, utils) { 'use strict'; var captionPlaceholder = {}, + optgroupTmpl = '<optgroup label="${ $.label }"></optgroup>', + nbspRe = / /g, optionsText, optionsValue, optionTitle; @@ -190,19 +193,22 @@ define([ itemUpdate = true; } - if (arrayEntry === captionPlaceholder) {// empty value, label === caption + if (arrayEntry === captionPlaceholder) { // empty value, label === caption option = element.ownerDocument.createElement('option'); ko.utils.setTextContent(option, allBindings.get('optionsCaption')); ko.selectExtensions.writeValue(option, undefined); } else if (typeof arrayEntry[optionsValue] === 'undefined') { // empty value === optgroup - option = element.ownerDocument.createElement('optgroup'); - option.setAttribute('label', arrayEntry[optionsText]); - option.setAttribute('title', arrayEntry[optionsText + 'title']); + option = utils.template(optgroupTmpl, { + label: arrayEntry[optionsText], + title: arrayEntry[optionsText + 'title'] + }); + option = ko.utils.parseHtmlFragment(option)[0]; + } else { option = element.ownerDocument.createElement('option'); - option.setAttribute('title', arrayEntry[optionsText + 'title']); + option.setAttribute('data-title', arrayEntry[optionsText + 'title']); ko.selectExtensions.writeValue(option, arrayEntry[optionsValue]); - ko.utils.setTextContent(option, arrayEntry[optionsText].replace(/^\s+/g, '')); + ko.utils.setTextContent(option, arrayEntry[optionsText]); } return [option]; @@ -226,6 +232,15 @@ define([ } } + /** + * + * @param {*} string, times + * @returns {Array} + */ + function strPad(string, times) { + return (new Array(times + 1)).join(string); + } + /** * * @param {*} options @@ -245,20 +260,23 @@ define([ } } } + ko.utils.arrayForEach(options, function (option) { - var label, title, value, obj = {}; + var value = applyToObject(option, optionsValue, option), + label = applyToObject(option, optionsText, value) || '', + title = applyToObject(option, optionsText, value) || '', + obj = {}; - value = applyToObject(option, optionsValue, option); - label = applyToObject(option, optionsText, value); obj[optionTitle] = applyToObject(option, optionsText + 'title', value); + label = label.replace(nbspRe, '').trim(); + if (Array.isArray(value)) { - obj[optionsText] = label; - obj[optionsValue] = undefined; + obj[optionsText] = strPad(' ', nestedOptionsLevel * 4) + label; res.push(obj); res = res.concat(formatOptions(value)); } else { - obj[optionsText] = label; + obj[optionsText] = strPad('  ', nestedOptionsLevel * 2) + label; obj[optionsValue] = value; res.push(obj); } diff --git a/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/scope.js b/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/scope.js index 2f9d78541d7ccb5ff2e7391fdec38e3e807e3abd..aae69f9fe18f5256b37f59709a1eece0fe6c5233 100644 --- a/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/scope.js +++ b/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/scope.js @@ -1,13 +1,11 @@ /** - * @category storage - * @package test * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ /** Creates scope binding and registers in to ko.bindingHandlers object */ define([ 'ko', - 'Magento_Ui/js/lib/registry/registry', + 'uiRegistry', 'jquery', 'mage/translate' ], function (ko, registry, $) { @@ -15,30 +13,6 @@ define([ var i18n = $.mage.__; - /** - * Fetches components from registry and stores them to context object, then passes it to callback function. - * @param {Object} components - map, representing components to be attached to the new context. - * @param {Function} callback - Function to be called when components are fetched. - */ - function getMultiple(components, callback) { - var key, - paths = [], - context = {}; - - for (key in components) { - paths.push(components[key]); - } - - registry.get(paths, function () { - - for (key in components) { - context[key] = registry.get(components[key]); - } - - callback(context); - }); - } - /** * Creates child context with passed component param as $data. Extends context with $t helper. * Applies bindings to descendant nodes. @@ -58,8 +32,6 @@ define([ ko.applyBindingsToDescendants(component, el); } - ko.virtualElements.allowedBindings.scope = true; - ko.bindingHandlers.scope = { /** @@ -85,13 +57,13 @@ define([ var component = valueAccessor(), apply = applyComponents.bind(this, el, bindingContext); - if (typeof component === 'object') { - getMultiple(component, apply); - } else if (typeof component === 'string') { + if (typeof component === 'string') { registry.get(component, apply); } else if (typeof component === 'function') { component(apply); } } }; + + ko.virtualElements.allowedBindings.scope = true; }); diff --git a/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/staticChecked.js b/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/staticChecked.js new file mode 100644 index 0000000000000000000000000000000000000000..b766fcfa870c6fcd21bf6c40df23d16ebfe2e266 --- /dev/null +++ b/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/staticChecked.js @@ -0,0 +1,103 @@ +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +define([ + 'ko' +], function (ko) { + 'use strict'; + + ko.bindingHandlers.staticChecked = { + 'after': ['value', 'attr'], + + /** + * Implements same functionality as a standard 'checked' binding, + * but with a difference that it wont' change values array if + * value of DOM element changes. + */ + init: function (element, valueAccessor, allBindings) { + var isCheckbox = element.type === 'checkbox', + isRadio = element.type === 'radio', + isValueArray, + oldElemValue, + useCheckedValue, + checkedValue, + updateModel, + updateView; + + if (!isCheckbox && !isRadio) { + return; + } + + checkedValue = ko.pureComputed(function () { + if (allBindings.has('checkedValue')) { + return ko.utils.unwrapObservable(allBindings.get('checkedValue')); + } else if (allBindings.has('value')) { + return ko.utils.unwrapObservable(allBindings.get('value')); + } + + return element.value; + }); + + isValueArray = isCheckbox && ko.utils.unwrapObservable(valueAccessor()) instanceof Array; + oldElemValue = isValueArray ? checkedValue() : undefined; + useCheckedValue = isRadio || isValueArray; + + /** + * Updates values array if it's necessary. + */ + updateModel = function () { + var isChecked = element.checked, + elemValue = useCheckedValue ? checkedValue() : isChecked, + modelValue; + + if (ko.computedContext.isInitial()) { + return; + } + + if (isRadio && !isChecked) { + return; + } + + modelValue = ko.dependencyDetection.ignore(valueAccessor); + + if (isValueArray) { + if (oldElemValue !== elemValue) { + oldElemValue = elemValue; + } else { + ko.utils.addOrRemoveItem(modelValue, elemValue, isChecked); + } + } else { + ko.expressionRewriting.writeValueToProperty(modelValue, allBindings, 'checked', elemValue, true); + } + }; + + /** + * Updates checkbox state. + */ + updateView = function () { + var modelValue = ko.utils.unwrapObservable(valueAccessor()); + + if (isValueArray) { + element.checked = ko.utils.arrayIndexOf(modelValue, checkedValue()) >= 0; + } else if (isCheckbox) { + element.checked = modelValue; + } else { + element.checked = checkedValue() === modelValue; + } + }; + + ko.computed(updateModel, null, { + disposeWhenNodeIsRemoved: element + }); + + ko.utils.registerEventHandler(element, 'click', updateModel); + + ko.computed(updateView, null, { + disposeWhenNodeIsRemoved: element + }); + } + }; + + ko.expressionRewriting.twoWayBindings.staticChecked = true; +}); diff --git a/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/stop_propagation.js b/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/stop_propagation.js deleted file mode 100644 index 7269d7774a3809c36686dab6d5e36736954ec88d..0000000000000000000000000000000000000000 --- a/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/stop_propagation.js +++ /dev/null @@ -1,24 +0,0 @@ -/** - * Copyright © 2015 Magento. All rights reserved. - * See COPYING.txt for license details. - */ -/** Creates stopPropagation binding and registers in to ko.bindingHandlers object */ -define(['ko'], function (ko) { - 'use strict'; - - ko.bindingHandlers.stopPropagation = { - - /** - * Stops propagation on element - * @param {HTMLElement} element - element to apply binding to - */ - init: function (element) { - ko.utils.registerEventHandler(element, 'click', function (event) { - event.cancelBubble = true; - if (event.stopPropagation) { - event.stopPropagation(); - } - }); - } - }; -}); \ No newline at end of file diff --git a/app/code/Magento/Ui/view/base/web/js/lib/ko/extender/bound-nodes.js b/app/code/Magento/Ui/view/base/web/js/lib/ko/extender/bound-nodes.js index ed7b85b6f4127614e57466375267d404d4d43f06..62a13e52add7a587a9aad83fb0f8397296ea0e35 100644 --- a/app/code/Magento/Ui/view/base/web/js/lib/ko/extender/bound-nodes.js +++ b/app/code/Magento/Ui/view/base/web/js/lib/ko/extender/bound-nodes.js @@ -7,7 +7,7 @@ define([ 'ko', 'underscore', 'mage/utils/wrapper', - 'Magento_Ui/js/lib/events', + 'uiEvents', 'es6-collections' ], function (ko, _, wrapper, Events) { 'use strict'; @@ -84,6 +84,7 @@ define([ } wrapper.extend(ko, { + /** * Extends kncokouts' 'applyBindings' * to track nodes associated with model. @@ -132,6 +133,7 @@ define([ }); return { + /** * Returns root nodes associated with a model. If callback is provided, * will iterate through all of the present nodes triggering callback diff --git a/app/code/Magento/Ui/view/base/web/js/lib/ko/initialize.js b/app/code/Magento/Ui/view/base/web/js/lib/ko/initialize.js index 2b0f3d1fc5dcadfc5f630efaea6a0bf5c4379dae..7a4dbb25680830eb990a436f89627f54e0400ca1 100644 --- a/app/code/Magento/Ui/view/base/web/js/lib/ko/initialize.js +++ b/app/code/Magento/Ui/view/base/web/js/lib/ko/initialize.js @@ -7,9 +7,12 @@ define([ 'ko', './template/engine', + 'knockoutjs/knockout-repeat', + 'knockoutjs/knockout-fast-foreach', + 'knockoutjs/knockout-es5', './bind/scope', + './bind/staticChecked', './bind/datepicker', - './bind/stop_propagation', './bind/outer_click', './bind/keyboard', './bind/optgroup', @@ -18,9 +21,9 @@ define([ './bind/after-render', './bind/i18n', './bind/collapsible', + './bind/autoselect', './extender/observable_array', - './extender/bound-nodes', - './extender/observable_array' + './extender/bound-nodes' ], function (ko, templateEngine) { 'use strict'; diff --git a/app/code/Magento/Ui/view/base/web/js/lib/ko/template/engine.js b/app/code/Magento/Ui/view/base/web/js/lib/ko/template/engine.js index 213d0ea8a7f0c6b1b3f87bc178b4b52a7d500751..ad56e701e37388c10d19eafba892a0dbc7b004ad 100644 --- a/app/code/Magento/Ui/view/base/web/js/lib/ko/template/engine.js +++ b/app/code/Magento/Ui/view/base/web/js/lib/ko/template/engine.js @@ -5,11 +5,18 @@ define([ 'ko', './observable_source', - '../../renderer/renderer' + './renderer' ], function (ko, Source, Renderer) { 'use strict'; - var sources = {}; + var RemoteTemplateEngine, + NativeTemplateEngine = ko.nativeTemplateEngine, + sources = {}; + + /** + * Remote template engine class. Is used to be able to load remote templates via knockout template binding. + */ + RemoteTemplateEngine = function () {}; /** * Creates unique template identifier based on template name and it's extenders (optional) @@ -20,12 +27,6 @@ define([ return templateName; } - /** - * Remote template engine class. Is used to be able to load remote templates via knockout template binding. - */ - var RemoteTemplateEngine = function () {}; - var NativeTemplateEngine = ko.nativeTemplateEngine; - RemoteTemplateEngine.prototype = new NativeTemplateEngine; RemoteTemplateEngine.prototype.constructor = RemoteTemplateEngine; @@ -34,7 +35,7 @@ define([ * Caches template after it's unique name and renders in once. * If template name is not typeof string, delegates work to knockout.templateSources.anonymousTemplate. * @param {*} template - * @return {TemplateSource} - object with methods 'nodes' and 'data'. + * @returns {TemplateSource} Object with methods 'nodes' and 'data'. */ RemoteTemplateEngine.prototype.makeTemplateSource = function (template) { var source, @@ -54,11 +55,13 @@ define([ } return source; - } else if ((template.nodeType == 1) || (template.nodeType == 8)) { - return new ko.templateSources.anonymousTemplate(template); - } else { - throw new Error("Unknown template type: " + template); + } else if (template.nodeType === 1 || template.nodeType === 8) { + source = new ko.templateSources.anonymousTemplate(template); + + return source; } + + throw new Error('Unknown template type: ' + template); }; /** diff --git a/app/code/Magento/Ui/view/base/web/js/lib/loader.js b/app/code/Magento/Ui/view/base/web/js/lib/ko/template/loader.js similarity index 99% rename from app/code/Magento/Ui/view/base/web/js/lib/loader.js rename to app/code/Magento/Ui/view/base/web/js/lib/ko/template/loader.js index 03d97b399d7130727a01ff43eb4264dfa3b82d72..da06db381245c02e5c2dd70902898d9dd1b0bbee 100644 --- a/app/code/Magento/Ui/view/base/web/js/lib/loader.js +++ b/app/code/Magento/Ui/view/base/web/js/lib/ko/template/loader.js @@ -46,6 +46,7 @@ define([ } return { + /** * Loops over arguments and loads template for each. * @return {Deferred} - promise of templates to be loaded diff --git a/app/code/Magento/Ui/view/base/web/js/lib/ko/template/observable_source.js b/app/code/Magento/Ui/view/base/web/js/lib/ko/template/observable_source.js index d97291dcf15c5686af8f2d0fa0efb74edd503984..251163992ba056cb2d287e8f67ae96b5b750a577 100644 --- a/app/code/Magento/Ui/view/base/web/js/lib/ko/template/observable_source.js +++ b/app/code/Magento/Ui/view/base/web/js/lib/ko/template/observable_source.js @@ -5,16 +5,20 @@ /** * Is being used by knockout template engine to store template to. */ -define(['ko', 'Magento_Ui/js/lib/class'], function(ko, Class) { +define([ + 'ko', + 'uiClass' +], function (ko, Class) { 'use strict'; return Class.extend({ /** * Initializes templateName, _data, nodes properties. + * * @param {template} template - identifier of template */ - initialize: function(template) { + initialize: function (template) { this.templateName = template; this._data = {}; this.nodes = ko.observable([]); @@ -27,7 +31,7 @@ define(['ko', 'Magento_Ui/js/lib/class'], function(ko, Class) { * @param {*} value * @return {*} - if 1 arg provided, returnes _data[key] property */ - data: function(key, value) { + data: function (key, value) { if (arguments.length === 1) { return this._data[key]; } @@ -35,4 +39,4 @@ define(['ko', 'Magento_Ui/js/lib/class'], function(ko, Class) { this._data[key] = value; } }); -}); \ No newline at end of file +}); diff --git a/app/code/Magento/Ui/view/base/web/js/lib/renderer/renderer.js b/app/code/Magento/Ui/view/base/web/js/lib/ko/template/renderer.js similarity index 92% rename from app/code/Magento/Ui/view/base/web/js/lib/renderer/renderer.js rename to app/code/Magento/Ui/view/base/web/js/lib/ko/template/renderer.js index 9da1291111f07e421eb1f41ca8b1ee6aa67bf1bb..55bf63998479fea2c220a9d0ad92102c7a447fdc 100644 --- a/app/code/Magento/Ui/view/base/web/js/lib/renderer/renderer.js +++ b/app/code/Magento/Ui/view/base/web/js/lib/ko/template/renderer.js @@ -3,17 +3,20 @@ * See COPYING.txt for license details. */ define([ - '../loader', + './loader', 'jquery', 'underscore' ], function (loader, $, _) { 'use strict'; return { + /** * Renders template and it's extenders using this._parse function. - * Loads all extenders then merges them and wraps into div[data-template-extend="parent"] where parent is target template. + * Loads all extenders then merges them and wraps into + * div[data-template-extend="parent"] where parent is target template. * If no extenders provider, simply loads target template and passes execution to _parse. + * * @param {String} template - string, representing path to core template and it's extenders. * @returns {Deferred} - Promise of template to be rendered. Is being resolved with array of HTML elements. */ diff --git a/app/code/Magento/Ui/view/base/web/js/lib/registry/events.js b/app/code/Magento/Ui/view/base/web/js/lib/registry/events.js index 09c398ef01a896962342ad95fc39f8178f01007d..69fcebf547ef5fa076440a736fece570373fc629 100644 --- a/app/code/Magento/Ui/view/base/web/js/lib/registry/events.js +++ b/app/code/Magento/Ui/view/base/web/js/lib/registry/events.js @@ -9,10 +9,13 @@ define([ ], function (_, utils) { 'use strict'; + /** + * @constructor + */ function Events(storage) { this.id = 0, - this.requests = new Map() + this.requests = new Map(); this.map = {}; this.storage = storage; diff --git a/app/code/Magento/Ui/view/base/web/js/lib/registry/registry.js b/app/code/Magento/Ui/view/base/web/js/lib/registry/registry.js index e31839400d0d171b332e76ecb0f1f5ba906167e4..eb01b49615c7427738985af0982bf9175094800c 100644 --- a/app/code/Magento/Ui/view/base/web/js/lib/registry/registry.js +++ b/app/code/Magento/Ui/view/base/web/js/lib/registry/registry.js @@ -10,6 +10,19 @@ define([ ], function (utils, _, Storage, Events) { 'use strict'; + /** + * Wrapper function used for convinient access to elements. + * See 'async' method for examples of usage and comparison + * with a regular 'get' method. + * + * @param {String} name - Key of the requested element. + * @param {Registry} registry - Instance of a registry + * where to search for the element. + * @param {(Function|String)} [method] - Optional callback function + * or a name of the elements' method which + * will be invoked when element is registered. + * @returns {*} + */ function async(name, registry, method) { var args = _.toArray(arguments).slice(3); @@ -24,6 +37,9 @@ define([ } } + /** + * @constructor + */ function Registry() { this.storage = new Storage(); this.events = new Events(this.storage); @@ -35,15 +51,12 @@ define([ /** * Retrieves data from registry. * - * @param {(String|Array)} elems - - * An array of elements' names or a string of names divided by spaces. - * @param {Function} [callback] - - * Callback function that will be triggered - * when all of the elements are registered. - * @returns {Array|*|Undefined} - * Returns either an array of elements - * or an element itself if only is requested. - * If callback function is specified then returns 'undefined'. + * @param {(String|Array)} elems - An array of elements' names or + * a string of names divided by spaces. + * @param {Function} [callback] - Callback function that will be invoked + * when all of the requested elements are registered. + * @returns {Array|*|Undefined} An array of elements + * or an element itself if only one was requested. */ get: function (elems, callback) { var records; @@ -61,12 +74,12 @@ define([ } }, - /** + /** * Sets data to registry. * * @param {String} elem - Elements' name. * @param {*} value - Value that will be assigned to the element. - * @returns {registry} Chainable. + * @returns {Registry} Chainable. */ set: function (elem, value) { this.storage.set(elem, value); @@ -77,9 +90,10 @@ define([ /** * Removes specified elements from a storage. - * @param {(String|Array)} elems - - * An array of elements' names or a string of names divided by spaces. - * @returns {registry} Chainable. + * + * @param {(String|Array)} elems - An array of elements' names or + * a string of names divided by spaces. + * @returns {Registry} Chainable. */ remove: function (elems) { elems = utils.stringToArray(elems); @@ -89,11 +103,11 @@ define([ return this; }, - /** + /** * Checks whether specified elements has been registered. * - * @param {(String|Array)} elems - - * An array of elements' names or a string of names divided by spaces. + * @param {(String|Array)} elems - An array of elements' names or + * a string of names divided by spaces. * @returns {Boolean} */ has: function (elems) { @@ -102,10 +116,40 @@ define([ return this.storage.has(elems); }, + /** + * Creates a function wrapper for the specified element, + * to provide more convinient access. + * + * @param {String} name - Name of the element. + * @returns {Function} + * + * @example Comparison with a 'get' method on requesting elements. + * var module = registry.async('name'); + * + * module(); + * => registry.get('name'); + * + * @example Requesting an element with a callback. + * module(function (component) {}); + * + * => registry.get('name', function (component) {}); + * + * @example Requesting an element and invoking its' method. + * module('trigger', true); + * + * => registry.get('name', function (component) { + * component.trigger(true); + * }); + */ async: function (name) { return async.bind(null, name, this); }, + /** + * Creates new instance of a Registry. + * + * @returns {Registry} New instance. + */ create: function () { return new Registry; } diff --git a/app/code/Magento/Ui/view/base/web/js/lib/registry/storage.js b/app/code/Magento/Ui/view/base/web/js/lib/registry/storage.js index ae3063cb07c2035df1189b86912792636bd35874..5012eba16a5e9927064346e08f0307750157cbfb 100644 --- a/app/code/Magento/Ui/view/base/web/js/lib/registry/storage.js +++ b/app/code/Magento/Ui/view/base/web/js/lib/registry/storage.js @@ -7,6 +7,9 @@ define([ ], function () { 'use strict'; + /** + * @constructor + */ function Storage() { this.data = new Map(); } diff --git a/app/code/Magento/Ui/view/base/web/js/lib/view/utils/async.js b/app/code/Magento/Ui/view/base/web/js/lib/view/utils/async.js index 1b5743cd9d29aea5d12841306cd3dc0c1fd4ee6f..7986b18780600f7a3c705572d29149b54ab50be6 100644 --- a/app/code/Magento/Ui/view/base/web/js/lib/view/utils/async.js +++ b/app/code/Magento/Ui/view/base/web/js/lib/view/utils/async.js @@ -126,7 +126,6 @@ define([ */ function setRootListener(data, component) { boundedNodes.get(component, function (root) { - var ctx = data.ctx || '*' if (!$(root).is(data.ctx || '*')) { return; } @@ -223,7 +222,7 @@ define([ /** * Sets removal listener of the specified nodes. * - * @param {{HTMLElement|Array|ArrayLike}} nodes - Nodes whose removal to track. + * @param {(HTMLElement|Array|ArrayLike)} nodes - Nodes whose removal to track. * @param {Function} fn - Callback that will be invoked when node is removed. */ remove: function (nodes, fn) { diff --git a/app/code/Magento/Ui/view/base/web/js/modal/alert.js b/app/code/Magento/Ui/view/base/web/js/modal/alert.js index 33be3c8041dea6c2f0586124bc3f1e8120020cef..f422083aab9b27af1969866da18182716a241ad1 100644 --- a/app/code/Magento/Ui/view/base/web/js/modal/alert.js +++ b/app/code/Magento/Ui/view/base/web/js/modal/alert.js @@ -2,6 +2,7 @@ * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ + define([ 'jquery', 'underscore', @@ -16,19 +17,31 @@ define([ modalClass: 'confirm', title: $.mage.__('Attention'), actions: { + + /** + * Callback always - called on all actions. + */ always: function () {} }, buttons: [{ text: $.mage.__('OK'), - class: 'action-secondary', + class: 'action-primary action-accept', + + /** + * Click handler. + */ click: function () { this.closeModal(true); } }] }, + + /** + * Close modal window. + */ closeModal: function () { this.options.actions.always(); - this.element.bind('confirmclosed', _.bind(this._remove, this)); + this.element.bind('alertclosed', _.bind(this._remove, this)); return this._super(); } diff --git a/app/code/Magento/Ui/view/base/web/js/modal/confirm.js b/app/code/Magento/Ui/view/base/web/js/modal/confirm.js index 7bad2023b649b18edeaf710780d8cf0e73a5f6b9..098cb8669741e15eedb8fb0df607a0658cec98f8 100644 --- a/app/code/Magento/Ui/view/base/web/js/modal/confirm.js +++ b/app/code/Magento/Ui/view/base/web/js/modal/confirm.js @@ -2,6 +2,7 @@ * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ + define([ 'jquery', 'underscore', @@ -16,36 +17,72 @@ define([ modalClass: 'confirm', title: '', actions: { - always: function(){}, - confirm: function(){}, - cancel: function(){} + + /** + * Callback always - called on all actions. + */ + always: function () {}, + + /** + * Callback confirm. + */ + confirm: function () {}, + + /** + * Callback cancel. + */ + cancel: function () {} }, buttons: [{ text: $.mage.__('Cancel'), - class: 'action-tertiary', - click: function(){ + class: 'action-secondary action-dismiss', + + /** + * Click handler. + */ + click: function () { this.closeModal(); } }, { text: $.mage.__('OK'), - class: 'action-secondary', - click: function() { + class: 'action-primary action-accept', + + /** + * Click handler. + */ + click: function () { this.closeModal(true); } }] }, - _create: function() { + + /** + * Create widget. + */ + _create: function () { this._super(); this.modal.find(this.options.modalCloseBtn).off().on('click', _.bind(this.closeModal, this, false)); this.openModal(); }, - _remove: function() { + + /** + * Remove modal window. + */ + _remove: function () { this.modal.remove(); }, - openModal: function() { + + /** + * Open modal window. + */ + openModal: function () { return this._super(); }, - closeModal: function(result) { + + /** + * Close modal window. + */ + closeModal: function (result) { result = result || false; if (result) { diff --git a/app/code/Magento/Ui/view/base/web/js/modal/modal.js b/app/code/Magento/Ui/view/base/web/js/modal/modal.js index 84074ebf9800e689fd6a900afe986c8242664ac9..e99f818068534b4578bdebc4b4f3ef2dc36becc3 100644 --- a/app/code/Magento/Ui/view/base/web/js/modal/modal.js +++ b/app/code/Magento/Ui/view/base/web/js/modal/modal.js @@ -10,9 +10,10 @@ define([ 'text!ui/template/modal/modal-popup.html', 'text!ui/template/modal/modal-slide.html', 'text!ui/template/modal/modal-custom.html', + 'Magento_Ui/js/lib/key-codes', 'jquery/ui', 'mage/translate' -], function ($, _, template, popupTpl, slideTpl, customTpl) { +], function ($, _, template, popupTpl, slideTpl, customTpl, keyCodes) { 'use strict'; /** @@ -44,6 +45,9 @@ define([ type: 'popup', title: '', modalClass: '', + focus: '[data-role="closeBtn"]', + autoOpen: false, + clickableOverlay: true, popupTpl: popupTpl, slideTpl: slideTpl, customTpl: customTpl, @@ -56,6 +60,9 @@ define([ modalCloseBtn: '[data-role="closeBtn"]', modalContent: '[data-role="content"]', modalAction: '[data-role="action"]', + focusableScope: '[data-role="focusable-scope"]', + focusableStart: '[data-role="focusable-start"]', + focusableEnd: '[data-role="focusable-end"]', appendTo: 'body', wrapperClass: 'modals-wrapper', overlayClass: 'modals-overlay', @@ -66,6 +73,7 @@ define([ buttons: [{ text: $.mage.__('Ok'), class: '', + attr: {}, /** * Default action on button click @@ -75,16 +83,45 @@ define([ } }] }, + keyEventHandlers: { + + /** + * Tab key press handler, + * set focus to elements + */ + tabKey: function () { + if (document.activeElement === this.modal[0]) { + this._setFocus('start'); + } + }, + + /** + * Escape key press handler, + * close modal window + */ + escapeKey: function () { + if (this.options.isOpen && this.modal.find(document.activeElement).length || + this.options.isOpen && this.modal[0] === document.activeElement) { + this.closeModal(); + } + } + }, /** * Creates modal widget. */ _create: function () { + _.bindAll( + this, + 'keyEventSwitcher', + '_tabSwitcher', + 'closeModal' + ); + this.options.transitionEvent = transitionEvent; this._createWrapper(); this._renderModal(); this._createButtons(); - $(this.options.trigger).on('click', _.bind(this.toggleModal, this)); this._on(this.modal.find(this.options.modalCloseBtn), { 'click': this.closeModal @@ -93,6 +130,7 @@ define([ 'openModal': this.openModal, 'closeModal': this.closeModal }); + this.options.autoOpen ? this.openModal() : false; }, /** @@ -123,6 +161,18 @@ define([ return elems.filter('.' + this.options.modalVisibleClass).length; }, + /** + * Listener key events. + * Call handler function if it exists + */ + keyEventSwitcher: function (event) { + var key = keyCodes[event.keyCode]; + + if (this.keyEventHandlers.hasOwnProperty(key)) { + this.keyEventHandlers[key].apply(this, arguments); + } + }, + /** * Toggle modal. * * @return {Element} - current element. @@ -141,9 +191,12 @@ define([ */ openModal: function () { this.options.isOpen = true; + this.focussedElement = document.activeElement; this._createOverlay(); this._setActive(); + this._setKeyListener(); this.modal.one(this.options.transitionEvent, _.bind(this._trigger, this, 'opened')); + this.modal.one(this.options.transitionEvent, _.bind(this._setFocus, this, 'end', 'opened')); this.modal.addClass(this.options.modalVisibleClass); if (!this.options.transitionEvent) { @@ -153,6 +206,68 @@ define([ return this.element; }, + /** + * Set focus to element. + * @param {String} position - can be "start" and "end" + * positions. + * If position is "end" - sets focus to first + * focusable element in modal window scope. + * If position is "start" - sets focus to last + * focusable element in modal window scope + * + * @param {String} type - can be "opened" or false + * If type is "opened" - looks to "this.options.focus" + * property and sets focus + */ + _setFocus: function (position, type) { + var focusableElements, + infelicity; + + if (type === 'opened' && this.options.focus) { + this.modal.find($(this.options.focus)).focus(); + } else if (type === 'opened' && !this.options.focus) { + this.modal.find(this.options.focusableScope).focus(); + } else if (position === 'end') { + this.modal.find(this.options.modalCloseBtn).focus(); + } else if (position === 'start') { + infelicity = 2; //Constant for find last focusable element + focusableElements = this.modal.find(':focusable'); + focusableElements.eq(focusableElements.length - infelicity).focus(); + } + }, + + /** + * Set events listener when modal is opened. + */ + _setKeyListener: function () { + this.modal.find(this.options.focusableStart).bind('focusin', this._tabSwitcher); + this.modal.find(this.options.focusableEnd).bind('focusin', this._tabSwitcher); + this.modal.bind('keydown', this.keyEventSwitcher); + }, + + /** + * Remove events listener when modal is closed. + */ + _removeKeyListener: function () { + this.modal.find(this.options.focusableStart).unbind('focusin', this._tabSwitcher); + this.modal.find(this.options.focusableEnd).unbind('focusin', this._tabSwitcher); + this.modal.unbind('keydown', this.keyEventSwitcher); + }, + + /** + * Switcher for focus event. + * @param {Object} e - event + */ + _tabSwitcher: function (e) { + var target = $(e.target); + + if (target.is(this.options.focusableStart)) { + this._setFocus('start'); + } else if (target.is(this.options.focusableEnd)) { + this._setFocus('end'); + } + }, + /** * Close modal. * * @return {Element} - current element. @@ -160,6 +275,7 @@ define([ closeModal: function () { var that = this; + this._removeKeyListener(); this.options.isOpen = false; this.modal.one(this.options.transitionEvent, function () { that._close(); @@ -179,6 +295,7 @@ define([ _close: function () { var trigger = _.bind(this._trigger, this, 'closed', this.modal); + $(this.focussedElement).focus(); this._destroyOverlay(); this._unsetActive(); _.defer(trigger, this); @@ -246,6 +363,9 @@ define([ _.each(this.options.buttons, function (btn, key) { var button = that.buttons[key]; + if (btn.attr) { + $(button).attr(btn.attr); + } $(button).on('click', _.bind(btn.click, that)); }); }, @@ -254,8 +374,7 @@ define([ * Creates overlay, append it to wrapper, set previous click event on overlay. */ _createOverlay: function () { - var that = this, - events; + var events; this.overlay = $('.' + this.options.overlayClass); @@ -266,13 +385,8 @@ define([ .appendTo(this.modalWrapper); } events = $._data(this.overlay.get(0), 'events'); - - if (events) { - this.prevOverlayHandler = events.click[0].handler; - } - this.overlay.unbind().on('click', function () { - that.closeModal(); - }); + events ? this.prevOverlayHandler = events.click[0].handler : false; + this.options.clickableOverlay ? this.overlay.unbind().on('click', this.closeModal) : false; }, /** diff --git a/app/code/Magento/Ui/view/base/web/js/modal/prompt.js b/app/code/Magento/Ui/view/base/web/js/modal/prompt.js new file mode 100644 index 0000000000000000000000000000000000000000..0866050dcafc5f571fb3a8049036cda5345faf9e --- /dev/null +++ b/app/code/Magento/Ui/view/base/web/js/modal/prompt.js @@ -0,0 +1,120 @@ +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +define([ + 'jquery', + 'underscore', + 'jquery/ui', + 'Magento_Ui/js/modal/modal', + 'mage/translate' +], function ($, _) { + 'use strict'; + + $.widget('mage.prompt', $.mage.modal, { + options: { + modalClass: 'prompt', + promptField: '[data-role="promptField"]', + value: '', + actions: { + + /** + * Callback always - called on all actions. + */ + always: function () {}, + + /** + * Callback confirm. + */ + confirm: function () {}, + + /** + * Callback cancel. + */ + cancel: function () {} + }, + buttons: [{ + text: $.mage.__('Cancel'), + class: 'action-secondary action-dismiss', + + /** + * Click handler. + */ + click: function () { + this.closeModal(); + } + }, { + text: $.mage.__('OK'), + class: 'action-primary action-accept', + + /** + * Click handler. + */ + click: function () { + this.closeModal(true); + } + }] + }, + + /** + * Create widget. + */ + _create: function () { + this.options.focus = this.options.promptField; + this._super(); + this.modal.find(this.options.modalContent).append( + '<div class="prompt-message">' + + '<input data-role="promptField" id="prompt-field" class="admin__control-text" type="text"/>' + + '</div>' + ); + this.modal.find(this.options.modalCloseBtn).off().on('click', _.bind(this.closeModal, this, false)); + this.openModal(); + }, + + /** + * Compile template and append to wrapper. + */ + _renderModal: function () { + this._super(); + this.element.wrap('<label for="prompt-field"></label>'); + }, + + /** + * Remove widget + */ + _remove: function () { + this.modal.remove(); + }, + + /** + * Open modal window + */ + openModal: function () { + this._super(); + this.modal.find(this.options.promptField).val(this.options.value); + }, + + /** + * Close modal window + */ + closeModal: function (result) { + var value; + + if (result) { + value = this.modal.find(this.options.promptField).val(); + this.options.actions.confirm(value); + } else { + this.options.actions.cancel(); + } + this.options.actions.always(); + this.element.bind('promptclosed', _.bind(this._remove, this)); + + return this._super(); + } + }); + + return function (config) { + return $('<div></div>').html(config.content).prompt(config); + }; +}); diff --git a/app/code/Magento/Ui/view/base/web/templates/collection.html b/app/code/Magento/Ui/view/base/web/templates/collection.html index ac5ce2ca9de45d64dfd2f850e5598ed0aa9bc617..a5e802420e3882aed300a992b82a01e740296dbe 100644 --- a/app/code/Magento/Ui/view/base/web/templates/collection.html +++ b/app/code/Magento/Ui/view/base/web/templates/collection.html @@ -5,5 +5,7 @@ */ --> <!-- ko foreach: { data: elems, as: 'element' } --> - <!-- ko template: element.getTemplate() --><!-- /ko --> + <!-- ko if: hasTemplate() --> + <!-- ko template: getTemplate() --><!-- /ko --> + <!-- /ko --> <!-- /ko --> diff --git a/app/code/Magento/Ui/view/base/web/templates/form/element/checkbox.html b/app/code/Magento/Ui/view/base/web/templates/form/element/checkbox.html index 01dca8a5b9318157f562333f27546e07f3d0e081..1d00fae66ae2ab08fefef861146d0658cdc405df 100644 --- a/app/code/Magento/Ui/view/base/web/templates/form/element/checkbox.html +++ b/app/code/Magento/Ui/view/base/web/templates/form/element/checkbox.html @@ -7,8 +7,7 @@ <div class="admin__field admin__field-option"> <input type="checkbox" class="admin__control-checkbox" data-bind="checked: value, attr: { id: uid, disabled: disabled, name: inputName }, hasFocus: focused"> - <label class="admin__field-label" data-bind="checked: value, attr: { for: uid }"> - <span data-bind="text: description || label"></span> + <label class="admin__field-label" data-bind="text: description || label, attr: { for: uid }"> </label> <!-- ko if: notice --> diff --git a/app/code/Magento/Ui/view/base/web/templates/form/element/media.html b/app/code/Magento/Ui/view/base/web/templates/form/element/media.html index 64c9f82070dd23b382f04b1f1af237ce376365f7..627d6689262fd1e5cba45c023193e59cd3f306a9 100644 --- a/app/code/Magento/Ui/view/base/web/templates/form/element/media.html +++ b/app/code/Magento/Ui/view/base/web/templates/form/element/media.html @@ -12,6 +12,7 @@ placeholder: placeholder, 'aria-describedby': noticeId, id: uid, - disabled: disabled + disabled: disabled, + form: formId }" /> diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/cells/actions.html b/app/code/Magento/Ui/view/base/web/templates/grid/cells/actions.html index 22105aed42f6d0eb382162432c3317431a32cbeb..653696ed6fd0cf085345fd8b8f2bdd5c42536e91 100644 --- a/app/code/Magento/Ui/view/base/web/templates/grid/cells/actions.html +++ b/app/code/Magento/Ui/view/base/web/templates/grid/cells/actions.html @@ -4,50 +4,49 @@ * See COPYING.txt for license details. */ --> +<!-- ko if: $col.isSingle($row()._rowIndex) --> +<a + class="action-menu-item" + data-bind=" + repeat: { + foreach: $col.getVisibleActions($row()._rowIndex), + item: '$action' + }" + data-repeat-bind=" + attr: { + href: $action().href + }, + click: $col.getActionHandler($action()), + text: $action().label" + ></a> +<!-- /ko --> -<td data-bind="visible: visible" class="data-grid-actions-cell"> - <!-- ko if: isSingle(row._rowIndex) --> - <!-- ko foreach: getVisibleActions(row._rowIndex) --> - <a - class="action-menu-item" +<!-- ko if: $col.isMultiple($row()._rowIndex) --> +<div + class="action-select-wrap" + data-bind="collapsible"> + <button class="action-select" data-bind="toggleCollapsible"> + <span data-bind="i18n: 'Select'"></span> + </button> + <ul + class="action-menu" data-bind=" - attr: { - href: $data.href - }, - click: $parent.isHandlerRequired(index, rowIndex) ? - $parent.applyAction.bind($parent, index, rowIndex) : - false, - text: $data.label"></a> - <!-- /ko --> - <!-- /ko --> - - <!-- ko if: isMultiple(row._rowIndex) --> - <div - class="action-select-wrap" - data-bind="collapsible"> - <button class="action-select" data-bind="toggleCollapsible"> - <span data-bind="i18n: 'Select'"></span> - </button> - <ul - class="action-menu" - data-bind="css: { - '_active': $collapsible.opened - }, - foreach: getVisibleActions(row._rowIndex)" - > - <li> - <a - class="action-menu-item" - data-bind=" - attr: { - href: $data.href - }, - click: $parent.isHandlerRequired(index, rowIndex) ? - $parent.applyAction.bind($parent, index, rowIndex) : - false, - text: $data.label"></a> - </li> - </ul> - </div> - <!-- /ko --> -</td> + css: {'_active': $collapsible.opened}"> + <li + data-bind=" + repeat: { + foreach: $col.getVisibleActions($row()._rowIndex), + item: '$action' + }"> + <a + class="action-menu-item" + data-bind=" + attr: { + href: $action().href + }, + click: $col.getActionHandler($action()), + text: $action().label"></a> + </li> + </ul> +</div> +<!-- /ko --> \ No newline at end of file diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/cells/html.html b/app/code/Magento/Ui/view/base/web/templates/grid/cells/html.html index 9d5226a5e3c792fc466dbfd28f7f29e846c5606e..5e48189716a9322c1cfbc16de8f7076442a3e8db 100644 --- a/app/code/Magento/Ui/view/base/web/templates/grid/cells/html.html +++ b/app/code/Magento/Ui/view/base/web/templates/grid/cells/html.html @@ -4,16 +4,7 @@ * See COPYING.txt for license details. */ --> -<td - data-bind=" - visible: visible, - css: { _dragging: dragging }, - click: hasFieldAction() ? - applyFieldAction.bind($data, row._rowIndex) : - false" - data-action="grid-row-edit"> - <div - data-bind="html: getLabel(row[field.index])" - class="data-grid-cell-content"> - </div> -</td> +<div + class="data-grid-cell-content" + data-bind="html: $col.getLabel($row())"> +</div> \ No newline at end of file diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/cells/multiselect.html b/app/code/Magento/Ui/view/base/web/templates/grid/cells/multiselect.html index 242c651f006d16896d55dcb52d0d8332bab9eb71..f0964a155e1e89fd453d748f0af3d20ef6bbec50 100644 --- a/app/code/Magento/Ui/view/base/web/templates/grid/cells/multiselect.html +++ b/app/code/Magento/Ui/view/base/web/templates/grid/cells/multiselect.html @@ -4,20 +4,16 @@ * See COPYING.txt for license details. */ --> - -<td class="data-grid-checkbox-cell" data-bind="visible: visible"> - <label class="data-grid-checkbox-cell-inner"> - <input - class="admin__control-checkbox" - type="checkbox" - data-action="select-row" - data-bind=" - disable: disabled.indexOf(row[indexField]) != -1, - checked: selected, - value: row[indexField], - attr: { - id: 'check' + row[indexField] - }"> - <label data-bind="attr: {for: 'check' + row[indexField]}"></label> - </label> -</td> +<label class="data-grid-checkbox-cell-inner"> + <input + class="admin__control-checkbox" + type="checkbox" + data-action="select-row" + data-bind=" + staticChecked: $col.selected, + checkedValue: $row()[$col.indexField], + attr: { + id: 'check' + $row()[$col.indexField] + }"> + <label data-bind="attr: {for: 'check' + $row()[$col.indexField]}"></label> +</label> \ No newline at end of file diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/cells/onoff.html b/app/code/Magento/Ui/view/base/web/templates/grid/cells/onoff.html new file mode 100644 index 0000000000000000000000000000000000000000..9a23d227e583a5f35db1d2ea2a28592fced7c248 --- /dev/null +++ b/app/code/Magento/Ui/view/base/web/templates/grid/cells/onoff.html @@ -0,0 +1,24 @@ +<!-- +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +--> +<div class="switcher"> + <input + class="admin__control-onoff" + type="checkbox" + data-bind=" + staticChecked: $col.selected, + value: $row()[$col.indexField], + attr: { + id: 'check' + $row()[$col.indexField] + }"> + <label + class="switcher-label" + data-bind=" + attr: { + for: 'check' + $row()[$col.indexField] + }, + text: $col.getLabel($row()[$col.indexField])"></label> +</div> diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/cells/text.html b/app/code/Magento/Ui/view/base/web/templates/grid/cells/text.html index 3544f503de6d9189933c9f0ef603da5841b935f3..bdd0d673514637cfb7b655d42eb510cad2247489 100644 --- a/app/code/Magento/Ui/view/base/web/templates/grid/cells/text.html +++ b/app/code/Magento/Ui/view/base/web/templates/grid/cells/text.html @@ -4,17 +4,7 @@ * See COPYING.txt for license details. */ --> -<td - data-bind=" - visible: visible, - css: { _dragging: dragging }, - click: hasFieldAction() ? - applyFieldAction.bind($data, row._rowIndex) : - false" - data-action="grid-row-edit"> - <div - data-bind=" - text: getLabel(row[field.index])" - class="data-grid-cell-content"> - </div> -</td> +<div + class="data-grid-cell-content" + data-bind="text: $col.getLabel($row())"> +</div> \ No newline at end of file diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/cells/thumbnail.html b/app/code/Magento/Ui/view/base/web/templates/grid/cells/thumbnail.html index d8ce11138decf4e3cd5eca47b75dde55192690f8..e45dd5eabc3a73dc91c8fef473101cd2ccad2dc6 100644 --- a/app/code/Magento/Ui/view/base/web/templates/grid/cells/thumbnail.html +++ b/app/code/Magento/Ui/view/base/web/templates/grid/cells/thumbnail.html @@ -4,12 +4,11 @@ * See COPYING.txt for license details. */ --> -<td class="data-grid-thumbnail-cell" - data-bind="visible: visible, click: isPreviewAvailable() ? preview.bind($data, row, $parentContext.$index()) : false" - data-action="grid-row-edit"> - <img src="" class="admin__control-thumbnail" data-bind=" - attr: { - src: getSrc(row), - alt: getAlt(row) - }"/> -</td> +<img + class="admin__control-thumbnail" + data-bind=" + attr: { + src: $col.getSrc($row()), + alt: $col.getAlt($row()) + } + "/> \ No newline at end of file diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/columns/multiselect.html b/app/code/Magento/Ui/view/base/web/templates/grid/columns/multiselect.html index 4606d8e27b9a19e5236f6b7f28d66076805b43d1..8caad7bfc0980c68c19d38ac421ed2fe21fc70c6 100644 --- a/app/code/Magento/Ui/view/base/web/templates/grid/columns/multiselect.html +++ b/app/code/Magento/Ui/view/base/web/templates/grid/columns/multiselect.html @@ -5,7 +5,7 @@ */ --> -<th class="data-grid-multicheck-cell" data-bind="visible: visible"> +<th class="data-grid-multicheck-cell"> <div class="action-multicheck-wrap" data-bind="css: {'_disabled': !totalRecords()}, @@ -36,4 +36,4 @@ </li> </ul> </div> -</th> +</th> \ No newline at end of file diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/columns/onoff.html b/app/code/Magento/Ui/view/base/web/templates/grid/columns/onoff.html new file mode 100644 index 0000000000000000000000000000000000000000..5e68fc3a77bb5b317db04d737af43644e9f7bd73 --- /dev/null +++ b/app/code/Magento/Ui/view/base/web/templates/grid/columns/onoff.html @@ -0,0 +1,42 @@ +<!-- +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<th class="data-grid-multicheck-cell"> + <label data-bind="i18n: 'Assign'"></label> + <div + class="action-multicheck-wrap" + style="width: 3.3rem" + data-bind="css: {'_disabled': !totalRecords()}, collapsible"> + <input + id="mass-select-checkbox" + class="admin__control-checkbox" + type="checkbox" + data-bind="checked: allSelected(), + event: { change: toggleSelectAll }, + css: { '_indeterminate': indetermine }, + enable: totalRecords"> + <label for="mass-select-checkbox" class="data-grid-onoff-label"> + <span data-bind="i18n: 'Select all'"></span> + </label> + <button + class="action-multicheck-toggle" + data-toggle="dropdown" + data-bind="css: { '_active': $collapsible.opened }, + enable: totalRecords + toggleCollapsible"> + <span data-bind="i18n: 'Options'"></span> + </button> + <ul + class="action-menu" + data-bind="closeCollapsible, foreach: actions"> + <li data-bind="click: $parent[value].bind($parent), + visible: $parent.isActionRelevant(value)"> + <span class="action-menu-item" data-bind="text: label"></span> + </li> + </ul> + </div> +</th> diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/columns/text.html b/app/code/Magento/Ui/view/base/web/templates/grid/columns/text.html index dfd36be3f731022266fcccb9fe6cceefaa7c4872..318cb9d09427ed332185bb4c2ec1e9dcb9931d07 100644 --- a/app/code/Magento/Ui/view/base/web/templates/grid/columns/text.html +++ b/app/code/Magento/Ui/view/base/web/templates/grid/columns/text.html @@ -10,13 +10,12 @@ css: { '_sortable': sortable, '_draggable': draggable, - '_ascend': sorting() === 'asc', - '_descend': sorting() === 'desc' + '_ascend': sorting === 'asc', + '_descend': sorting === 'desc' }, - click: sort, - visible: visible"> + click: sort"> <span class="data-grid-cell-content" data-bind="text: label"> </span> -</th> +</th> \ No newline at end of file diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/controls/bookmarks/bookmarks.html b/app/code/Magento/Ui/view/base/web/templates/grid/controls/bookmarks/bookmarks.html index 850f3c2fce793487392414a8ff1f95bc45f5daa5..8dcb904750dff5aa75fd5988244387ffda390049 100644 --- a/app/code/Magento/Ui/view/base/web/templates/grid/controls/bookmarks/bookmarks.html +++ b/app/code/Magento/Ui/view/base/web/templates/grid/controls/bookmarks/bookmarks.html @@ -15,15 +15,63 @@ data-bind="toggleCollapsible" data-toggle="dropdown" aria-haspopup="true"> - <span class="admin__action-dropdown-text" - data-bind="i18n: activeView() ? activeView().label() : 'Default View' "></span> + <span + class="admin__action-dropdown-text" + data-bind="text: activeView.label"></span> </button> <ul class="admin__action-dropdown-menu"> - <!-- ko foreach: elems --> - <!-- ko template: getTemplate() --><!-- /ko --> - <!-- /ko --> - <li data-bind="visible: hasChanges" class="action-dropdown-menu-action action-dropdown-menu-item-last"> - <a href="" data-bind="click: createNewView, i18n: 'Save Current View'"></a> + <li + data-bind="repeat: { + foreach: viewsArray, + item: '$view' + }" + data-repeat-bind=" + css: { + _edit: isEditing($view().index) + }, + outerClick: endEdit.bind($data, $view().index), + template: viewTmpl + "> + </li> + <li data-bind=" + visible: hasChanges, + outerClick: hideCustom.bind($data), + css: { + _edit: customVisible, + 'action-dropdown-menu-action action-dropdown-menu-item-last': !customVisible + } + "> + <a href="" + data-bind=" + visible: !customVisible, + click: showCustom, + i18n: 'Save View As...' + "></a> + <div class="action-dropdown-menu-item-edit" data-bind="visible: customVisible"> + <input + class="admin__control-text" + data-bind=" + value: customLabel, + autoselect, + hasFocus: isCustomVisible(), + keyboard: { + 13: applyCustom.bind($data), + 27: hideCustom.bind($data) + }" + type="text"> + <div class="action-dropdown-menu-item-actions"> + <button + class="action-submit" + data-bind=" + attr: { + title: $t('Save all changes') + }, + click: applyCustom" + type="button"> + <span data-bind="i18n: 'Submit'"></span> + </button> + </div> + </div> </li> </ul> -</div> +</div> \ No newline at end of file diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/controls/bookmarks/view.html b/app/code/Magento/Ui/view/base/web/templates/grid/controls/bookmarks/view.html index 707fad8eabbe87f3fc4120fd49e9b2afb6ce4b26..6aa2fc9556298a7529388be5addb4a7cb0f73f2f 100644 --- a/app/code/Magento/Ui/view/base/web/templates/grid/controls/bookmarks/view.html +++ b/app/code/Magento/Ui/view/base/web/templates/grid/controls/bookmarks/view.html @@ -4,52 +4,70 @@ * See COPYING.txt for license details. */ --> -<li - data-bind="css: {_edit: editing}, outerClick: endEdit.bind($data)"> - <!-- ko if: editable --> - <div class="action-dropdown-menu-item-edit"> - <input - class="admin__control-text" +<!-- ko if: $view().editable --> +<div + class="action-dropdown-menu-item-edit"> + <input + class="admin__control-text" + data-bind=" + value: $view().value, + hasFocus: isEditing($view().index), + autoselect, + attr: { + placeholder: $view().label + }, + keyboard: { + 13: updateAndSave.bind($data, $view().index), + 27: endEdit.bind($data, $view().index) + }" + type="text"> + <button + class="action-submit" + data-bind=" + attr: { + title: $t('Save all changes') + }, + click: updateAndSave.bind($data, $view().index)" + type="button"> + <span data-bind="i18n: 'Submit'"></span> + </button> + <div class="action-dropdown-menu-item-actions"> + <button data-bind=" - value: value, - hasFocus: editing(), attr: { - placeholder: label + title: $t('Delete bookmark') }, - keyboard: { - 13: function(){ $collapsible.close(); $parent.saveView($data) } - }" - type="text"> + click: removeView.bind($data, $view().index)" + class="action-delete" + type="button"> + <span data-bind="i18n: 'Delete'"></span> + </button> + </div> +</div> +<!-- /ko --> + +<div class="action-dropdown-menu-item"> + <a + class="action-dropdown-menu-link" + href="" + data-bind=" + text: $view().label, + click: applyView.bind($data, $view().index), + closeCollapsible"> + </a> + + <!-- ko if: $view().editable --> + <div class="action-dropdown-menu-item-actions"> <button - class="action-submit" - data-bind="click: $parent.saveView.bind($parent, $data), closeCollapsible, attr: {title: $t('Save all changes')}" + class="action-edit" + data-bind=" + attr: { + title: $t('Edit bookmark') + }, + click: editView.bind($data, $view().index)" type="button"> - <span data-bind="i18n: 'Submit'"></span> + <span data-bind="i18n: 'Edit'"></span> </button> - <div class="action-dropdown-menu-item-actions"> - <button - data-bind="click: $parent.removeView.bind($parent, $data), closeCollapsible, attr: {title: $t('Delete bookmark')}" - class="action-delete" - type="button"> - <span data-bind="i18n: 'Delete'"></span> - </button> - </div> </div> <!-- /ko --> - <div class="action-dropdown-menu-item"> - <a - class="action-dropdown-menu-link" - href="" - data-bind="text: label, click: function(){ active(true); }, closeCollapsible"></a> - <!-- ko if: editable --> - <div class="action-dropdown-menu-item-actions"> - <button - class="action-edit" - data-bind="click: startEdit, attr: {title: $t('Edit bookmark')}" - type="button"> - <span data-bind="i18n: 'Edit'"></span> - </button> - </div> - <!-- /ko --> - </div> -</li> +</div> \ No newline at end of file diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/controls/columns.html b/app/code/Magento/Ui/view/base/web/templates/grid/controls/columns.html index e2dcc3d816376756169ad5896c5e14de65475fe8..2eff0b403073eaf2e367e26dbb0c65f34fac66b3 100644 --- a/app/code/Magento/Ui/view/base/web/templates/grid/controls/columns.html +++ b/app/code/Magento/Ui/view/base/web/templates/grid/controls/columns.html @@ -19,21 +19,21 @@ <div class="admin__action-dropdown-menu-header"> <span data-bind="text: getHeaderMessage()"></span> </div> - <div class="admin__action-dropdown-menu-content" data-bind="foreach: elems"> - <div class="admin__field-option"> + <div class="admin__action-dropdown-menu-content"> + <div class="admin__field-option" data-bind="repeat: {foreach: elems, item: '$col'}"> <input class="admin__control-checkbox" type="checkbox" data-bind=" attr: { - id: ++ko.bindingHandlers['uniqueName'].currentIndex + '_uid' + id: ++ko.bindingHandlers['uniqueName'].currentIndex + '_uid' }, - disable: $parent.isDisabled($data), - checked: visible"/> + disable: isDisabled($col()), + checked: $col().visible"/> <label class="admin__field-label" data-bind=" - text: label, + text: $col().label, attr: { for: ko.bindingHandlers['uniqueName'].currentIndex + '_uid' }"></label> @@ -52,4 +52,4 @@ </div> </div> </div> -</div> +</div> \ No newline at end of file diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/editing/bulk.html b/app/code/Magento/Ui/view/base/web/templates/grid/editing/bulk.html index fe3d785f3d29a4cece894b3df02ece7467f7a6b1..951e0af5cd12d82ad8b053947c324ae105a065fc 100644 --- a/app/code/Magento/Ui/view/base/web/templates/grid/editing/bulk.html +++ b/app/code/Magento/Ui/view/base/web/templates/grid/editing/bulk.html @@ -8,15 +8,18 @@ class="data-grid-bulk-edit-panel data-grid-editable-row" data-bind=" visible: active, - foreach: fields" + foreach: { + data: fields, + as: '$col' + }" data-role="data-grid-bulk-row"> + <!-- ko if: $parent.getColumn(index).visible --> <td data-bind=" - visible: $parent.getColumn(index).visible, css: { - 'data-grid-actions-cell': $parent.isActionsColumn($data) + 'data-grid-actions-cell': $parent.isActionsColumn($col) }"> - <!-- ko if: $parent.isActionsColumn($data) --> + <!-- ko if: $parent.isActionsColumn($col) --> <!-- ko with: $parent --> <button class="action-default" @@ -24,7 +27,7 @@ data-bind=" click: apply, attr: { - disabled: !hasData() + disabled: !hasData }"> <span data-bind="i18n: 'Apply'"></span> </button> @@ -43,4 +46,5 @@ <!-- ko template: getTemplate() --><!-- /ko --> <!-- /ko --> </td> + <!-- /ko --> </tr> diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/editing/field.html b/app/code/Magento/Ui/view/base/web/templates/grid/editing/field.html index 77cc47351c89f72d68d7ba428a7c7f7a816ab7ab..a01514ff19136807fe40066d8a3fc6fc6c7f3d3d 100644 --- a/app/code/Magento/Ui/view/base/web/templates/grid/editing/field.html +++ b/app/code/Magento/Ui/view/base/web/templates/grid/editing/field.html @@ -5,16 +5,14 @@ */ --> -<td data-bind="visible: $parent.getColumn(index).visible"> - <div - class="admin__field-control" - data-bind="css: { - _error: error(), - _focus: focused() - }"> - <!-- ko template: getTemplate() --><!-- /ko --> - <label - class="admin__field-error" - data-bind="attr: { for: uid }, text: error, visible: error() && focused()"></label> - </div> -</td> +<div + class="admin__field-control" + data-bind="css: { + _error: error(), + _focus: focused() + }"> + <!-- ko template: getTemplate() --><!-- /ko --> + <label + class="admin__field-error" + data-bind="attr: { for: uid }, text: error, visible: error() && focused()"></label> +</div> diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/editing/header-buttons.html b/app/code/Magento/Ui/view/base/web/templates/grid/editing/header-buttons.html index 834ef42fdbfc620ed0378b594e1077cf3f04ef78..cb41d2538e8afd9e398c73226e6a4586bb4abb78 100644 --- a/app/code/Magento/Ui/view/base/web/templates/grid/editing/header-buttons.html +++ b/app/code/Magento/Ui/view/base/web/templates/grid/editing/header-buttons.html @@ -4,7 +4,7 @@ * See COPYING.txt for license details. */ --> -<div class="data-grid-info-panel" data-bind="visible: isMultiEditing() || (hasActive() && (hasMessages() || hasErrors() ))"> +<div class="data-grid-info-panel" data-bind="visible: isMultiEditing || (hasActive() && (hasMessages() || hasErrors() ))"> <div class="messages" data-bind="visible: hasMessages() || hasErrors()"> <div class="message message-warning" data-bind="visible: hasErrors()"> <strong>There are <!-- ko text: countErrors() --><!-- /ko --> meesages requires your attention.</strong> diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/editing/row.html b/app/code/Magento/Ui/view/base/web/templates/grid/editing/row.html index 892eaf35872389aaef796659e7fdb59ca863f2f4..ad64b2a630e93bcecd1767fa751a30a6cd4dfa18 100644 --- a/app/code/Magento/Ui/view/base/web/templates/grid/editing/row.html +++ b/app/code/Magento/Ui/view/base/web/templates/grid/editing/row.html @@ -8,21 +8,28 @@ data-part="body.row" class="data-grid-editable-row" data-bind=" - visible: active, - '_odd-row': !!($index() % 2), + '_odd-row': !!($row()._rowIndex % 2), foreach: { data: fields, - as: 'field' + as: '$col' }"> + <!-- ko if: $parent.getColumn(index).visible --> + <!-- ko if: $parent.isActionsColumn($data) --> <td class="data-grid-actions-cell"> - <span class="data-grid-row-changed" data-bind="css: { _changed: $parent.hasChanges() }"> + <span class="data-grid-row-changed" data-bind="css: {_changed: $parent.hasChanges}"> <span class="data-grid-row-changed-tooltip" data-bind="i18n: 'Record contains unsaved changes.'"></span> </span> </td> <!-- /ko --> - <!-- ko ifnot: $parent.isActionsColumn($data) --> - <!-- ko template: $data.isEditor ? $parent.fieldTmpl : getBody() --><!-- /ko --> + <!-- ko if: $col.isEditor --> + <td data-bind="template: $parent.fieldTmpl"></td> + <!-- /ko --> + <!-- ko ifnot: $col.isEditor --> + <td data-bind="template: $col.getBody(), css: $col.getFieldClass()"></td> + <!-- /ko --> + <!-- /ko --> + <!-- /ko --> </tr> diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/exportButton.html b/app/code/Magento/Ui/view/base/web/templates/grid/exportButton.html index 84df5efc7227f9e2fde80a844b39c8017d177dea..b77069084f4793a8753418c1c8003da549878ecf 100644 --- a/app/code/Magento/Ui/view/base/web/templates/grid/exportButton.html +++ b/app/code/Magento/Ui/view/base/web/templates/grid/exportButton.html @@ -23,8 +23,8 @@ class="admin__control-radio" data-bind=" attr: { - id: 'export-field-' + value + $index(), - name: 'export' + id: ++ko.bindingHandlers['uniqueName'].currentIndex + '_uid', + name: $parent.name }, checkedValue: value, checked: $parent.checked" @@ -34,7 +34,7 @@ data-bind=" text: label, attr: { - for: 'export-field-' + value + $index() + for: ko.bindingHandlers['uniqueName'].currentIndex + '_uid' }"></label> </div> <!-- /ko --> @@ -52,4 +52,4 @@ </button> </div> </div> -</div> +</div> \ No newline at end of file diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/filters/chips.html b/app/code/Magento/Ui/view/base/web/templates/grid/filters/chips.html index e396c223d8a92a5486335ffb6367c95f087322e6..11ef2a9dda524b42bb476e9318908ad74e7883f3 100644 --- a/app/code/Magento/Ui/view/base/web/templates/grid/filters/chips.html +++ b/app/code/Magento/Ui/view/base/web/templates/grid/filters/chips.html @@ -6,7 +6,9 @@ --> <div class="admin__data-grid-filters-current" - data-bind="css: {_show: hasData()}"> + data-bind="css: { + _show: hasPreviews() + }"> <div class="admin__current-filters-title-wrap"> <span class="admin__current-filters-title" @@ -50,7 +52,7 @@ i18n: 'Clear all', click: clear, attr: { - 'data-action': hasData() ? 'grid-filter-reset' : '' + 'data-action': hasPreviews() ? 'grid-filter-reset' : '' }" ></button> </div> diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/filters/filters.html b/app/code/Magento/Ui/view/base/web/templates/grid/filters/filters.html index c3ae31d52b181ec49fa5ca785cb018cb4824275a..06ca73a0cfba582847e08ca67c87ad31ce3b435b 100644 --- a/app/code/Magento/Ui/view/base/web/templates/grid/filters/filters.html +++ b/app/code/Magento/Ui/view/base/web/templates/grid/filters/filters.html @@ -37,18 +37,11 @@ <legend class="admin__filters-legend"> <span data-bind="i18n: 'Advanced filter'"></span> </legend> - <!-- ko foreach: elems --> - <!-- ko if: $data.isGroup --> - <fieldset class="admin__form-field" data-bind="visible: $parent.isFilterVisible($data)"> - <!-- ko template: getTemplate() --><!-- /ko --> - </fieldset> - <!-- /ko --> - - <!-- ko ifnot: $data.isGroup --> - <div class="admin__form-field" data-bind="visible: $parent.isFilterVisible($data)"> - <!-- ko template: getTemplate() --><!-- /ko --> - </div> - <!-- /ko --> + <!-- ko foreach: getRanges() --> + <fieldset class="admin__form-field" data-bind="visible: $parent.isFilterVisible($data), template: getTemplate()"></fieldset> + <!-- /ko --> + <!-- ko foreach: getPlain() --> + <div class="admin__form-field" data-bind="visible: $parent.isFilterVisible($data), template: getTemplate()"></div> <!-- /ko --> </fieldset> @@ -70,4 +63,4 @@ </button> </div> </div> -</div> +</div> \ No newline at end of file diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/listing.html b/app/code/Magento/Ui/view/base/web/templates/grid/listing.html index 1a1428162c153627ca8d67ac3dad8199101a33c7..68595ee87849926fe6096cbfc6c75ec04864d709 100644 --- a/app/code/Magento/Ui/view/base/web/templates/grid/listing.html +++ b/app/code/Magento/Ui/view/base/web/templates/grid/listing.html @@ -6,26 +6,28 @@ --> <div class="admin__data-grid-wrap" data-role="grid-wrapper"> <table class="data-grid" data-role="grid"> - <thead> - <tr data-bind="foreach: elems"> - <!-- ko template: getHeader() --><!-- /ko --> + <thead> + <tr data-bind="fastForEach: {data: getVisible(), as: '$col'}"> + <!-- ko template: $col.getHeader() --><!-- /ko --> </tr> </thead> <tbody> - <!-- ko foreach: { data: rows, as: 'row' } --> - <tr class="data-row" - data-role="row" - data-bind=" - css: { - '_odd-row': !!($index() % 2) - }, - foreach: { - data: $parent.elems, - as: 'field' - } - "> - <!-- ko template: getBody() --><!-- /ko --> - </tr> + <!-- ko repeat: {foreach: rows, item: '$row'} --> + <tr class="data-row" + data-bind=" + css: { + '_odd-row': !!($index % 2) + } + "> + <!-- ko fastForEach: {data: getVisible(), as: '$col'} --> + <td data-bind=" + css: $col.getFieldClass(), + click: $col.getFieldHandler($row()), + template: $col.getBody() + "> + </td> + <!-- /ko --> + </tr> <!-- /ko --> <!-- ko ifnot: hasData() --> @@ -36,4 +38,4 @@ <!-- /ko --> </tbody> </table> -</div> +</div> \ No newline at end of file diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/paging-total.html b/app/code/Magento/Ui/view/base/web/templates/grid/paging-total.html index 0c79131bc2f8e4c994858b5e5d157641d571c5fd..bd2e821dbec25a4d3707d541bcda6041f2eeede2 100644 --- a/app/code/Magento/Ui/view/base/web/templates/grid/paging-total.html +++ b/app/code/Magento/Ui/view/base/web/templates/grid/paging-total.html @@ -6,8 +6,8 @@ --> <div class="admin__control-support-text"> - <span data-bind="i18n: totalRecords"></span> records found + <span data-bind="text: totalRecords"></span> records found <!-- ko if: totalSelected --> - (<span data-bind="i18n: totalSelected"></span> selected) + (<span data-bind="text: totalSelected"></span> selected) <!-- /ko --> -</div> +</div> \ No newline at end of file diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/paging/paging.html b/app/code/Magento/Ui/view/base/web/templates/grid/paging/paging.html index 1961cfff11a3d7be640aace14992455fbb0981f8..10f1ff7fd63c37514439b61220c6118acd6181a9 100644 --- a/app/code/Magento/Ui/view/base/web/templates/grid/paging/paging.html +++ b/app/code/Magento/Ui/view/base/web/templates/grid/paging/paging.html @@ -13,9 +13,14 @@ <button class="action-previous" type="button" - data-bind="css: { disabled: isFirst() }, - click: prev"> - <span>Previous page</span> + data-bind=" + attr: { + title: $t('Previous Page') + }, + css: { + disabled: isFirst() + }, + click: prev"> </button> <input id="pageCurrent" @@ -27,9 +32,14 @@ </label> <button class="action-next" - data-bind="css: { disabled: isLast() }, - click: next"> - <span>Next page</span> + data-bind=" + attr: { + title: $t('Next Page') + }, + css: { + disabled: isLast() + }, + click: next"> </button> </div> -</div> +</div> \ No newline at end of file diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/paging/sizes.html b/app/code/Magento/Ui/view/base/web/templates/grid/paging/sizes.html index dcc9692793e40d2508b061fdf1a33a5f98c1bc6c..87f093270a5047aaa19807698d197bfc1d820f7c 100644 --- a/app/code/Magento/Ui/view/base/web/templates/grid/paging/sizes.html +++ b/app/code/Magento/Ui/view/base/web/templates/grid/paging/sizes.html @@ -23,47 +23,58 @@ aria-haspopup="true"> <span data-bind="i18n: 'Select'"></span> </button> - <div class="selectmenu-items" data-bind="css: {_active: $collapsible.opened}, - outerClick: discardAll.bind($data)" - data-role="toolbar-collapsible-menu"> + <div + class="selectmenu-items" + data-role="toolbar-collapsible-menu" + data-bind=" + css: {_active: $collapsible.opened}, + outerClick: discardAll.bind($data)"> <ul> - <!-- ko foreach: optionsArray --> - <li data-bind="css: { _edit: $parent.isEditing(value)}"> - <!-- ko if: $data.editable --> + <li + data-bind=" + repeat: { + foreach: optionsArray, + item: '$size' + }" + data-repeat-bind=" + css: { + _edit: isEditing($size().value) + }"> + <!-- ko if: $size().editable --> <div class="selectmenu-item-edit" - data-bind="keyboard: {13: $parent.updateSize.bind($parent, value, false)}"> + data-bind="keyboard: {13: updateSize.bind($data, $size().value, false)}"> <input class="admin__control-text" type="text" - data-bind="value: _value, hasFocus: $parent.isEditing(value)"/> + data-bind="value: $size()._value, hasFocus: isEditing($size().value)"/> <button class="action-save" - data-bind="click: $parent.updateSize.bind($parent, value, false)" + data-bind="click: updateSize.bind($data, $size().value, false)" type="button"> <span data-bind="i18n: 'Save'"></span> </button> <button class="action-delete" - data-bind="click: $parent.removeSize.bind($parent, value, false)" + data-bind="click: removeSize.bind($data, $size().value, false)" type="button"> <span data-bind="i18n: 'Delete'"></span> </button> </div> <!-- /ko --> + <div class="selectmenu-item"> <button type="button" class="selectmenu-item-action" - data-bind="text: label, click: $parent.setSize.bind($parent, value)"></button> - <!-- ko if: $data.editable --> + data-bind="text: $size().label, click: setSize.bind($data, $size().value)"></button> + + <!-- ko if: $size().editable --> <button class="action-edit" data-bind=" click: function () { - $parent - .discardCustom() - .edit(value); + discardCustom().edit($size().value); }" type="button"> <span data-bind="i18n: 'Edit'"></span> @@ -71,7 +82,6 @@ <!-- /ko --> </div> </li> - <!-- /ko --> <li data-bind="css: { _edit: isCustomVisible() }"> <div class="selectmenu-item"> @@ -102,4 +112,4 @@ </ul> </div> </div> -<label class="admin__control-support-text" data-bind="i18n: 'per page', attr: { for: index }"></label> +<label class="admin__control-support-text" data-bind="i18n: 'per page', attr: { for: index }"></label> \ No newline at end of file diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/sticky/chips.html b/app/code/Magento/Ui/view/base/web/templates/grid/sticky/chips.html index e396c223d8a92a5486335ffb6367c95f087322e6..178e93097966e92b313cb236e6106d34f9bcd134 100644 --- a/app/code/Magento/Ui/view/base/web/templates/grid/sticky/chips.html +++ b/app/code/Magento/Ui/view/base/web/templates/grid/sticky/chips.html @@ -6,7 +6,7 @@ --> <div class="admin__data-grid-filters-current" - data-bind="css: {_show: hasData()}"> + data-bind="css: {_show: hasPreviews()}"> <div class="admin__current-filters-title-wrap"> <span class="admin__current-filters-title" @@ -50,7 +50,7 @@ i18n: 'Clear all', click: clear, attr: { - 'data-action': hasData() ? 'grid-filter-reset' : '' + 'data-action': hasPreviews() ? 'grid-filter-reset' : '' }" ></button> </div> diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/sticky/filters.html b/app/code/Magento/Ui/view/base/web/templates/grid/sticky/filters.html index 9a7e06d5699a531809b9527972df744197a6feab..25c27cfb3ca14b832afc2072b0d9c1691a91f34f 100644 --- a/app/code/Magento/Ui/view/base/web/templates/grid/sticky/filters.html +++ b/app/code/Magento/Ui/view/base/web/templates/grid/sticky/filters.html @@ -17,6 +17,6 @@ attr: {disabled: !hasVisible()}"> <span data-bind="i18n: 'Filters'"></span> </button> - <span class="filters-active" data-bind="text: $data.active().length || ''"></span> <!-- Added the amount of selected filters --> + <span class="filters-active" data-bind="text: countActive() || ''"></span> <!-- Added the amount of selected filters --> </div> </div> diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/sticky/listing.html b/app/code/Magento/Ui/view/base/web/templates/grid/sticky/listing.html index fc0c43a4b43315304418d1e1ecbdc602236c06c9..880b52f4dcdbacfb654ecbb09c326e210f335372 100644 --- a/app/code/Magento/Ui/view/base/web/templates/grid/sticky/listing.html +++ b/app/code/Magento/Ui/view/base/web/templates/grid/sticky/listing.html @@ -7,7 +7,7 @@ <div class="admin__data-grid-wrap" data-role="sticky-el-root"> <table class="data-grid"> <thead> - <tr data-bind="foreach: elems"> + <tr data-bind="foreach: {data: visibleColumns, as: '$col'}"> <!-- ko template: getHeader() --><!-- /ko --> </tr> </thead> diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/sticky/toolbar.html b/app/code/Magento/Ui/view/base/web/templates/grid/sticky/toolbar.html index 156873520509f2e1c3cc25168f761102344d448d..140a524228935c731d53b250095251f92eb250c9 100644 --- a/app/code/Magento/Ui/view/base/web/templates/grid/sticky/toolbar.html +++ b/app/code/Magento/Ui/view/base/web/templates/grid/sticky/toolbar.html @@ -4,38 +4,25 @@ * See COPYING.txt for license details. */ --> - <div class="admin__data-grid-header" data-role="sticky-el-root"> <div class="admin__data-grid-header-row"> - <!-- ko foreach: getRegion('bottom') --> - <!-- ko if: $data.componentType === 'massaction' --> - <!-- ko template: getTemplate() --><!-- /ko --> - <!-- /ko --> + <!-- ko scope: requestChild('listing_massaction') --> + <!-- ko template: getTemplate() --><!-- /ko --> <!-- /ko --> - <!-- ko foreach: getRegion('bottom') --> - <!-- ko if: $data.componentType === 'paging' --> - <!-- ko template: totalTmpl --><!-- /ko --> - <!-- /ko --> + <!-- ko scope: requestChild('listing_paging') --> + <!-- ko template: totalTmpl --><!-- /ko --> <!-- /ko --> <!-- ko foreach: getRegion('dataGridFilters') --> <!-- ko template: $data.stickyTmpl || getTemplate() --><!-- /ko --> <!-- /ko --> - <div class="admin__data-grid-actions-wrap"> - <!-- ko foreach: getRegion('dataGridActions') --> - <!-- ko template: getTemplate() --><!-- /ko --> - <!-- /ko --> + <div class="admin__data-grid-actions-wrap" data-bind="foreach: getRegion('dataGridActions')"> + <!-- ko template: getTemplate() --><!-- /ko --> </div> - <!-- ko foreach: getRegion('bottom') --> - <!-- ko if: $data.componentType === 'paging' --> - <!-- ko template: getTemplate() --><!-- /ko --> - <!-- /ko --> + <!-- ko scope: requestChild('listing_paging') --> + <!-- ko template: getTemplate() --><!-- /ko --> <!-- /ko --> </div> </div> -<!-- ko foreach: getRegion('dataGridFilters') --> - <!-- ko if: $data.index === 'listing_filters' --> - <!-- ko scope: chips --> - <!-- ko template: $data.stickyTmpl || getTemplate() --> - <!-- /ko --> - <!-- /ko --> +<!-- ko scope: requestChild('listing_filters_chips') --> + <!-- ko template: $data.stickyTmpl || getTemplate() --> <!-- /ko --> diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/toolbar.html b/app/code/Magento/Ui/view/base/web/templates/grid/toolbar.html index 36482b1d973bae48f5d946dff86c27f6c0bc724e..529b32d7d7a7b43ed1c7c6ce82f72f81210afef4 100644 --- a/app/code/Magento/Ui/view/base/web/templates/grid/toolbar.html +++ b/app/code/Magento/Ui/view/base/web/templates/grid/toolbar.html @@ -5,41 +5,26 @@ */ --> -<div class="admin__data-grid-header" - data-role="data-grid-toolbar"> +<div class="admin__data-grid-header" data-role="data-grid-toolbar"> <div class="admin__data-grid-header-row"> - <div class="admin__data-grid-actions-wrap"> - <!-- ko foreach: getRegion('dataGridActions') --> + <div class="admin__data-grid-actions-wrap" data-bind="foreach: getRegion('dataGridActions')"> <!-- ko template: getTemplate() --><!-- /ko --> - <!-- /ko --> </div> <!-- ko foreach: getRegion('dataGridFilters') --> - <!-- ko template: getTemplate() --><!-- /ko --> + <!-- ko template: getTemplate() --><!-- /ko --> <!-- /ko --> </div> <div class="admin__data-grid-header-row row row-gutter"> - <div class="col-xs-2"> - <!-- ko foreach: getRegion('bottom') --> - <!-- ko if: $data.componentType === 'massaction' --> - <!-- ko template: getTemplate() --><!-- /ko --> - <!-- /ko --> - <!-- /ko --> + <div class="col-xs-2" data-bind="scope: requestChild('listing_massaction')"> + <!-- ko template: getTemplate() --><!-- /ko --> </div> <div class="col-xs-10"> <div class="row"> - <div class="col-xs-3"> - <!-- ko foreach: getRegion('bottom') --> - <!-- ko if: $data.componentType === 'paging' --> - <!-- ko template: totalTmpl --><!-- /ko --> - <!-- /ko --> - <!-- /ko --> + <div class="col-xs-3" data-bind="scope: requestChild('listing_paging')"> + <!-- ko template: totalTmpl --><!-- /ko --> </div> - <div class="col-xs-9"> - <!-- ko foreach: getRegion('bottom') --> - <!-- ko if: $data.componentType === 'paging' --> - <!-- ko template: getTemplate() --><!-- /ko --> - <!-- /ko --> - <!-- /ko --> + <div class="col-xs-9" data-bind="scope: requestChild('listing_paging')"> + <!-- ko template: getTemplate() --><!-- /ko --> </div> </div> </div> diff --git a/app/code/Magento/Ui/view/base/web/templates/modal/modal-custom.html b/app/code/Magento/Ui/view/base/web/templates/modal/modal-custom.html index 990630aa02b9c1ee71088b56bd345ed33e4d3a6e..0a45aa20a02e275baf8433894568b86b7ff2a87f 100644 --- a/app/code/Magento/Ui/view/base/web/templates/modal/modal-custom.html +++ b/app/code/Magento/Ui/view/base/web/templates/modal/modal-custom.html @@ -9,8 +9,11 @@ <% if(data.responsive){ %><%= data.responsiveClass %><% } %> <% if(data.innerScroll){ %><%= data.innerScrollClass %><% } %>" data-role="modal" - data-type="<%= data.type %>"> - <div class="modal-inner-wrap"> + data-type="<%= data.type %>" + tabindex="0"> + <div data-role="focusable-start" tabindex="0"></div> + <div class="modal-inner-wrap" + data-role="focusable-scope"> <header class="modal-header"> <% if(data.title){ %> <h1 class="modal-title" @@ -35,4 +38,5 @@ </footer> <% } %> </div> + <div data-role="focusable-end" tabindex="0"></div> </aside> diff --git a/app/code/Magento/Ui/view/base/web/templates/modal/modal-popup.html b/app/code/Magento/Ui/view/base/web/templates/modal/modal-popup.html index 43ac20b2aeb1e26bce6330232755be77e5c4605c..22aad07f4ea2983750a7957ce1e5f74357fce4be 100644 --- a/app/code/Magento/Ui/view/base/web/templates/modal/modal-popup.html +++ b/app/code/Magento/Ui/view/base/web/templates/modal/modal-popup.html @@ -10,8 +10,11 @@ <% if(data.responsive){ %><%= data.responsiveClass %><% } %> <% if(data.innerScroll){ %><%= data.innerScrollClass %><% } %>" data-role="modal" - data-type="<%= data.type %>"> - <div class="modal-inner-wrap"> + data-type="<%= data.type %>" + tabindex="0"> + <div data-role="focusable-start" tabindex="0"></div> + <div class="modal-inner-wrap" + data-role="focusable-scope"> <header class="modal-header"> <% if(data.title){ %> <h1 class="modal-title" @@ -38,4 +41,5 @@ </footer> <% } %> </div> + <div data-role="focusable-end" tabindex="0"></div> </aside> diff --git a/app/code/Magento/Ui/view/base/web/templates/modal/modal-slide.html b/app/code/Magento/Ui/view/base/web/templates/modal/modal-slide.html index abffa4573962a7acc129a0f3f0a96c2765240731..8b828035939a0dc928e6cec6a61a31e665599275 100644 --- a/app/code/Magento/Ui/view/base/web/templates/modal/modal-slide.html +++ b/app/code/Magento/Ui/view/base/web/templates/modal/modal-slide.html @@ -9,8 +9,11 @@ class="modal-<%= data.type %> <%= data.modalClass %> <% if(data.innerScroll){ %><%= data.innerScrollClass %><% } %>" data-role="modal" - data-type="<%= data.type %>"> - <div class="modal-inner-wrap"> + data-type="<%= data.type %>" + tabindex="0"> + <div data-role="focusable-start" tabindex="0"></div> + <div class="modal-inner-wrap" + data-role="focusable-scope"> <header class="modal-header"> <% if(data.title){ %> <h1 class="modal-title" @@ -40,4 +43,5 @@ </header> <div class="modal-content" data-role="content"></div> </div> + <div data-role="focusable-end" tabindex="0"></div> </aside> diff --git a/app/code/Magento/Ups/view/adminhtml/templates/system/shipping/carrier_config.phtml b/app/code/Magento/Ups/view/adminhtml/templates/system/shipping/carrier_config.phtml index ec52625364c6991569073e55f5e9b9098759ad78..c3ca415c7c2869ffad51232487b894c7599a2f9f 100644 --- a/app/code/Magento/Ups/view/adminhtml/templates/system/shipping/carrier_config.phtml +++ b/app/code/Magento/Ups/view/adminhtml/templates/system/shipping/carrier_config.phtml @@ -84,13 +84,13 @@ require(["prototype"], function(){ 'carriers_ups_mode_xml']; this.onlyUpsElements = ['carriers_ups_gateway_url']; - this.storedOriginShipment = '<?php /* @escapeNotVerified */ echo $storedOriginShipment ?>'; - this.storedFreeShipment = '<?php /* @escapeNotVerified */ echo $storedFreeShipment ?>'; - this.storedUpsType = '<?php /* @escapeNotVerified */ echo $storedUpsType ?>'; + this.storedOriginShipment = '<?php /* @noEscape */ echo $storedOriginShipment ?>'; + this.storedFreeShipment = '<?php /* @noEscape */ echo $storedFreeShipment ?>'; + this.storedUpsType = '<?php /* @noEscape */ echo $storedUpsType ?>'; <?php /** @var $jsonHelper \Magento\Framework\Json\Helper\Data */ $jsonHelper = $this->helper('Magento\Framework\Json\Helper\Data'); ?> - this.storedAllowedMethods = <?php /* @escapeNotVerified */ echo $jsonHelper->jsonEncode($storedAllowedMethods) ?>; - this.originShipmentObj = <?php /* @escapeNotVerified */ echo $jsonHelper->jsonEncode($orShipArr) ?>; - this.originShipmentObj['default'] = <?php /* @escapeNotVerified */ echo $jsonHelper->jsonEncode($defShipArr) ?>; + this.storedAllowedMethods = <?php /* @noEscape */ echo $jsonHelper->jsonEncode($storedAllowedMethods) ?>; + this.originShipmentObj = <?php /* @noEscape */ echo $jsonHelper->jsonEncode($orShipArr) ?>; + this.originShipmentObj['default'] = <?php /* @noEscape */ echo $jsonHelper->jsonEncode($defShipArr) ?>; this.setFormValues(); Event.observe($(this.carriersUpsTypeId), 'change', this.setFormValues.bind(this)); diff --git a/app/code/Magento/UrlRewrite/Model/ResourceModel/UrlRewrite.php b/app/code/Magento/UrlRewrite/Model/ResourceModel/UrlRewrite.php index 9ec5373b31049eda08da8649cb330531508b9956..1ad4464084510c956d4607d6d13967ee858bc042 100644 --- a/app/code/Magento/UrlRewrite/Model/ResourceModel/UrlRewrite.php +++ b/app/code/Magento/UrlRewrite/Model/ResourceModel/UrlRewrite.php @@ -7,7 +7,7 @@ */ namespace Magento\UrlRewrite\Model\ResourceModel; -class UrlRewrite extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class UrlRewrite extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Define main table diff --git a/app/code/Magento/UrlRewrite/Model/ResourceModel/UrlRewriteCollection.php b/app/code/Magento/UrlRewrite/Model/ResourceModel/UrlRewriteCollection.php index a1306aec4f126ea80326f9ff2f66db068b7b98a5..3f3c85e71a415b54d947f95575da60df885eda5a 100644 --- a/app/code/Magento/UrlRewrite/Model/ResourceModel/UrlRewriteCollection.php +++ b/app/code/Magento/UrlRewrite/Model/ResourceModel/UrlRewriteCollection.php @@ -7,7 +7,7 @@ */ namespace Magento\UrlRewrite\Model\ResourceModel; -class UrlRewriteCollection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class UrlRewriteCollection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Store Manager Model @@ -23,7 +23,7 @@ class UrlRewriteCollection extends \Magento\Framework\Model\ModelResource\Db\Col * @param \Magento\Framework\Event\ManagerInterface $eventManager * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param mixed $connection - * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource + * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource */ public function __construct( \Magento\Framework\Data\Collection\EntityFactoryInterface $entityFactory, @@ -32,7 +32,7 @@ class UrlRewriteCollection extends \Magento\Framework\Model\ModelResource\Db\Col \Magento\Framework\Event\ManagerInterface $eventManager, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Framework\DB\Adapter\AdapterInterface $connection = null, - \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null + \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null ) { parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource); $this->storeManager = $storeManager; diff --git a/app/code/Magento/UrlRewrite/Test/Unit/Model/ResourceModel/UrlRewriteCollectionTest.php b/app/code/Magento/UrlRewrite/Test/Unit/Model/ResourceModel/UrlRewriteCollectionTest.php index 82625593a82b1c068cb2d899d0313f72e05ff1b7..7d708717917037b9ce9aea530e8e5d29207dc4e0 100644 --- a/app/code/Magento/UrlRewrite/Test/Unit/Model/ResourceModel/UrlRewriteCollectionTest.php +++ b/app/code/Magento/UrlRewrite/Test/Unit/Model/ResourceModel/UrlRewriteCollectionTest.php @@ -15,7 +15,7 @@ class UrlRewriteCollectionTest extends \PHPUnit_Framework_TestCase protected $storeManager; /** - * @var \Magento\Framework\Model\ModelResource\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject */ protected $resource; @@ -51,7 +51,7 @@ class UrlRewriteCollectionTest extends \PHPUnit_Framework_TestCase false ); $this->resource = $this->getMockForAbstractClass( - 'Magento\Framework\Model\ModelResource\Db\AbstractDb', + 'Magento\Framework\Model\ResourceModel\Db\AbstractDb', [], '', false, diff --git a/app/code/Magento/User/Model/ResourceModel/Role/User/Collection.php b/app/code/Magento/User/Model/ResourceModel/Role/User/Collection.php index 72289ed3efbfa33ccd0b1e17a97f28bf74648dea..908b36c4f9d9dd607eef7d350a01fe85385d64e2 100644 --- a/app/code/Magento/User/Model/ResourceModel/Role/User/Collection.php +++ b/app/code/Magento/User/Model/ResourceModel/Role/User/Collection.php @@ -10,7 +10,7 @@ namespace Magento\User\Model\ResourceModel\Role\User; * * @author Magento Core Team <core@magentocommerce.com> */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Initialize resource model diff --git a/app/code/Magento/User/Model/ResourceModel/User.php b/app/code/Magento/User/Model/ResourceModel/User.php index 9aff361664a589fb5a23c660c3986e9b16394f4f..cf6e858505150bed5f824bfc19b726ed83870fdb 100644 --- a/app/code/Magento/User/Model/ResourceModel/User.php +++ b/app/code/Magento/User/Model/ResourceModel/User.php @@ -15,7 +15,7 @@ use Magento\User\Model\User as ModelUser; * ACL user resource * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ -class User extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class User extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * @var \Magento\Framework\Acl\CacheInterface @@ -44,14 +44,14 @@ class User extends \Magento\Framework\Model\ModelResource\Db\AbstractDb /** * Construct * - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Framework\Acl\CacheInterface $aclCache * @param \Magento\Authorization\Model\RoleFactory $roleFactory * @param \Magento\Framework\Stdlib\DateTime $dateTime * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Framework\Acl\CacheInterface $aclCache, \Magento\Authorization\Model\RoleFactory $roleFactory, \Magento\Framework\Stdlib\DateTime $dateTime, diff --git a/app/code/Magento/User/Model/ResourceModel/User/Collection.php b/app/code/Magento/User/Model/ResourceModel/User/Collection.php index cff70efd8b3411c130ad909ea8ab3f08ce35cc84..e79fec07cd049b676e717f3e5485ab70a53e50b0 100644 --- a/app/code/Magento/User/Model/ResourceModel/User/Collection.php +++ b/app/code/Magento/User/Model/ResourceModel/User/Collection.php @@ -10,7 +10,7 @@ namespace Magento\User\Model\ResourceModel\User; * * @author Magento Core Team <core@magentocommerce.com> */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Define resource model diff --git a/app/code/Magento/User/Model/ResourceModel/User/Locked/Collection.php b/app/code/Magento/User/Model/ResourceModel/User/Locked/Collection.php index 73b0002b360778fb0ac792ed35fd7eb985c4a7e7..0c13210105687118a970c87c2c6ce9c37863ba47 100644 --- a/app/code/Magento/User/Model/ResourceModel/User/Locked/Collection.php +++ b/app/code/Magento/User/Model/ResourceModel/User/Locked/Collection.php @@ -15,7 +15,7 @@ class Collection extends \Magento\User\Model\ResourceModel\User\Collection /** * Collection Init Select * - * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource + * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource * @return $this */ protected function _initSelect() diff --git a/app/code/Magento/User/Model/User.php b/app/code/Magento/User/Model/User.php index c8682cb173de07bc25d4555b6473bc1d7c45695f..1333f17ea5b8672358f596fb38bc0476f907a726 100644 --- a/app/code/Magento/User/Model/User.php +++ b/app/code/Magento/User/Model/User.php @@ -124,7 +124,7 @@ class User extends AbstractModel implements StorageInterface, UserInterface * @param \Magento\Framework\Encryption\EncryptorInterface $encryptor * @param \Magento\Framework\Stdlib\DateTime $dateTime * @param \Magento\Store\Model\StoreManagerInterface $storeManager - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param UserValidationRules $validationRules * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data @@ -142,7 +142,7 @@ class User extends AbstractModel implements StorageInterface, UserInterface \Magento\Framework\Stdlib\DateTime $dateTime, \Magento\Store\Model\StoreManagerInterface $storeManager, UserValidationRules $validationRules, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/User/Model/Backend/Observer/AuthObserver.php b/app/code/Magento/User/Observer/Backend/AuthObserver.php similarity index 78% rename from app/code/Magento/User/Model/Backend/Observer/AuthObserver.php rename to app/code/Magento/User/Observer/Backend/AuthObserver.php index 70b8f4e0ac9d229926d39f86e377542be9c5dbb1..ac50a13d6f74d494ad051ad48e35afdae61367a3 100644 --- a/app/code/Magento/User/Model/Backend/Observer/AuthObserver.php +++ b/app/code/Magento/User/Observer/Backend/AuthObserver.php @@ -4,84 +4,92 @@ * See COPYING.txt for license details. */ -namespace Magento\User\Model\Backend\Observer; +namespace Magento\User\Observer\Backend; +use Magento\Backend\Model\Auth\Session; +use Magento\Backend\Model\UrlInterface; +use Magento\Framework\Encryption\EncryptorInterface; use Magento\Framework\Event\Observer as EventObserver; use Magento\Framework\Exception\State\UserLockedException; -use Magento\Framework\Encryption\Encryptor; +use Magento\Framework\Message\ManagerInterface; +use Magento\User\Model\Backend\Config\ObserverConfig; +use Magento\User\Model\ResourceModel\User as ResourceUser; use Magento\User\Model\User; +use Magento\Framework\Event\ObserverInterface; +use Magento\User\Model\UserFactory; /** * User backend observer model for authentication + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ -class AuthObserver +class AuthObserver implements ObserverInterface { /** * Backend configuration interface * - * @var \Magento\User\Model\Backend\Config\ObserverConfig + * @var ObserverConfig */ protected $observerConfig; /** * Admin user resource model * - * @var \Magento\User\Model\ResourceModel\User + * @var ResourceUser */ protected $userResource; /** * Backend url interface * - * @var \Magento\Backend\Model\UrlInterface + * @var UrlInterface */ protected $url; /** * Backend authorization session * - * @var \Magento\Backend\Model\Auth\Session + * @var Session */ protected $authSession; /** * Factory class for user model * - * @var \Magento\User\Model\UserFactory + * @var UserFactory */ protected $userFactory; /** * Encryption model * - * @var \Magento\Framework\Encryption\EncryptorInterface + * @var EncryptorInterface */ protected $encryptor; /** * Message manager interface * - * @var \Magento\Framework\Message\ManagerInterface + * @var ManagerInterface */ protected $messageManager; /** - * @param \Magento\User\Model\Backend\Config\ObserverConfig $observerConfig - * @param \Magento\User\Model\ResourceModel\User $userResource - * @param \Magento\Backend\Model\UrlInterface $url - * @param \Magento\Backend\Model\Auth\Session $authSession - * @param \Magento\User\Model\UserFactory $userFactory - * @param \Magento\Framework\Encryption\EncryptorInterface $encryptor - * @param \Magento\Framework\Message\ManagerInterface $messageManager + * @param ObserverConfig $observerConfig + * @param ResourceUser $userResource + * @param UrlInterface $url + * @param Session $authSession + * @param UserFactory $userFactory + * @param EncryptorInterface $encryptor + * @param ManagerInterface $messageManager */ public function __construct( - \Magento\User\Model\Backend\Config\ObserverConfig $observerConfig, - \Magento\User\Model\ResourceModel\User $userResource, - \Magento\Backend\Model\UrlInterface $url, - \Magento\Backend\Model\Auth\Session $authSession, - \Magento\User\Model\UserFactory $userFactory, - \Magento\Framework\Encryption\EncryptorInterface $encryptor, - \Magento\Framework\Message\ManagerInterface $messageManager + ObserverConfig $observerConfig, + ResourceUser $userResource, + UrlInterface $url, + Session $authSession, + UserFactory $userFactory, + EncryptorInterface $encryptor, + ManagerInterface $messageManager ) { $this->observerConfig = $observerConfig; $this->userResource = $userResource; @@ -99,7 +107,7 @@ class AuthObserver * @return void * @throws \Magento\Framework\Exception\LocalizedException */ - public function adminAuthenticate($observer) + public function execute(EventObserver $observer) { $password = $observer->getEvent()->getPassword(); /** @var User $user */ diff --git a/app/code/Magento/User/Observer/Backend/CheckAdminPasswordChangeObserver.php b/app/code/Magento/User/Observer/Backend/CheckAdminPasswordChangeObserver.php new file mode 100644 index 0000000000000000000000000000000000000000..3bf06a441e248c7f0cfd6f676f95322e02bbe76a --- /dev/null +++ b/app/code/Magento/User/Observer/Backend/CheckAdminPasswordChangeObserver.php @@ -0,0 +1,82 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\User\Observer\Backend; + +use Magento\Framework\Event\Observer as EventObserver; +use Magento\Framework\Event\ObserverInterface; + +/** + * User backend observer model for passwords + */ +class CheckAdminPasswordChangeObserver implements ObserverInterface +{ + /** + * Admin user resource model + * + * @var \Magento\User\Model\ResourceModel\User + */ + protected $userResource; + + /** + * Encryption model + * + * @var \Magento\Framework\Encryption\EncryptorInterface + */ + protected $encryptor; + + /** + * @param \Magento\User\Model\ResourceModel\User $userResource + * @param \Magento\Framework\Encryption\EncryptorInterface $encryptor + */ + public function __construct( + \Magento\User\Model\ResourceModel\User $userResource, + \Magento\Framework\Encryption\EncryptorInterface $encryptor + ) { + $this->userResource = $userResource; + $this->encryptor = $encryptor; + } + + /** + * Harden admin password change. + * + * New password must be minimum 7 chars length and include alphanumeric characters + * The password is compared to at least last 4 previous passwords to prevent setting them again + * + * @param EventObserver $observer + * @return void + * @throws \Magento\Framework\Exception\LocalizedException + */ + public function execute(EventObserver $observer) + { + /* @var $user \Magento\User\Model\User */ + $user = $observer->getEvent()->getObject(); + + if ($user->getNewPassword()) { + $password = $user->getNewPassword(); + } else { + $password = $user->getPassword(); + } + + if ($password && !$user->getForceNewPassword() && $user->getId()) { + if ($this->encryptor->isValidHash($password, $user->getOrigData('password'))) { + throw new \Magento\Framework\Exception\LocalizedException( + __('Sorry, but this password has already been used. Please create another.') + ); + } + + // check whether password was used before + $passwordHash = $this->encryptor->getHash($password, false); + foreach ($this->userResource->getOldPasswords($user) as $oldPasswordHash) { + if ($passwordHash === $oldPasswordHash) { + throw new \Magento\Framework\Exception\LocalizedException( + __('Sorry, but this password has already been used. Please create another.') + ); + } + } + } + } +} diff --git a/app/code/Magento/User/Model/Backend/Observer/PasswordObserver.php b/app/code/Magento/User/Observer/Backend/ForceAdminPasswordChangeObserver.php similarity index 56% rename from app/code/Magento/User/Model/Backend/Observer/PasswordObserver.php rename to app/code/Magento/User/Observer/Backend/ForceAdminPasswordChangeObserver.php index d012aec6f84820b62f8757fb5a9588006a843bf2..5293b69e43cca85da24b42f3af9e8ce4bd023d52 100644 --- a/app/code/Magento/User/Model/Backend/Observer/PasswordObserver.php +++ b/app/code/Magento/User/Observer/Backend/ForceAdminPasswordChangeObserver.php @@ -4,14 +4,15 @@ * See COPYING.txt for license details. */ -namespace Magento\User\Model\Backend\Observer; +namespace Magento\User\Observer\Backend; use Magento\Framework\Event\Observer as EventObserver; +use Magento\Framework\Event\ObserverInterface; /** * User backend observer model for passwords */ -class PasswordObserver +class ForceAdminPasswordChangeObserver implements ObserverInterface { /** * Backend configuration interface @@ -27,13 +28,6 @@ class PasswordObserver */ protected $authorization; - /** - * Admin user resource model - * - * @var \Magento\User\Model\ResourceModel\User - */ - protected $userResource; - /** * Backend url interface * @@ -55,13 +49,6 @@ class PasswordObserver */ protected $authSession; - /** - * Encryption model - * - * @var \Magento\Framework\Encryption\EncryptorInterface - */ - protected $encryptor; - /** * Action flag * @@ -79,107 +66,37 @@ class PasswordObserver /** * @param \Magento\Framework\AuthorizationInterface $authorization * @param \Magento\User\Model\Backend\Config\ObserverConfig $observerConfig - * @param \Magento\User\Model\ResourceModel\User $userResource * @param \Magento\Backend\Model\UrlInterface $url * @param \Magento\Backend\Model\Session $session * @param \Magento\Backend\Model\Auth\Session $authSession - * @param \Magento\Framework\Encryption\EncryptorInterface $encryptor * @param \Magento\Framework\App\ActionFlag $actionFlag * @param \Magento\Framework\Message\ManagerInterface $messageManager */ public function __construct( \Magento\Framework\AuthorizationInterface $authorization, \Magento\User\Model\Backend\Config\ObserverConfig $observerConfig, - \Magento\User\Model\ResourceModel\User $userResource, \Magento\Backend\Model\UrlInterface $url, \Magento\Backend\Model\Session $session, \Magento\Backend\Model\Auth\Session $authSession, - \Magento\Framework\Encryption\EncryptorInterface $encryptor, \Magento\Framework\App\ActionFlag $actionFlag, \Magento\Framework\Message\ManagerInterface $messageManager ) { $this->authorization = $authorization; $this->observerConfig = $observerConfig; - $this->userResource = $userResource; $this->url = $url; $this->session = $session; $this->authSession = $authSession; - $this->encryptor = $encryptor; $this->actionFlag = $actionFlag; $this->messageManager = $messageManager; } - /** - * Harden admin password change. - * - * New password must be minimum 7 chars length and include alphanumeric characters - * The password is compared to at least last 4 previous passwords to prevent setting them again - * - * @param EventObserver $observer - * @return void - * @throws \Magento\Framework\Exception\LocalizedException - */ - public function checkAdminPasswordChange($observer) - { - /* @var $user \Magento\User\Model\User */ - $user = $observer->getEvent()->getObject(); - - if ($user->getNewPassword()) { - $password = $user->getNewPassword(); - } else { - $password = $user->getPassword(); - } - - if ($password && !$user->getForceNewPassword() && $user->getId()) { - if ($this->encryptor->isValidHash($password, $user->getOrigData('password'))) { - throw new \Magento\Framework\Exception\LocalizedException( - __('Sorry, but this password has already been used. Please create another.') - ); - } - - // check whether password was used before - $resource = $this->userResource; - $passwordHash = $this->encryptor->getHash($password, false); - foreach ($resource->getOldPasswords($user) as $oldPasswordHash) { - if ($passwordHash === $oldPasswordHash) { - throw new \Magento\Framework\Exception\LocalizedException( - __('Sorry, but this password has already been used. Please create another.') - ); - } - } - } - } - - /** - * Save new admin password - * - * @param EventObserver $observer - * @return void - */ - public function trackAdminNewPassword($observer) - { - /* @var $user \Magento\User\Model\User */ - $user = $observer->getEvent()->getObject(); - if ($user->getId()) { - $password = $user->getNewPassword(); - $passwordLifetime = $this->observerConfig->getAdminPasswordLifetime(); - if ($passwordLifetime && $password && !$user->getForceNewPassword()) { - $resource = $this->userResource; - $passwordHash = $this->encryptor->getHash($password, false); - $resource->trackPassword($user, $passwordHash, $passwordLifetime); - $this->messageManager->getMessages()->deleteMessageByIdentifier('magento_user_password_expired'); - $this->authSession->unsPciAdminUserIsPasswordExpired(); - } - } - } - /** * Force admin to change password * * @param EventObserver $observer * @return void */ - public function forceAdminPasswordChange($observer) + public function execute(EventObserver $observer) { if (!$this->observerConfig->isPasswordChangeForced()) { return; diff --git a/app/code/Magento/User/Observer/Backend/TrackAdminNewPasswordObserver.php b/app/code/Magento/User/Observer/Backend/TrackAdminNewPasswordObserver.php new file mode 100644 index 0000000000000000000000000000000000000000..790d78301f058805b12dcb779619fe1e8dfb4a51 --- /dev/null +++ b/app/code/Magento/User/Observer/Backend/TrackAdminNewPasswordObserver.php @@ -0,0 +1,94 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\User\Observer\Backend; + +use Magento\Framework\Event\Observer as EventObserver; +use Magento\Framework\Event\ObserverInterface; + +/** + * User backend observer model for passwords + */ +class TrackAdminNewPasswordObserver implements ObserverInterface +{ + /** + * Backend configuration interface + * + * @var \Magento\User\Model\Backend\Config\ObserverConfig + */ + protected $observerConfig; + + /** + * Admin user resource model + * + * @var \Magento\User\Model\ResourceModel\User + */ + protected $userResource; + + /** + * Backend authorization session + * + * @var \Magento\Backend\Model\Auth\Session + */ + protected $authSession; + + /** + * Encryption model + * + * @var \Magento\Framework\Encryption\EncryptorInterface + */ + protected $encryptor; + + /** + * Message manager interface + * + * @var \Magento\Framework\Message\ManagerInterface + */ + protected $messageManager; + + /** + * @param \Magento\User\Model\Backend\Config\ObserverConfig $observerConfig + * @param \Magento\User\Model\ResourceModel\User $userResource + * @param \Magento\Backend\Model\Auth\Session $authSession + * @param \Magento\Framework\Encryption\EncryptorInterface $encryptor + * @param \Magento\Framework\Message\ManagerInterface $messageManager + */ + public function __construct( + \Magento\User\Model\Backend\Config\ObserverConfig $observerConfig, + \Magento\User\Model\ResourceModel\User $userResource, + \Magento\Backend\Model\Auth\Session $authSession, + \Magento\Framework\Encryption\EncryptorInterface $encryptor, + \Magento\Framework\Message\ManagerInterface $messageManager + ) { + $this->observerConfig = $observerConfig; + $this->userResource = $userResource; + $this->authSession = $authSession; + $this->encryptor = $encryptor; + $this->messageManager = $messageManager; + } + + /** + * Save new admin password + * + * @param EventObserver $observer + * @return void + */ + public function execute(EventObserver $observer) + { + /* @var $user \Magento\User\Model\User */ + $user = $observer->getEvent()->getObject(); + if ($user->getId()) { + $password = $user->getNewPassword(); + $passwordLifetime = $this->observerConfig->getAdminPasswordLifetime(); + if ($passwordLifetime && $password && !$user->getForceNewPassword()) { + $passwordHash = $this->encryptor->getHash($password, false); + $this->userResource->trackPassword($user, $passwordHash, $passwordLifetime); + $this->messageManager->getMessages()->deleteMessageByIdentifier('magento_user_password_expired'); + $this->authSession->unsPciAdminUserIsPasswordExpired(); + } + } + } +} diff --git a/app/code/Magento/User/Test/Unit/Model/Backend/Observer/PasswordObserverTest.php b/app/code/Magento/User/Test/Unit/Model/Backend/Observer/PasswordObserverTest.php deleted file mode 100644 index 2ff18f64cdc05174c24e382f696cf0f611fba234..0000000000000000000000000000000000000000 --- a/app/code/Magento/User/Test/Unit/Model/Backend/Observer/PasswordObserverTest.php +++ /dev/null @@ -1,308 +0,0 @@ -<?php -/** - * Copyright © 2015 Magento. All rights reserved. - * See COPYING.txt for license details. - */ - -namespace Magento\User\Test\Unit\Model\Backend\Observer; - -/** - * Test class for Magento\User\Model\Backend\Observer\PasswordObserver - * @SuppressWarnings(PHPMD.CouplingBetweenObjects) - */ -class PasswordObserverTest extends \PHPUnit_Framework_TestCase -{ - /** @var \Magento\Framework\AuthorizationInterface|\PHPUnit_Framework_MockObject_MockObject */ - protected $authMock; - - /** @var \Magento\User\Model\Backend\Config\ObserverConfig */ - protected $observerConfig; - - /** @var \Magento\Backend\App\ConfigInterface|\PHPUnit_Framework_MockObject_MockObject */ - protected $configInterfaceMock; - - /** @var \Magento\User\Model\ResourceModel\User|\PHPUnit_Framework_MockObject_MockObject */ - protected $userMock; - - /** @var \Magento\Backend\Model\UrlInterface|\PHPUnit_Framework_MockObject_MockObject */ - protected $urlInterfaceMock; - - /** @var \Magento\Backend\Model\Session|\PHPUnit_Framework_MockObject_MockObject */ - protected $sessionMock; - - /** @var \Magento\Backend\Model\Auth\Session|\PHPUnit_Framework_MockObject_MockObject */ - protected $authSessionMock; - - /** @var \Magento\Framework\Encryption\EncryptorInterface|\PHPUnit_Framework_MockObject_MockObject */ - protected $encryptorMock; - - /** @var \Magento\Framework\App\ActionFlag|\PHPUnit_Framework_MockObject_MockObject */ - protected $actionFlagMock; - - /** @var \Magento\Framework\Message\ManagerInterface|\PHPUnit_Framework_MockObject_MockObject */ - protected $managerInterfaceMock; - - /** @var \Magento\Framework\Message\MessageInterface|\PHPUnit_Framework_MockObject_MockObject */ - protected $messageInterfaceMock; - - /** @var \Magento\Framework\Event\ManagerInterface|\PHPUnit_Framework_MockObject_MockObject */ - protected $eventManagerMock; - - /** @var \Magento\User\Model\Backend\Observer\PasswordObserver */ - protected $model; - - public function setUp() - { - $this->authMock = $this->getMockBuilder('Magento\Framework\AuthorizationInterface') - ->disableOriginalConstructor() - ->setMethods(['isAllowed']) - ->getMock(); - - $this->configInterfaceMock = $this->getMockBuilder('Magento\Backend\App\ConfigInterface') - ->disableOriginalConstructor() - ->setMethods([]) - ->getMock(); - - $this->userMock = $this->getMockBuilder('Magento\User\Model\ResourceModel\User') - ->disableOriginalConstructor() - ->setMethods([]) - ->getMock(); - - $this->urlInterfaceMock = $this->getMockBuilder('Magento\Backend\Model\UrlInterface') - ->disableOriginalConstructor() - ->setMethods([]) - ->getMock(); - - $this->sessionMock = $this->getMockBuilder('Magento\Backend\Model\Session') - ->disableOriginalConstructor() - ->setMethods([]) - ->getMock(); - - $this->authSessionMock = $this->getMockBuilder('Magento\Backend\Model\Auth\Session') - ->disableOriginalConstructor() - ->setMethods( - [ - 'setPciAdminUserIsPasswordExpired', - 'unsPciAdminUserIsPasswordExpired', - 'getPciAdminUserIsPasswordExpired', - 'isLoggedIn', - 'clearStorage' - ] - )->getMock(); - - $this->encryptorMock = $this->getMockBuilder('\Magento\Framework\Encryption\EncryptorInterface') - ->disableOriginalConstructor() - ->setMethods([]) - ->getMock(); - - $this->actionFlagMock = $this->getMockBuilder('Magento\Framework\App\ActionFlag') - ->disableOriginalConstructor() - ->setMethods([]) - ->getMock(); - - $this->managerInterfaceMock = $this->getMockBuilder('Magento\Framework\Message\ManagerInterface') - ->disableOriginalConstructor() - ->setMethods([]) - ->getMock(); - - $this->messageInterfaceMock = $this->getMockBuilder('Magento\Framework\Message\MessageInterface') - ->disableOriginalConstructor() - ->setMethods([]) - ->getMock(); - - $this->eventManagerMock = $this->getMockBuilder('Magento\Framework\Event\ManagerInterface') - ->disableOriginalConstructor() - ->setMethods([]) - ->getMockForAbstractClass(); - - $helper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this); - - $this->observerConfig = $helper->getObject( - 'Magento\User\Model\Backend\Config\ObserverConfig', - [ - 'backendConfig' => $this->configInterfaceMock - ] - ); - - $this->model = $helper->getObject( - 'Magento\User\Model\Backend\Observer\PasswordObserver', - [ - 'observerConfig' => $this->observerConfig, - 'authorization' => $this->authMock, - 'userResource' => $this->userMock, - 'url' => $this->urlInterfaceMock, - 'session' => $this->sessionMock, - 'authSession' => $this->authSessionMock, - 'actionFlag' => $this->actionFlagMock, - 'encryptor' => $this->encryptorMock, - 'messageManager' => $this->managerInterfaceMock, - 'messageInterface' => $this->messageInterfaceMock, - 'eventManager' => $this->eventManagerMock - ] - ); - } - - public function testCheckAdminPasswordChange() - { - $newPW = "mYn3wpassw0rd"; - $uid = 123; - /** @var \Magento\Framework\Event\Observer|\PHPUnit_Framework_MockObject_MockObject $eventObserverMock */ - $eventObserverMock = $this->getMockBuilder('Magento\Framework\Event\Observer') - ->disableOriginalConstructor() - ->setMethods([]) - ->getMock(); - - /** @var \Magento\Framework\Event|\PHPUnit_Framework_MockObject_MockObject */ - $eventMock = $this->getMockBuilder('Magento\Framework\Event') - ->disableOriginalConstructor() - ->setMethods(['getObject']) - ->getMock(); - - /** @var \Magento\User\Model\User|\PHPUnit_Framework_MockObject_MockObject $userMock */ - $userMock = $this->getMockBuilder('Magento\User\Model\User') - ->disableOriginalConstructor() - ->setMethods(['getId', 'getNewPassword', 'getForceNewPassword']) - ->getMock(); - - $eventObserverMock->expects($this->once())->method('getEvent')->willReturn($eventMock); - $eventMock->expects($this->once())->method('getObject')->willReturn($userMock); - $userMock->expects($this->atLeastOnce())->method('getNewPassword')->willReturn($newPW); - $userMock->expects($this->once())->method('getForceNewPassword')->willReturn(false); - $userMock->expects($this->once())->method('getId')->willReturn($uid); - $this->encryptorMock->expects($this->once())->method('isValidHash')->willReturn(false); - $this->encryptorMock->expects($this->once())->method('getHash')->willReturn(md5($newPW)); - $this->userMock->method('getOldPasswords')->willReturn([md5('pw1'), md5('pw2')]); - - $this->model->checkAdminPasswordChange($eventObserverMock); - } - - public function testCheckAdminPasswordChangeThrowsLocalizedExp() - { - $newPW = "mYn3wpassw0rd"; - $uid = 123; - /** @var \Magento\Framework\Event\Observer|\PHPUnit_Framework_MockObject_MockObject $eventObserverMock */ - $eventObserverMock = $this->getMockBuilder('Magento\Framework\Event\Observer') - ->disableOriginalConstructor() - ->setMethods([]) - ->getMock(); - - /** @var \Magento\Framework\Event|\PHPUnit_Framework_MockObject_MockObject */ - $eventMock = $this->getMockBuilder('Magento\Framework\Event') - ->disableOriginalConstructor() - ->setMethods(['getObject']) - ->getMock(); - - /** @var \Magento\User\Model\User|\PHPUnit_Framework_MockObject_MockObject $userMock */ - $userMock = $this->getMockBuilder('Magento\User\Model\User') - ->disableOriginalConstructor() - ->setMethods(['getId', 'getNewPassword', 'getForceNewPassword']) - ->getMock(); - - $eventObserverMock->expects($this->once())->method('getEvent')->willReturn($eventMock); - $eventMock->expects($this->once())->method('getObject')->willReturn($userMock); - $userMock->expects($this->atLeastOnce())->method('getNewPassword')->willReturn($newPW); - $userMock->expects($this->once())->method('getForceNewPassword')->willReturn(false); - $userMock->expects($this->once())->method('getId')->willReturn($uid); - $this->encryptorMock->expects($this->once())->method('isValidHash')->willReturn(true); - $this->userMock->method('getOldPasswords')->willReturn([md5('pw1'), md5('pw2')]); - - try { - $this->model->checkAdminPasswordChange($eventObserverMock); - } catch (\Magento\Framework\Exception\LocalizedException $expected) { - return; - } - $this->fail('An expected exception has not been raised.'); - } - - public function testTrackAdminPassword() - { - $newPW = "mYn3wpassw0rd"; - $oldPW = "notsecure"; - $uid = 123; - /** @var \Magento\Framework\Event\Observer|\PHPUnit_Framework_MockObject_MockObject $eventObserverMock */ - $eventObserverMock = $this->getMockBuilder('Magento\Framework\Event\Observer') - ->disableOriginalConstructor() - ->setMethods([]) - ->getMock(); - - /** @var \Magento\Framework\Event|\PHPUnit_Framework_MockObject_MockObject */ - $eventMock = $this->getMockBuilder('Magento\Framework\Event') - ->disableOriginalConstructor() - ->setMethods(['getObject']) - ->getMock(); - - /** @var \Magento\User\Model\User|\PHPUnit_Framework_MockObject_MockObject $userMock */ - $userMock = $this->getMockBuilder('Magento\User\Model\User') - ->disableOriginalConstructor() - ->setMethods(['getId', 'getNewPassword', 'getForceNewPassword']) - ->getMock(); - - $eventObserverMock->expects($this->once())->method('getEvent')->willReturn($eventMock); - $eventMock->expects($this->once())->method('getObject')->willReturn($userMock); - $userMock->expects($this->once())->method('getId')->willReturn($uid); - $userMock->expects($this->once())->method('getNewPassword')->willReturn($newPW); - $this->configInterfaceMock - ->expects($this->atLeastOnce()) - ->method('getValue') - ->willReturn(1); - $userMock->expects($this->once())->method('getForceNewPassword')->willReturn(false); - $this->encryptorMock->expects($this->once())->method('getHash')->willReturn(md5($oldPW)); - - /** @var \Magento\Framework\Message\Collection|\PHPUnit_Framework_MockObject_MockObject $collectionMock */ - $collectionMock = $this->getMockBuilder('Magento\Framework\Message\Collection') - ->disableOriginalConstructor() - ->setMethods([]) - ->getMock(); - $this->managerInterfaceMock - ->expects($this->once()) - ->method('getMessages') - ->willReturn($collectionMock); - $this->authSessionMock->expects($this->once())->method('unsPciAdminUserIsPasswordExpired')->willReturn(null); - - $this->model->trackAdminNewPassword($eventObserverMock); - } - - public function testForceAdminPasswordChange() - { - /** @var \Magento\Framework\Event\Observer|\PHPUnit_Framework_MockObject_MockObject $eventObserverMock */ - $eventObserverMock = $this->getMockBuilder('Magento\Framework\Event\Observer') - ->disableOriginalConstructor() - ->setMethods([]) - ->getMock(); - - /** @var \Magento\Framework\Event|\PHPUnit_Framework_MockObject_MockObject */ - $eventMock = $this->getMockBuilder('Magento\Framework\Event') - ->disableOriginalConstructor() - ->setMethods(['getControllerAction', 'getRequest']) - ->getMock(); - - $this->configInterfaceMock - ->expects($this->atLeastOnce()) - ->method('getValue') - ->willReturn(1); - $this->authSessionMock->expects($this->once())->method('isLoggedIn')->willReturn(true); - $eventObserverMock->expects($this->atLeastOnce())->method('getEvent')->willReturn($eventMock); - /** @var \Magento\Framework\App\Action\Action $controllerMock */ - $controllerMock = $this->getMockBuilder('Magento\Framework\App\Action\AbstractAction') - ->disableOriginalConstructor() - ->setMethods(['getRedirect', 'getRequest']) - ->getMockForAbstractClass(); - /** @var \Magento\Framework\App\RequestInterface $requestMock */ - $requestMock = $this->getMockBuilder('Magento\Framework\App\RequestInterface') - ->disableOriginalConstructor() - ->setMethods(['getFullActionName', 'setDispatched']) - ->getMockForAbstractClass(); - $eventMock->expects($this->once())->method('getControllerAction')->willReturn($controllerMock); - $eventMock->expects($this->once())->method('getRequest')->willReturn($requestMock); - $this->authSessionMock->expects($this->once())->method('getPciAdminUserIsPasswordExpired')->willReturn(true); - $requestMock->expects($this->once())->method('getFullActionName')->willReturn('not_in_array'); - - $this->authSessionMock->expects($this->once())->method('clearStorage'); - $this->sessionMock->expects($this->once())->method('clearStorage'); - $this->managerInterfaceMock->expects($this->once())->method('addErrorMessage'); - $controllerMock->expects($this->once())->method('getRequest')->willReturn($requestMock); - $requestMock->expects($this->once())->method('setDispatched')->willReturn(false); - - $this->model->forceAdminPasswordChange($eventObserverMock); - } -} diff --git a/app/code/Magento/User/Test/Unit/Model/ResourceModel/UserTest.php b/app/code/Magento/User/Test/Unit/Model/ResourceModel/UserTest.php index 210c3188d7c33c42c65d7698d00d0120fef8ef7f..c1e054e744327bc04099f00475d219f55d819558 100644 --- a/app/code/Magento/User/Test/Unit/Model/ResourceModel/UserTest.php +++ b/app/code/Magento/User/Test/Unit/Model/ResourceModel/UserTest.php @@ -20,7 +20,7 @@ class UserTest extends \PHPUnit_Framework_TestCase /** @var \Magento\Framework\Acl\CacheInterface|\PHPUnit_Framework_MockObject_MockObject */ protected $aclCacheMock; - /** @var \Magento\Framework\Model\ModelResource\Db\Context|\PHPUnit_Framework_MockObject_MockObject */ + /** @var \Magento\Framework\Model\ResourceModel\Db\Context|\PHPUnit_Framework_MockObject_MockObject */ protected $contextMock; /** @var \Magento\Authorization\Model\RoleFactory|\PHPUnit_Framework_MockObject_MockObject */ diff --git a/app/code/Magento/User/Test/Unit/Model/Backend/Observer/AuthObserverTest.php b/app/code/Magento/User/Test/Unit/Observer/Backend/AuthObserverTest.php similarity index 77% rename from app/code/Magento/User/Test/Unit/Model/Backend/Observer/AuthObserverTest.php rename to app/code/Magento/User/Test/Unit/Observer/Backend/AuthObserverTest.php index 14b0c847a2c7cb6d41a65cadc4ee5b5080b6ef59..2ead73d964d71368db27777d9a1fe075a526e71b 100644 --- a/app/code/Magento/User/Test/Unit/Model/Backend/Observer/AuthObserverTest.php +++ b/app/code/Magento/User/Test/Unit/Observer/Backend/AuthObserverTest.php @@ -4,47 +4,63 @@ * See COPYING.txt for license details. */ -namespace Magento\User\Test\Unit\Model\Backend\Observer; - +namespace Magento\User\Test\Unit\Observer\Backend; + +use Magento\Backend\App\ConfigInterface; +use Magento\Backend\Model\Auth\Session; +use Magento\Backend\Model\UrlInterface; +use Magento\Framework\Encryption\EncryptorInterface; +use Magento\Framework\Event; +use Magento\Framework\Event\ManagerInterface as EventManagerInterface; +use Magento\Framework\Event\Observer; use Magento\Framework\Exception\State\UserLockedException; +use Magento\Framework\Message\Collection; +use Magento\Framework\Message\ManagerInterface; +use Magento\Framework\Message\MessageInterface; +use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; +use Magento\User\Model\Backend\Config\ObserverConfig; +use Magento\User\Model\ResourceModel\User; +use Magento\User\Model\User as ModelUser; +use Magento\User\Model\UserFactory; +use Magento\User\Observer\Backend\AuthObserver; /** - * Test class for Magento\User\Model\Backend\Observer\AuthObserver + * Test class for Magento\User\Observer\Backend\AuthObserver * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class AuthObserverTest extends \PHPUnit_Framework_TestCase { - /** @var \Magento\User\Model\Backend\Config\ObserverConfig */ + /** @var ObserverConfig */ protected $observerConfig; - /** @var \Magento\Backend\App\ConfigInterface|\PHPUnit_Framework_MockObject_MockObject */ + /** @var ConfigInterface|\PHPUnit_Framework_MockObject_MockObject */ protected $configInterfaceMock; - /** @var \Magento\User\Model\ResourceModel\User|\PHPUnit_Framework_MockObject_MockObject */ + /** @var User|\PHPUnit_Framework_MockObject_MockObject */ protected $userMock; - /** @var \Magento\Backend\Model\UrlInterface|\PHPUnit_Framework_MockObject_MockObject */ + /** @var UrlInterface|\PHPUnit_Framework_MockObject_MockObject */ protected $urlInterfaceMock; - /** @var \Magento\Backend\Model\Auth\Session|\PHPUnit_Framework_MockObject_MockObject */ + /** @var Session|\PHPUnit_Framework_MockObject_MockObject */ protected $authSessionMock; - /** @var \Magento\User\Model\UserFactory|\PHPUnit_Framework_MockObject_MockObject */ + /** @var UserFactory|\PHPUnit_Framework_MockObject_MockObject */ protected $userFactoryMock; - /** @var \Magento\Framework\Encryption\EncryptorInterface|\PHPUnit_Framework_MockObject_MockObject */ + /** @var EncryptorInterface|\PHPUnit_Framework_MockObject_MockObject */ protected $encryptorMock; - /** @var \Magento\Framework\Message\ManagerInterface|\PHPUnit_Framework_MockObject_MockObject */ + /** @var ManagerInterface|\PHPUnit_Framework_MockObject_MockObject */ protected $managerInterfaceMock; - /** @var \Magento\Framework\Message\MessageInterface|\PHPUnit_Framework_MockObject_MockObject */ + /** @var MessageInterface|\PHPUnit_Framework_MockObject_MockObject */ protected $messageInterfaceMock; - /** @var \Magento\Framework\Event\ManagerInterface|\PHPUnit_Framework_MockObject_MockObject */ + /** @var EventManagerInterface|\PHPUnit_Framework_MockObject_MockObject */ protected $eventManagerMock; - /** @var \Magento\User\Model\Backend\Observer\AuthObserver */ + /** @var AuthObserver */ protected $model; public function setUp() @@ -101,7 +117,7 @@ class AuthObserverTest extends \PHPUnit_Framework_TestCase ->setMethods([]) ->getMockForAbstractClass(); - $helper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this); + $helper = new ObjectManager($this); $this->observerConfig = $helper->getObject( 'Magento\User\Model\Backend\Config\ObserverConfig', @@ -111,7 +127,7 @@ class AuthObserverTest extends \PHPUnit_Framework_TestCase ); $this->model = $helper->getObject( - 'Magento\User\Model\Backend\Observer\AuthObserver', + 'Magento\User\Observer\Backend\AuthObserver', [ 'observerConfig' => $this->observerConfig, 'userResource' => $this->userMock, @@ -136,19 +152,19 @@ class AuthObserverTest extends \PHPUnit_Framework_TestCase 'expires' => 1, ]; - /** @var \Magento\Framework\Event\Observer|\PHPUnit_Framework_MockObject_MockObject $eventObserverMock */ + /** @var Observer|\PHPUnit_Framework_MockObject_MockObject $eventObserverMock */ $eventObserverMock = $this->getMockBuilder('Magento\Framework\Event\Observer') ->disableOriginalConstructor() ->setMethods([]) ->getMock(); - /** @var \Magento\Framework\Event|\PHPUnit_Framework_MockObject_MockObject */ + /** @var Event|\PHPUnit_Framework_MockObject_MockObject */ $eventMock = $this->getMockBuilder('Magento\Framework\Event') ->disableOriginalConstructor() ->setMethods(['getPassword', 'getUser', 'getResult']) ->getMock(); - /** @var \Magento\User\Model\User|\PHPUnit_Framework_MockObject_MockObject $userMock */ + /** @var ModelUser|\PHPUnit_Framework_MockObject_MockObject $userMock */ $userMock = $this->getMockBuilder('Magento\User\Model\User') ->disableOriginalConstructor() ->setMethods(['getId', 'getLockExpires', 'getPassword', 'save']) @@ -167,7 +183,7 @@ class AuthObserverTest extends \PHPUnit_Framework_TestCase ->method('getValue') ->willReturn(1); - /** @var \Magento\Framework\Message\Collection|\PHPUnit_Framework_MockObject_MockObject $collectionMock */ + /** @var Collection|\PHPUnit_Framework_MockObject_MockObject $collectionMock */ $collectionMock = $this->getMockBuilder('Magento\Framework\Message\Collection') ->disableOriginalConstructor() ->setMethods([]) @@ -182,7 +198,7 @@ class AuthObserverTest extends \PHPUnit_Framework_TestCase $this->authSessionMock->expects($this->once())->method('setPciAdminUserIsPasswordExpired'); $this->encryptorMock->expects($this->once())->method('validateHashVersion')->willReturn(false); - $this->model->adminAuthenticate($eventObserverMock); + $this->model->execute($eventObserverMock); } public function testAdminAuthenticateThrowsException() @@ -191,19 +207,19 @@ class AuthObserverTest extends \PHPUnit_Framework_TestCase $authResult = true; $lockExpires = '3015-07-08 11:14:15.638276'; - /** @var \Magento\Framework\Event\Observer|\PHPUnit_Framework_MockObject_MockObject $eventObserverMock */ + /** @var Observer|\PHPUnit_Framework_MockObject_MockObject $eventObserverMock */ $eventObserverMock = $this->getMockBuilder('Magento\Framework\Event\Observer') ->disableOriginalConstructor() ->setMethods([]) ->getMock(); - /** @var \Magento\Framework\Event|\PHPUnit_Framework_MockObject_MockObject */ + /** @var Event|\PHPUnit_Framework_MockObject_MockObject */ $eventMock = $this->getMockBuilder('Magento\Framework\Event') ->disableOriginalConstructor() ->setMethods(['getPassword', 'getUser', 'getResult']) ->getMock(); - /** @var \Magento\User\Model\User|\PHPUnit_Framework_MockObject_MockObject $userMock */ + /** @var ModelUser|\PHPUnit_Framework_MockObject_MockObject $userMock */ $userMock = $this->getMockBuilder('Magento\User\Model\User') ->disableOriginalConstructor() ->setMethods(['getId', 'getLockExpires', 'getPassword']) @@ -216,7 +232,7 @@ class AuthObserverTest extends \PHPUnit_Framework_TestCase $userMock->expects($this->once())->method('getLockExpires')->willReturn($lockExpires); try { - $this->model->adminAuthenticate($eventObserverMock); + $this->model->execute($eventObserverMock); } catch (UserLockedException $expected) { return; } @@ -231,19 +247,19 @@ class AuthObserverTest extends \PHPUnit_Framework_TestCase $firstFailure = '1965-07-08 11:14:15.638276'; $numOfFailures = 5; - /** @var \Magento\Framework\Event\Observer|\PHPUnit_Framework_MockObject_MockObject $eventObserverMock */ + /** @var Observer|\PHPUnit_Framework_MockObject_MockObject $eventObserverMock */ $eventObserverMock = $this->getMockBuilder('Magento\Framework\Event\Observer') ->disableOriginalConstructor() ->setMethods([]) ->getMock(); - /** @var \Magento\Framework\Event|\PHPUnit_Framework_MockObject_MockObject */ + /** @var Event|\PHPUnit_Framework_MockObject_MockObject */ $eventMock = $this->getMockBuilder('Magento\Framework\Event') ->disableOriginalConstructor() ->setMethods(['getPassword', 'getUser', 'getResult']) ->getMock(); - /** @var \Magento\User\Model\User|\PHPUnit_Framework_MockObject_MockObject $userMock */ + /** @var ModelUser|\PHPUnit_Framework_MockObject_MockObject $userMock */ $userMock = $this->getMockBuilder('Magento\User\Model\User') ->disableOriginalConstructor() ->setMethods(['getId', 'getFailuresNum', 'getFirstFailure']) @@ -262,6 +278,6 @@ class AuthObserverTest extends \PHPUnit_Framework_TestCase $userMock->expects($this->once())->method('getFirstFailure')->willReturn($firstFailure); $this->userMock->expects($this->once())->method('updateFailure'); - $this->model->adminAuthenticate($eventObserverMock); + $this->model->execute($eventObserverMock); } } diff --git a/app/code/Magento/User/Test/Unit/Observer/Backend/CheckAdminPasswordChangeObserverTest.php b/app/code/Magento/User/Test/Unit/Observer/Backend/CheckAdminPasswordChangeObserverTest.php new file mode 100644 index 0000000000000000000000000000000000000000..a4b9b37edbfa869409635d9bdc8627851c82a8f5 --- /dev/null +++ b/app/code/Magento/User/Test/Unit/Observer/Backend/CheckAdminPasswordChangeObserverTest.php @@ -0,0 +1,126 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\User\Test\Unit\Observer\Backend; + +/** + * Test class for \Magento\User\Observer\Backend\CheckAdminPasswordChangeObserver + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + */ +class CheckAdminPasswordChangeObserverTest extends \PHPUnit_Framework_TestCase +{ + /** @var \Magento\User\Model\ResourceModel\User|\PHPUnit_Framework_MockObject_MockObject */ + protected $userMock; + + /** @var \Magento\Framework\Encryption\EncryptorInterface|\PHPUnit_Framework_MockObject_MockObject */ + protected $encryptorMock; + + /** @var \Magento\Framework\Event\ManagerInterface|\PHPUnit_Framework_MockObject_MockObject */ + protected $eventManagerMock; + + /** @var \Magento\User\Observer\Backend\CheckAdminPasswordChangeObserver */ + protected $model; + + public function setUp() + { + $this->userMock = $this->getMockBuilder('Magento\User\Model\ResourceModel\User') + ->disableOriginalConstructor() + ->setMethods([]) + ->getMock(); + + $this->encryptorMock = $this->getMockBuilder('\Magento\Framework\Encryption\EncryptorInterface') + ->disableOriginalConstructor() + ->setMethods([]) + ->getMock(); + + $this->eventManagerMock = $this->getMockBuilder('Magento\Framework\Event\ManagerInterface') + ->disableOriginalConstructor() + ->setMethods([]) + ->getMockForAbstractClass(); + + $helper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this); + + $this->model = $helper->getObject( + '\Magento\User\Observer\Backend\CheckAdminPasswordChangeObserver', + [ + 'userResource' => $this->userMock, + 'encryptor' => $this->encryptorMock, + ] + ); + } + + public function testCheckAdminPasswordChange() + { + $newPW = "mYn3wpassw0rd"; + $uid = 123; + /** @var \Magento\Framework\Event\Observer|\PHPUnit_Framework_MockObject_MockObject $eventObserverMock */ + $eventObserverMock = $this->getMockBuilder('Magento\Framework\Event\Observer') + ->disableOriginalConstructor() + ->setMethods([]) + ->getMock(); + + /** @var \Magento\Framework\Event|\PHPUnit_Framework_MockObject_MockObject */ + $eventMock = $this->getMockBuilder('Magento\Framework\Event') + ->disableOriginalConstructor() + ->setMethods(['getObject']) + ->getMock(); + + /** @var \Magento\User\Model\User|\PHPUnit_Framework_MockObject_MockObject $userMock */ + $userMock = $this->getMockBuilder('Magento\User\Model\User') + ->disableOriginalConstructor() + ->setMethods(['getId', 'getNewPassword', 'getForceNewPassword']) + ->getMock(); + + $eventObserverMock->expects($this->once())->method('getEvent')->willReturn($eventMock); + $eventMock->expects($this->once())->method('getObject')->willReturn($userMock); + $userMock->expects($this->atLeastOnce())->method('getNewPassword')->willReturn($newPW); + $userMock->expects($this->once())->method('getForceNewPassword')->willReturn(false); + $userMock->expects($this->once())->method('getId')->willReturn($uid); + $this->encryptorMock->expects($this->once())->method('isValidHash')->willReturn(false); + $this->encryptorMock->expects($this->once())->method('getHash')->willReturn(md5($newPW)); + $this->userMock->method('getOldPasswords')->willReturn([md5('pw1'), md5('pw2')]); + + $this->model->execute($eventObserverMock); + } + + public function testCheckAdminPasswordChangeThrowsLocalizedExp() + { + $newPW = "mYn3wpassw0rd"; + $uid = 123; + /** @var \Magento\Framework\Event\Observer|\PHPUnit_Framework_MockObject_MockObject $eventObserverMock */ + $eventObserverMock = $this->getMockBuilder('Magento\Framework\Event\Observer') + ->disableOriginalConstructor() + ->setMethods([]) + ->getMock(); + + /** @var \Magento\Framework\Event|\PHPUnit_Framework_MockObject_MockObject */ + $eventMock = $this->getMockBuilder('Magento\Framework\Event') + ->disableOriginalConstructor() + ->setMethods(['getObject']) + ->getMock(); + + /** @var \Magento\User\Model\User|\PHPUnit_Framework_MockObject_MockObject $userMock */ + $userMock = $this->getMockBuilder('Magento\User\Model\User') + ->disableOriginalConstructor() + ->setMethods(['getId', 'getNewPassword', 'getForceNewPassword']) + ->getMock(); + + $eventObserverMock->expects($this->once())->method('getEvent')->willReturn($eventMock); + $eventMock->expects($this->once())->method('getObject')->willReturn($userMock); + $userMock->expects($this->atLeastOnce())->method('getNewPassword')->willReturn($newPW); + $userMock->expects($this->once())->method('getForceNewPassword')->willReturn(false); + $userMock->expects($this->once())->method('getId')->willReturn($uid); + $this->encryptorMock->expects($this->once())->method('isValidHash')->willReturn(true); + $this->userMock->method('getOldPasswords')->willReturn([md5('pw1'), md5('pw2')]); + + try { + $this->model->execute($eventObserverMock); + } catch (\Magento\Framework\Exception\LocalizedException $expected) { + return; + } + $this->fail('An expected exception has not been raised.'); + } +} diff --git a/app/code/Magento/User/Test/Unit/Observer/Backend/ForceAdminPasswordChangeObserverTest.php b/app/code/Magento/User/Test/Unit/Observer/Backend/ForceAdminPasswordChangeObserverTest.php new file mode 100644 index 0000000000000000000000000000000000000000..ec609e504751da7cf9ba7ecc75e54503374f17c2 --- /dev/null +++ b/app/code/Magento/User/Test/Unit/Observer/Backend/ForceAdminPasswordChangeObserverTest.php @@ -0,0 +1,160 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\User\Test\Unit\Observer\Backend; + +/** + * Test class for Magento\User\Observer\Backend\ForceAdminPasswordChangeObserver + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + */ +class ForceAdminPasswordChangeObserverTest extends \PHPUnit_Framework_TestCase +{ + /** @var \Magento\Framework\AuthorizationInterface|\PHPUnit_Framework_MockObject_MockObject */ + protected $authMock; + + /** @var \Magento\User\Model\Backend\Config\ObserverConfig */ + protected $observerConfig; + + /** @var \Magento\Backend\App\ConfigInterface|\PHPUnit_Framework_MockObject_MockObject */ + protected $configInterfaceMock; + + /** @var \Magento\Backend\Model\UrlInterface|\PHPUnit_Framework_MockObject_MockObject */ + protected $urlInterfaceMock; + + /** @var \Magento\Backend\Model\Session|\PHPUnit_Framework_MockObject_MockObject */ + protected $sessionMock; + + /** @var \Magento\Backend\Model\Auth\Session|\PHPUnit_Framework_MockObject_MockObject */ + protected $authSessionMock; + + /** @var \Magento\Framework\App\ActionFlag|\PHPUnit_Framework_MockObject_MockObject */ + protected $actionFlagMock; + + /** @var \Magento\Framework\Message\ManagerInterface|\PHPUnit_Framework_MockObject_MockObject */ + protected $managerInterfaceMock; + + /** @var \Magento\Framework\Event\ManagerInterface|\PHPUnit_Framework_MockObject_MockObject */ + protected $eventManagerMock; + + /** @var \Magento\User\Observer\Backend\ForceAdminPasswordChangeObserver */ + protected $model; + + public function setUp() + { + $this->authMock = $this->getMockBuilder('Magento\Framework\AuthorizationInterface') + ->disableOriginalConstructor() + ->setMethods(['isAllowed']) + ->getMock(); + + $this->configInterfaceMock = $this->getMockBuilder('Magento\Backend\App\ConfigInterface') + ->disableOriginalConstructor() + ->setMethods([]) + ->getMock(); + + $this->urlInterfaceMock = $this->getMockBuilder('Magento\Backend\Model\UrlInterface') + ->disableOriginalConstructor() + ->setMethods([]) + ->getMock(); + + $this->sessionMock = $this->getMockBuilder('Magento\Backend\Model\Session') + ->disableOriginalConstructor() + ->setMethods([]) + ->getMock(); + + $this->authSessionMock = $this->getMockBuilder('Magento\Backend\Model\Auth\Session') + ->disableOriginalConstructor() + ->setMethods( + [ + 'setPciAdminUserIsPasswordExpired', + 'unsPciAdminUserIsPasswordExpired', + 'getPciAdminUserIsPasswordExpired', + 'isLoggedIn', + 'clearStorage' + ] + )->getMock(); + + $this->actionFlagMock = $this->getMockBuilder('Magento\Framework\App\ActionFlag') + ->disableOriginalConstructor() + ->setMethods([]) + ->getMock(); + + $this->managerInterfaceMock = $this->getMockBuilder('Magento\Framework\Message\ManagerInterface') + ->disableOriginalConstructor() + ->setMethods([]) + ->getMock(); + + $this->eventManagerMock = $this->getMockBuilder('Magento\Framework\Event\ManagerInterface') + ->disableOriginalConstructor() + ->setMethods([]) + ->getMockForAbstractClass(); + + $helper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this); + + $this->observerConfig = $helper->getObject( + 'Magento\User\Model\Backend\Config\ObserverConfig', + [ + 'backendConfig' => $this->configInterfaceMock + ] + ); + + $this->model = $helper->getObject( + 'Magento\User\Observer\Backend\ForceAdminPasswordChangeObserver', + [ + 'observerConfig' => $this->observerConfig, + 'authorization' => $this->authMock, + 'url' => $this->urlInterfaceMock, + 'session' => $this->sessionMock, + 'authSession' => $this->authSessionMock, + 'actionFlag' => $this->actionFlagMock, + 'messageManager' => $this->managerInterfaceMock, + ] + ); + } + + public function testForceAdminPasswordChange() + { + /** @var \Magento\Framework\Event\Observer|\PHPUnit_Framework_MockObject_MockObject $eventObserverMock */ + $eventObserverMock = $this->getMockBuilder('Magento\Framework\Event\Observer') + ->disableOriginalConstructor() + ->setMethods([]) + ->getMock(); + + /** @var \Magento\Framework\Event|\PHPUnit_Framework_MockObject_MockObject */ + $eventMock = $this->getMockBuilder('Magento\Framework\Event') + ->disableOriginalConstructor() + ->setMethods(['getControllerAction', 'getRequest']) + ->getMock(); + + $this->configInterfaceMock + ->expects($this->atLeastOnce()) + ->method('getValue') + ->willReturn(1); + $this->authSessionMock->expects($this->once())->method('isLoggedIn')->willReturn(true); + $eventObserverMock->expects($this->atLeastOnce())->method('getEvent')->willReturn($eventMock); + /** @var \Magento\Framework\App\Action\Action $controllerMock */ + $controllerMock = $this->getMockBuilder('Magento\Framework\App\Action\AbstractAction') + ->disableOriginalConstructor() + ->setMethods(['getRedirect', 'getRequest']) + ->getMockForAbstractClass(); + /** @var \Magento\Framework\App\RequestInterface $requestMock */ + $requestMock = $this->getMockBuilder('Magento\Framework\App\RequestInterface') + ->disableOriginalConstructor() + ->setMethods(['getFullActionName', 'setDispatched']) + ->getMockForAbstractClass(); + $eventMock->expects($this->once())->method('getControllerAction')->willReturn($controllerMock); + $eventMock->expects($this->once())->method('getRequest')->willReturn($requestMock); + $this->authSessionMock->expects($this->once())->method('getPciAdminUserIsPasswordExpired')->willReturn(true); + $requestMock->expects($this->once())->method('getFullActionName')->willReturn('not_in_array'); + + $this->authSessionMock->expects($this->once())->method('clearStorage'); + $this->sessionMock->expects($this->once())->method('clearStorage'); + $this->managerInterfaceMock->expects($this->once())->method('addErrorMessage'); + $controllerMock->expects($this->once())->method('getRequest')->willReturn($requestMock); + $requestMock->expects($this->once())->method('setDispatched')->willReturn(false); + + $this->model->execute($eventObserverMock); + } +} diff --git a/app/code/Magento/User/Test/Unit/Observer/Backend/TrackAdminNewPasswordObserverTest.php b/app/code/Magento/User/Test/Unit/Observer/Backend/TrackAdminNewPasswordObserverTest.php new file mode 100644 index 0000000000000000000000000000000000000000..eb1b930771dd3b3da85301725f3def49fdda5412 --- /dev/null +++ b/app/code/Magento/User/Test/Unit/Observer/Backend/TrackAdminNewPasswordObserverTest.php @@ -0,0 +1,138 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\User\Test\Unit\Observer\Backend; + +/** + * Test class for Magento\User\Observer\Backend\TrackAdminNewPasswordObserver + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + */ +class TrackAdminNewPasswordObserverTest extends \PHPUnit_Framework_TestCase +{ + /** @var \Magento\User\Model\Backend\Config\ObserverConfig */ + protected $observerConfig; + + /** @var \Magento\Backend\App\ConfigInterface|\PHPUnit_Framework_MockObject_MockObject */ + protected $configInterfaceMock; + + /** @var \Magento\User\Model\ResourceModel\User|\PHPUnit_Framework_MockObject_MockObject */ + protected $userMock; + + /** @var \Magento\Backend\Model\Auth\Session|\PHPUnit_Framework_MockObject_MockObject */ + protected $authSessionMock; + + /** @var \Magento\Framework\Encryption\EncryptorInterface|\PHPUnit_Framework_MockObject_MockObject */ + protected $encryptorMock; + + /** @var \Magento\Framework\Message\ManagerInterface|\PHPUnit_Framework_MockObject_MockObject */ + protected $managerInterfaceMock; + + /** @var \Magento\User\Observer\Backend\TrackAdminNewPasswordObserver */ + protected $model; + + public function setUp() + { + $this->configInterfaceMock = $this->getMockBuilder('Magento\Backend\App\ConfigInterface') + ->disableOriginalConstructor() + ->setMethods([]) + ->getMock(); + + $this->userMock = $this->getMockBuilder('Magento\User\Model\ResourceModel\User') + ->disableOriginalConstructor() + ->setMethods([]) + ->getMock(); + + $this->authSessionMock = $this->getMockBuilder('Magento\Backend\Model\Auth\Session') + ->disableOriginalConstructor() + ->setMethods( + [ + 'setPciAdminUserIsPasswordExpired', + 'unsPciAdminUserIsPasswordExpired', + 'getPciAdminUserIsPasswordExpired', + 'isLoggedIn', + 'clearStorage' + ] + )->getMock(); + + $this->encryptorMock = $this->getMockBuilder('\Magento\Framework\Encryption\EncryptorInterface') + ->disableOriginalConstructor() + ->setMethods([]) + ->getMock(); + + $this->managerInterfaceMock = $this->getMockBuilder('Magento\Framework\Message\ManagerInterface') + ->disableOriginalConstructor() + ->setMethods([]) + ->getMock(); + + $helper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this); + + $this->observerConfig = $helper->getObject( + 'Magento\User\Model\Backend\Config\ObserverConfig', + [ + 'backendConfig' => $this->configInterfaceMock + ] + ); + + $this->model = $helper->getObject( + 'Magento\User\Observer\Backend\TrackAdminNewPasswordObserver', + [ + 'observerConfig' => $this->observerConfig, + 'userResource' => $this->userMock, + 'authSession' => $this->authSessionMock, + 'encryptor' => $this->encryptorMock, + 'messageManager' => $this->managerInterfaceMock, + ] + ); + } + + public function testTrackAdminPassword() + { + $newPW = "mYn3wpassw0rd"; + $oldPW = "notsecure"; + $uid = 123; + /** @var \Magento\Framework\Event\Observer|\PHPUnit_Framework_MockObject_MockObject $eventObserverMock */ + $eventObserverMock = $this->getMockBuilder('Magento\Framework\Event\Observer') + ->disableOriginalConstructor() + ->setMethods([]) + ->getMock(); + + /** @var \Magento\Framework\Event|\PHPUnit_Framework_MockObject_MockObject */ + $eventMock = $this->getMockBuilder('Magento\Framework\Event') + ->disableOriginalConstructor() + ->setMethods(['getObject']) + ->getMock(); + + /** @var \Magento\User\Model\User|\PHPUnit_Framework_MockObject_MockObject $userMock */ + $userMock = $this->getMockBuilder('Magento\User\Model\User') + ->disableOriginalConstructor() + ->setMethods(['getId', 'getNewPassword', 'getForceNewPassword']) + ->getMock(); + + $eventObserverMock->expects($this->once())->method('getEvent')->willReturn($eventMock); + $eventMock->expects($this->once())->method('getObject')->willReturn($userMock); + $userMock->expects($this->once())->method('getId')->willReturn($uid); + $userMock->expects($this->once())->method('getNewPassword')->willReturn($newPW); + $this->configInterfaceMock + ->expects($this->atLeastOnce()) + ->method('getValue') + ->willReturn(1); + $userMock->expects($this->once())->method('getForceNewPassword')->willReturn(false); + $this->encryptorMock->expects($this->once())->method('getHash')->willReturn(md5($oldPW)); + + /** @var \Magento\Framework\Message\Collection|\PHPUnit_Framework_MockObject_MockObject $collectionMock */ + $collectionMock = $this->getMockBuilder('Magento\Framework\Message\Collection') + ->disableOriginalConstructor() + ->setMethods([]) + ->getMock(); + $this->managerInterfaceMock + ->expects($this->once()) + ->method('getMessages') + ->willReturn($collectionMock); + $this->authSessionMock->expects($this->once())->method('unsPciAdminUserIsPasswordExpired')->willReturn(null); + + $this->model->execute($eventObserverMock); + } +} diff --git a/app/code/Magento/User/etc/adminhtml/di.xml b/app/code/Magento/User/etc/adminhtml/di.xml index 339eeb86be6118ed655bdb44084fee3aa254ad7b..4c974d78fbea5fd5c11167f4acc02c7d869c6ed7 100755 --- a/app/code/Magento/User/etc/adminhtml/di.xml +++ b/app/code/Magento/User/etc/adminhtml/di.xml @@ -7,7 +7,7 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd"> <preference for="Magento\Backend\Model\Auth\Credential\StorageInterface" type="Magento\User\Model\User" /> - <type name="Magento\User\Model\Backend\Observer\AuthObserver"> + <type name="Magento\User\Observer\Backend\AuthObserver"> <arguments> <argument name="authorization" xsi:type="object">Magento\Framework\Authorization</argument> </arguments> diff --git a/app/code/Magento/User/etc/adminhtml/events.xml b/app/code/Magento/User/etc/adminhtml/events.xml index fe4042e64a2a80f5533d53263bb2983b42d1d636..1bcdab99c766788a551a8120887bb73ff35fc417 100755 --- a/app/code/Magento/User/etc/adminhtml/events.xml +++ b/app/code/Magento/User/etc/adminhtml/events.xml @@ -7,15 +7,15 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="admin_user_authenticate_after"> - <observer name="magento_user" instance="Magento\User\Model\Backend\Observer\AuthObserver" method="adminAuthenticate" /> + <observer name="magento_user" instance="Magento\User\Observer\Backend\AuthObserver" /> </event> <event name="controller_action_predispatch"> - <observer name="magento_user" instance="Magento\User\Model\Backend\Observer\PasswordObserver" method="forceAdminPasswordChange" /> + <observer name="magento_user" instance="Magento\User\Observer\Backend\ForceAdminPasswordChangeObserver" /> </event> <event name="admin_user_save_before"> - <observer name="magento_user" instance="Magento\User\Model\Backend\Observer\PasswordObserver" method="checkAdminPasswordChange" /> + <observer name="magento_user" instance="Magento\User\Observer\Backend\CheckAdminPasswordChangeObserver" /> </event> <event name="admin_user_save_after"> - <observer name="magento_user" instance="Magento\User\Model\Backend\Observer\PasswordObserver" method="trackAdminNewPassword" /> + <observer name="magento_user" instance="Magento\User\Observer\Backend\TrackAdminNewPasswordObserver" /> </event> </config> diff --git a/app/code/Magento/User/view/adminhtml/web/app-config.js b/app/code/Magento/User/view/adminhtml/web/app-config.js index 25bc4e7b6ca8902b794662884a09d6c755b14882..378afec02a6223d1eabc80c7e76dc5a7521e7774 100644 --- a/app/code/Magento/User/view/adminhtml/web/app-config.js +++ b/app/code/Magento/User/view/adminhtml/web/app-config.js @@ -11,7 +11,6 @@ require.config({ "mage/adminhtml/backup": ["prototype"], "mage/captcha": ["prototype"], "mage/common": ["jquery"], - "mage/requirejs/plugin/id-normalizer": ["jquery"], "mage/webapi": ["jquery"], "ko": { exports: "ko" }, "moment": { exports: "moment" } diff --git a/app/code/Magento/Variable/Model/ResourceModel/Variable.php b/app/code/Magento/Variable/Model/ResourceModel/Variable.php index 5c51cae375b3d1d33589f243807d76c5a065f8ac..3d84fa084956f00c7ee0e02dff18d41adf9eb5f4 100644 --- a/app/code/Magento/Variable/Model/ResourceModel/Variable.php +++ b/app/code/Magento/Variable/Model/ResourceModel/Variable.php @@ -13,7 +13,7 @@ namespace Magento\Variable\Model\ResourceModel; * * @author Magento Core Team <core@magentocommerce.com> */ -class Variable extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Variable extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Constructor diff --git a/app/code/Magento/Variable/Model/ResourceModel/Variable/Collection.php b/app/code/Magento/Variable/Model/ResourceModel/Variable/Collection.php index cc80b09f2ca8deec673b9492f88b28474aa127ae..2e289ee427032f7a861e3fe5f59290a58ad217a9 100644 --- a/app/code/Magento/Variable/Model/ResourceModel/Variable/Collection.php +++ b/app/code/Magento/Variable/Model/ResourceModel/Variable/Collection.php @@ -10,7 +10,7 @@ namespace Magento\Variable\Model\ResourceModel\Variable; * * @author Magento Core Team <core@magentocommerce.com> */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Store Id diff --git a/app/code/Magento/Variable/view/adminhtml/web/variables.js b/app/code/Magento/Variable/view/adminhtml/web/variables.js index 2b71f6bc50c7c4aff622bc881b35818f5bad2f77..20292ecdf3c6d93fa5be3f0e8c74546b63a62dd6 100644 --- a/app/code/Magento/Variable/view/adminhtml/web/variables.js +++ b/app/code/Magento/Variable/view/adminhtml/web/variables.js @@ -3,10 +3,12 @@ * See COPYING.txt for license details. */ define([ - "jquery", - "jquery/ui", - "prototype" -], function(jQuery){ + 'jquery', + 'mage/translate', + 'Magento_Ui/js/modal/modal', + 'jquery/ui', + 'prototype', +], function(jQuery, $t){ window.Variables = { textareaElementId: null, @@ -50,43 +52,23 @@ window.Variables = { this.openDialogWindow(this.variablesContent); } }, - openDialogWindow: function(variablesContent) { + openDialogWindow: function (variablesContent) { var windowId = this.dialogWindowId; - jQuery('body').append('<div id="' + windowId + '">'+ Variables.variablesContent +'</div>'); - jQuery('#' + windowId).dialog({ - autoOpen: false, - title: "Insert Variable...", - modal: true, - resizable: false, - minWidth: 500, - width: '75%', - position: { - my: 'left top', - at: 'center top', - of: 'body' - }, - open: function () { - jQuery(this).closest('.ui-dialog').addClass('ui-dialog-active'); - - var topMargin = jQuery(this).closest('.ui-dialog').children('.ui-dialog-titlebar').outerHeight() + 30; - jQuery(this).closest('.ui-dialog').css('margin-top', topMargin); - }, - close: function(event, ui) { - jQuery(this).closest('.ui-dialog').removeClass('ui-dialog-active'); - jQuery(this).dialog('destroy'); - jQuery('#' + windowId).remove(); + jQuery('<div id="' + windowId + '">' + Variables.variablesContent + '</div>').modal({ + title: $t('Insert Variable...'), + type: 'slide', + buttons: [], + closed: function (e, modal) { + modal.modal.remove(); } }); - jQuery('#' + windowId).dialog('open'); + jQuery('#' + windowId).modal('openModal'); variablesContent.evalScripts.bind(variablesContent).defer(); }, - closeDialogWindow: function(window) { - var windowId = this.dialogWindowId; - if(jQuery('#' + windowId).length){ - jQuery('#' + windowId).dialog('close'); - } + closeDialogWindow: function() { + jQuery('#' + this.dialogWindowId).modal('closeModal'); }, prepareVariableRow: function(varValue, varLabel) { var value = (varValue).replace(/"/g, '"').replace(/'/g, '\\''); @@ -95,7 +77,7 @@ window.Variables = { }, insertVariable: function(value) { var windowId = this.dialogWindowId; - jQuery('#' + windowId).dialog('close'); + jQuery('#' + windowId).modal('closeModal'); var textareaElm = $(this.textareaElementId); if (textareaElm) { var scrollPos = textareaElm.scrollTop; diff --git a/app/code/Magento/Weee/Model/ResourceModel/Attribute/Backend/Weee/Tax.php b/app/code/Magento/Weee/Model/ResourceModel/Attribute/Backend/Weee/Tax.php index b406ede514963c40ac3a261370c9c0355c97832e..845876589913c9c5ec8e79131c57953ffae44734 100644 --- a/app/code/Magento/Weee/Model/ResourceModel/Attribute/Backend/Weee/Tax.php +++ b/app/code/Magento/Weee/Model/ResourceModel/Attribute/Backend/Weee/Tax.php @@ -10,7 +10,7 @@ namespace Magento\Weee\Model\ResourceModel\Attribute\Backend\Weee; * * @author Magento Core Team <core@magentocommerce.com> */ -class Tax extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Tax extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * @var \Magento\Store\Model\StoreManagerInterface @@ -18,12 +18,12 @@ class Tax extends \Magento\Framework\Model\ModelResource\Db\AbstractDb protected $_storeManager; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Store\Model\StoreManagerInterface $storeManager, $connectionName = null ) { diff --git a/app/code/Magento/Weee/Model/ResourceModel/Tax.php b/app/code/Magento/Weee/Model/ResourceModel/Tax.php index 110f5c2fbfb90046701a2d8a8ff33dcb263db079..7f16ce3044db7957eec08572e8aeef94480afe73 100644 --- a/app/code/Magento/Weee/Model/ResourceModel/Tax.php +++ b/app/code/Magento/Weee/Model/ResourceModel/Tax.php @@ -11,7 +11,7 @@ use Magento\Catalog\Model\Product\Condition\ConditionInterface; /** * Wee tax resource model */ -class Tax extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Tax extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * @var \Magento\Framework\Stdlib\DateTime @@ -19,12 +19,12 @@ class Tax extends \Magento\Framework\Model\ModelResource\Db\AbstractDb protected $dateTime; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Framework\Stdlib\DateTime $dateTime * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Framework\Stdlib\DateTime $dateTime, $connectionName = null ) { diff --git a/app/code/Magento/Weee/Test/Unit/Model/ResourceModel/Attribute/Backend/Weee/TaxTest.php b/app/code/Magento/Weee/Test/Unit/Model/ResourceModel/Attribute/Backend/Weee/TaxTest.php index 7851daedeab82ee82490e9400e08c9b6a0fa2e9d..bd5504115a85e8d5cd05e9451165b21de244f6e8 100644 --- a/app/code/Magento/Weee/Test/Unit/Model/ResourceModel/Attribute/Backend/Weee/TaxTest.php +++ b/app/code/Magento/Weee/Test/Unit/Model/ResourceModel/Attribute/Backend/Weee/TaxTest.php @@ -41,7 +41,7 @@ class TaxTest extends \PHPUnit_Framework_TestCase ->method('getTableName') ->willReturn('table_name'); - $contextMock = $this->getMock('\Magento\Framework\Model\ModelResource\Db\Context', [], [], '', false); + $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false); $contextMock->expects($this->once())->method('getResources')->willReturn($this->resourceMock); $this->model = new \Magento\Weee\Model\ResourceModel\Attribute\Backend\Weee\Tax( diff --git a/app/code/Magento/Weee/Test/Unit/Model/ResourceModel/TaxTest.php b/app/code/Magento/Weee/Test/Unit/Model/ResourceModel/TaxTest.php index 1aa26b3a2a3603908a30800c84c95c2c7c522eb8..5c1a01ee81ddcf1e270af315f2c82b1b64facbc3 100644 --- a/app/code/Magento/Weee/Test/Unit/Model/ResourceModel/TaxTest.php +++ b/app/code/Magento/Weee/Test/Unit/Model/ResourceModel/TaxTest.php @@ -55,7 +55,7 @@ class TaxTest extends \PHPUnit_Framework_TestCase ->method('getTableName') ->willReturn('table_name'); - $contextMock = $this->getMock('\Magento\Framework\Model\ModelResource\Db\Context', [], [], '', false); + $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false); $contextMock->expects($this->any())->method('getResources')->willReturn($this->resourceMock); $this->model = $this->objectManager->getObject( diff --git a/app/code/Magento/Weee/etc/adminhtml/events.xml b/app/code/Magento/Weee/etc/adminhtml/events.xml index abc20a96a75915690203bf6dbde5f46a7ee620d6..934f41d64798ca0ad6cef2b0def42191e91afa0f 100644 --- a/app/code/Magento/Weee/etc/adminhtml/events.xml +++ b/app/code/Magento/Weee/etc/adminhtml/events.xml @@ -7,15 +7,15 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="adminhtml_catalog_product_edit_prepare_form"> - <observer name="weee" instance="Magento\Weee\Observer\SetWeeeRendererInFormObserver" method="execute" /> + <observer name="weee" instance="Magento\Weee\Observer\SetWeeeRendererInFormObserver" /> </event> <event name="adminhtml_catalog_product_form_prepare_excluded_field_list"> - <observer name="weee" instance="Magento\Weee\Observer\UpdateExcludedFieldListObserver" method="execute" /> + <observer name="weee" instance="Magento\Weee\Observer\UpdateExcludedFieldListObserver" /> </event> <event name="adminhtml_product_attribute_types"> - <observer name="weee" instance="Magento\Weee\Observer\AddWeeeTaxAttributeTypeObserver" method="execute" /> + <observer name="weee" instance="Magento\Weee\Observer\AddWeeeTaxAttributeTypeObserver" /> </event> <event name="adminhtml_catalog_product_edit_element_types"> - <observer name="weee" instance="Magento\Weee\Observer\UpdateElementTypesObserver" method="execute" /> + <observer name="weee" instance="Magento\Weee\Observer\UpdateElementTypesObserver" /> </event> </config> diff --git a/app/code/Magento/Weee/etc/events.xml b/app/code/Magento/Weee/etc/events.xml index 8fb0c3e6226f31121cbaed6ea458b8dfab59431c..09533bc957bedd01384984a10f8b143751a795aa 100644 --- a/app/code/Magento/Weee/etc/events.xml +++ b/app/code/Magento/Weee/etc/events.xml @@ -7,12 +7,12 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="catalog_entity_attribute_save_before"> - <observer name="weee" instance="Magento\Weee\Observer\AssignBackendModelToAttributeObserver" method="execute" /> + <observer name="weee" instance="Magento\Weee\Observer\AssignBackendModelToAttributeObserver" /> </event> <event name="catalog_product_option_price_configuration_after"> - <observer name="weee" instance="Magento\Weee\Observer\GetPriceConfigurationObserver" method="execute"/> + <observer name="weee" instance="Magento\Weee\Observer\GetPriceConfigurationObserver"/> </event> <event name="catalog_product_view_config"> - <observer name="weee" instance="Magento\Weee\Observer\UpdateProductOptionsObserver" method="execute" /> + <observer name="weee" instance="Magento\Weee\Observer\UpdateProductOptionsObserver" /> </event> </config> diff --git a/app/code/Magento/Weee/etc/frontend/events.xml b/app/code/Magento/Weee/etc/frontend/events.xml index 535266b2e23829da958b895b49e868907737d48d..bac8ef8144f5b33dfc4efef4d1dcb753b03fffd2 100644 --- a/app/code/Magento/Weee/etc/frontend/events.xml +++ b/app/code/Magento/Weee/etc/frontend/events.xml @@ -8,9 +8,9 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="customer_data_object_login"> - <observer name="customer_weee_logged_in" instance="Magento\Weee\Observer\CustomerLoggedIn" method="execute" /> + <observer name="customer_weee_logged_in" instance="Magento\Weee\Observer\CustomerLoggedIn" /> </event> <event name="customer_address_save_after"> - <observer name="customer_weee_after_address_save" instance="Magento\Weee\Observer\AfterAddressSave" method="execute" /> + <observer name="customer_weee_after_address_save" instance="Magento\Weee\Observer\AfterAddressSave" /> </event> </config> diff --git a/app/code/Magento/Weee/etc/webapi_rest/events.xml b/app/code/Magento/Weee/etc/webapi_rest/events.xml index 6e8e13ba37ad070807fe9a7a07e95dd1bcc8256e..6e3ef686537bb35f645010c460bd1b65d58086f4 100644 --- a/app/code/Magento/Weee/etc/webapi_rest/events.xml +++ b/app/code/Magento/Weee/etc/webapi_rest/events.xml @@ -7,6 +7,6 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="items_additional_data"> - <observer name="processTaxData" instance="Magento\Weee\Observer\Total\Webapi\ItemObserver" method="execute" /> + <observer name="processTaxData" instance="Magento\Weee\Observer\Total\Webapi\ItemObserver" /> </event> </config> \ No newline at end of file diff --git a/app/code/Magento/Weee/etc/webapi_soap/events.xml b/app/code/Magento/Weee/etc/webapi_soap/events.xml index 6e8e13ba37ad070807fe9a7a07e95dd1bcc8256e..6e3ef686537bb35f645010c460bd1b65d58086f4 100644 --- a/app/code/Magento/Weee/etc/webapi_soap/events.xml +++ b/app/code/Magento/Weee/etc/webapi_soap/events.xml @@ -7,6 +7,6 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="items_additional_data"> - <observer name="processTaxData" instance="Magento\Weee\Observer\Total\Webapi\ItemObserver" method="execute" /> + <observer name="processTaxData" instance="Magento\Weee\Observer\Total\Webapi\ItemObserver" /> </event> </config> \ No newline at end of file diff --git a/app/code/Magento/Widget/Model/Layout/Update.php b/app/code/Magento/Widget/Model/Layout/Update.php index fb85dbbf93eb15284d9e3848e7347b3967dcce15..09c322dc7d0d30af4452e50c481c147c0aaeb095 100644 --- a/app/code/Magento/Widget/Model/Layout/Update.php +++ b/app/code/Magento/Widget/Model/Layout/Update.php @@ -31,7 +31,7 @@ class Update extends \Magento\Framework\Model\AbstractModel * @param \Magento\Framework\Model\Context $context * @param \Magento\Framework\Registry $registry * @param \Magento\Framework\Stdlib\DateTime $dateTime - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -39,7 +39,7 @@ class Update extends \Magento\Framework\Model\AbstractModel \Magento\Framework\Model\Context $context, \Magento\Framework\Registry $registry, \Magento\Framework\Stdlib\DateTime $dateTime, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Widget/Model/ResourceModel/Layout/Link.php b/app/code/Magento/Widget/Model/ResourceModel/Layout/Link.php index 63e9bac5cd774bfe395a5b0d2e9403b6975c4d40..1485f11b3af89bb6a5b08c1152a5211d284495e1 100644 --- a/app/code/Magento/Widget/Model/ResourceModel/Layout/Link.php +++ b/app/code/Magento/Widget/Model/ResourceModel/Layout/Link.php @@ -8,7 +8,7 @@ namespace Magento\Widget\Model\ResourceModel\Layout; /** * Layout Link resource model */ -class Link extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Link extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Define main table diff --git a/app/code/Magento/Widget/Model/ResourceModel/Layout/Link/Collection.php b/app/code/Magento/Widget/Model/ResourceModel/Layout/Link/Collection.php index 74df58e946f32ca6c754e96b552c6e7e171620e7..91398f395d5384e9bfb45e32a6ced36806bc66fc 100644 --- a/app/code/Magento/Widget/Model/ResourceModel/Layout/Link/Collection.php +++ b/app/code/Magento/Widget/Model/ResourceModel/Layout/Link/Collection.php @@ -8,7 +8,7 @@ namespace Magento\Widget\Model\ResourceModel\Layout\Link; /** * Layout update collection model */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * @var \Magento\Framework\Stdlib\DateTime @@ -21,7 +21,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab * @param \Magento\Framework\Event\ManagerInterface $eventManager * @param \Magento\Framework\Stdlib\DateTime $dateTime * @param mixed $connection - * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource + * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource * @param \Magento\Framework\Data\Collection\EntityFactory $entityFactory */ public function __construct( @@ -31,7 +31,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab \Magento\Framework\Event\ManagerInterface $eventManager, \Magento\Framework\Stdlib\DateTime $dateTime, \Magento\Framework\DB\Adapter\AdapterInterface $connection = null, - \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null + \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null ) { $this->dateTime = $dateTime; parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource); diff --git a/app/code/Magento/Widget/Model/ResourceModel/Layout/Update.php b/app/code/Magento/Widget/Model/ResourceModel/Layout/Update.php index 9b750808ab1ff09aaecd11c745fe0e4fa78484b7..11e3f414ca553394a983801ac69afe740d542563 100644 --- a/app/code/Magento/Widget/Model/ResourceModel/Layout/Update.php +++ b/app/code/Magento/Widget/Model/ResourceModel/Layout/Update.php @@ -11,7 +11,7 @@ namespace Magento\Widget\Model\ResourceModel\Layout; /** * Layout update resource model */ -class Update extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Update extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * @var \Magento\Framework\Cache\FrontendInterface @@ -19,12 +19,12 @@ class Update extends \Magento\Framework\Model\ModelResource\Db\AbstractDb private $_cache; /** - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Framework\Cache\FrontendInterface $cache * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Framework\Cache\FrontendInterface $cache, $connectionName = null ) { diff --git a/app/code/Magento/Widget/Model/ResourceModel/Layout/Update/Collection.php b/app/code/Magento/Widget/Model/ResourceModel/Layout/Update/Collection.php index f276751e280bc7d9b06033657ca292ba354252d4..f90e32416a5e5139d71dadc0a5b37b555aa96c56 100644 --- a/app/code/Magento/Widget/Model/ResourceModel/Layout/Update/Collection.php +++ b/app/code/Magento/Widget/Model/ResourceModel/Layout/Update/Collection.php @@ -8,7 +8,7 @@ namespace Magento\Widget\Model\ResourceModel\Layout\Update; /** * Layout update collection model */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * @var \Magento\Framework\Stdlib\DateTime @@ -36,7 +36,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab * @param \Magento\Framework\Event\ManagerInterface $eventManager * @param \Magento\Framework\Stdlib\DateTime $dateTime * @param mixed $connection - * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource + * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource */ public function __construct( \Magento\Framework\Data\Collection\EntityFactory $entityFactory, @@ -45,7 +45,7 @@ class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\Ab \Magento\Framework\Event\ManagerInterface $eventManager, \Magento\Framework\Stdlib\DateTime $dateTime, \Magento\Framework\DB\Adapter\AdapterInterface $connection = null, - \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null + \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null ) { $this->dateTime = $dateTime; parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource); diff --git a/app/code/Magento/Widget/Model/ResourceModel/Widget.php b/app/code/Magento/Widget/Model/ResourceModel/Widget.php index 24c8ac0e7db7f48416255414934aadfdfde2fc67..f6e376e91cbdcca04c00b0efa5c4f4719b56b5e0 100644 --- a/app/code/Magento/Widget/Model/ResourceModel/Widget.php +++ b/app/code/Magento/Widget/Model/ResourceModel/Widget.php @@ -11,7 +11,7 @@ */ namespace Magento\Widget\Model\ResourceModel; -class Widget extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Widget extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Define main table diff --git a/app/code/Magento/Widget/Model/ResourceModel/Widget/Instance.php b/app/code/Magento/Widget/Model/ResourceModel/Widget/Instance.php index 5e97d539379d0bc0ee7e807796d755b3bfbd19c5..6277ad2e528d5a3a4b05373384352cad20110f45 100644 --- a/app/code/Magento/Widget/Model/ResourceModel/Widget/Instance.php +++ b/app/code/Magento/Widget/Model/ResourceModel/Widget/Instance.php @@ -13,7 +13,7 @@ namespace Magento\Widget\Model\ResourceModel\Widget; use Magento\Framework\Model\AbstractModel; -class Instance extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Instance extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Define main table diff --git a/app/code/Magento/Widget/Model/ResourceModel/Widget/Instance/Collection.php b/app/code/Magento/Widget/Model/ResourceModel/Widget/Instance/Collection.php index bbbb4afc38593598424753ce37ee57b9cd1b8e52..4ed2b8ba087bea10a639959e72f6f48c1c104c60 100644 --- a/app/code/Magento/Widget/Model/ResourceModel/Widget/Instance/Collection.php +++ b/app/code/Magento/Widget/Model/ResourceModel/Widget/Instance/Collection.php @@ -11,7 +11,7 @@ */ namespace Magento\Widget\Model\ResourceModel\Widget\Instance; -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Fields map for corellation names & real selected fields diff --git a/app/code/Magento/Widget/Model/Widget/Instance.php b/app/code/Magento/Widget/Model/Widget/Instance.php index 45775d781edb625d86318e6188df46f05be79dad..7bccc0812d1e7ff79a573e31600a46fd9a269430 100644 --- a/app/code/Magento/Widget/Model/Widget/Instance.php +++ b/app/code/Magento/Widget/Model/Widget/Instance.php @@ -120,7 +120,7 @@ class Instance extends \Magento\Framework\Model\AbstractModel * @param \Magento\Framework\Math\Random $mathRandom * @param \Magento\Framework\Filesystem $filesystem * @param \Magento\Widget\Helper\Conditions $conditionsHelper - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $relatedCacheTypes * @param array $data @@ -139,7 +139,7 @@ class Instance extends \Magento\Framework\Model\AbstractModel \Magento\Framework\Math\Random $mathRandom, \Magento\Framework\Filesystem $filesystem, \Magento\Widget\Helper\Conditions $conditionsHelper, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $relatedCacheTypes = [], array $data = [] diff --git a/app/code/Magento/Widget/Test/Unit/Model/ResourceModel/Layout/AbstractTestCase.php b/app/code/Magento/Widget/Test/Unit/Model/ResourceModel/Layout/AbstractTestCase.php index 16d873d84c8167377a873f2ae38cd9b9f971cd2f..3b83e0676da71eef376aae2bd218ddf6f18296f4 100644 --- a/app/code/Magento/Widget/Test/Unit/Model/ResourceModel/Layout/AbstractTestCase.php +++ b/app/code/Magento/Widget/Test/Unit/Model/ResourceModel/Layout/AbstractTestCase.php @@ -60,7 +60,7 @@ abstract class AbstractTestCase extends \PHPUnit_Framework_TestCase $connection->expects($this->any())->method('quoteIdentifier')->will($this->returnArgument(0)); $resource = $this->getMockForAbstractClass( - 'Magento\Framework\Model\ModelResource\Db\AbstractDb', + 'Magento\Framework\Model\ResourceModel\Db\AbstractDb', [], '', false, @@ -77,7 +77,7 @@ abstract class AbstractTestCase extends \PHPUnit_Framework_TestCase /** * @abstract * @param \Magento\Framework\DB\Select $select - * @return \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection + * @return \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection */ abstract protected function _getCollection(\Magento\Framework\DB\Select $select); diff --git a/app/code/Magento/Widget/view/adminhtml/templates/instance/edit/layout.phtml b/app/code/Magento/Widget/view/adminhtml/templates/instance/edit/layout.phtml index bcdf62afc6bf8abd99a6519309af87bd9c109801..94a3eb7145be0c27125f3adfbddd11b998bade3e 100644 --- a/app/code/Magento/Widget/view/adminhtml/templates/instance/edit/layout.phtml +++ b/app/code/Magento/Widget/view/adminhtml/templates/instance/edit/layout.phtml @@ -22,9 +22,10 @@ require([ 'jquery', 'mage/template', + 'Magento_Ui/js/modal/alert', "prototype", "extjs/ext-tree-checkbox" -], function (jQuery, mageTemplate) { +], function (jQuery, mageTemplate, alert) { //<![CDATA[ @@ -376,7 +377,9 @@ var WidgetInstance = { chooser.show(); } } catch (e) { - alert('Error occurs during loading chooser.'); + alert({ + content: 'Error occurs during loading chooser.' + }); } } }); @@ -469,7 +472,9 @@ var WidgetInstance = { } } } catch (e) { - alert('Error occurs during loading chooser.'); + alert({ + content: 'Error occurs during loading chooser.' + }); } } }); diff --git a/app/code/Magento/Wishlist/Model/Item.php b/app/code/Magento/Wishlist/Model/Item.php index 5d1d08b0930ca10cd43b3729ddb28af9aa1cf5bb..f3748d8691d8f79b623990a59e3154c76d770fb2 100644 --- a/app/code/Magento/Wishlist/Model/Item.php +++ b/app/code/Magento/Wishlist/Model/Item.php @@ -130,7 +130,7 @@ class Item extends AbstractModel implements ItemInterface * @param CollectionFactory $wishlOptionCollectionFactory * @param \Magento\Catalog\Model\ProductTypes\ConfigInterface $productTypeConfig * @param ProductRepositoryInterface $productRepository - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -145,7 +145,7 @@ class Item extends AbstractModel implements ItemInterface CollectionFactory $wishlOptionCollectionFactory, \Magento\Catalog\Model\ProductTypes\ConfigInterface $productTypeConfig, ProductRepositoryInterface $productRepository, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/app/code/Magento/Wishlist/Model/ResourceModel/Item.php b/app/code/Magento/Wishlist/Model/ResourceModel/Item.php index 4b050e5a1b3eb400f36f8a40bd309a477d42d805..84f679726d2f3c7f990ef3d83ac5131ffa1a1b6f 100644 --- a/app/code/Magento/Wishlist/Model/ResourceModel/Item.php +++ b/app/code/Magento/Wishlist/Model/ResourceModel/Item.php @@ -11,7 +11,7 @@ */ namespace Magento\Wishlist\Model\ResourceModel; -class Item extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Item extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Initialize connection and define main table diff --git a/app/code/Magento/Wishlist/Model/ResourceModel/Item/Collection.php b/app/code/Magento/Wishlist/Model/ResourceModel/Item/Collection.php index 79d709c4eeb2d78100e1af16b713601bb7146c57..bbee472a8bd57b7d00723325c617bb27e33663a9 100644 --- a/app/code/Magento/Wishlist/Model/ResourceModel/Item/Collection.php +++ b/app/code/Magento/Wishlist/Model/ResourceModel/Item/Collection.php @@ -10,7 +10,7 @@ namespace Magento\Wishlist\Model\ResourceModel\Item; * @SuppressWarnings(PHPMD.TooManyFields) * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Product Visibility Filter to product collection flag diff --git a/app/code/Magento/Wishlist/Model/ResourceModel/Item/Option.php b/app/code/Magento/Wishlist/Model/ResourceModel/Item/Option.php index 7e3aadac78efe42e389baefae19cce6470d2aa8c..6660d7eb35306e1d4b1bf9f35dafd39a3b20271f 100644 --- a/app/code/Magento/Wishlist/Model/ResourceModel/Item/Option.php +++ b/app/code/Magento/Wishlist/Model/ResourceModel/Item/Option.php @@ -11,7 +11,7 @@ */ namespace Magento\Wishlist\Model\ResourceModel\Item; -class Option extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Option extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * @return void diff --git a/app/code/Magento/Wishlist/Model/ResourceModel/Item/Option/Collection.php b/app/code/Magento/Wishlist/Model/ResourceModel/Item/Option/Collection.php index a2f4c18c34ecbcb15a456a71f7add053e3123865..d6a8343f2cbc4a93929d2d5a8c1599a27055f65d 100644 --- a/app/code/Magento/Wishlist/Model/ResourceModel/Item/Option/Collection.php +++ b/app/code/Magento/Wishlist/Model/ResourceModel/Item/Option/Collection.php @@ -14,7 +14,7 @@ namespace Magento\Wishlist\Model\ResourceModel\Item\Option; use Magento\Catalog\Model\Product; use Magento\Wishlist\Model\Item; -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Array of option ids grouped by item id diff --git a/app/code/Magento/Wishlist/Model/ResourceModel/Wishlist.php b/app/code/Magento/Wishlist/Model/ResourceModel/Wishlist.php index a9afa52ac7480044d68531ca4c4489c4fc337c40..936f362d451588bda8a829ab2083eef556cdb0f3 100644 --- a/app/code/Magento/Wishlist/Model/ResourceModel/Wishlist.php +++ b/app/code/Magento/Wishlist/Model/ResourceModel/Wishlist.php @@ -11,7 +11,7 @@ */ namespace Magento\Wishlist\Model\ResourceModel; -class Wishlist extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Wishlist extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Store wishlist items count diff --git a/app/code/Magento/Wishlist/Model/ResourceModel/Wishlist/Collection.php b/app/code/Magento/Wishlist/Model/ResourceModel/Wishlist/Collection.php index 6d009cfa6726e47ae23270171d4d4f72891765ce..61b1feb5b4773bfabb0c7154200c582315c74a98 100644 --- a/app/code/Magento/Wishlist/Model/ResourceModel/Wishlist/Collection.php +++ b/app/code/Magento/Wishlist/Model/ResourceModel/Wishlist/Collection.php @@ -11,7 +11,7 @@ */ namespace Magento\Wishlist\Model\ResourceModel\Wishlist; -class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * Initialize resource diff --git a/app/code/Magento/Wishlist/etc/events.xml b/app/code/Magento/Wishlist/etc/events.xml index 0746916d8b5212a1107495dd49d84b254a078b78..90890d1239abfd7e8a310b4dbc8612dba11122eb 100644 --- a/app/code/Magento/Wishlist/etc/events.xml +++ b/app/code/Magento/Wishlist/etc/events.xml @@ -7,9 +7,9 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="checkout_cart_update_items_before"> - <observer name="wishlist" instance="Magento\Wishlist\Observer\CartUpdateBefore" method="execute" /> + <observer name="wishlist" instance="Magento\Wishlist\Observer\CartUpdateBefore" /> </event> <event name="checkout_cart_add_product_complete"> - <observer name="wishlist" instance="Magento\Wishlist\Observer\AddToCart" method="execute" /> + <observer name="wishlist" instance="Magento\Wishlist\Observer\AddToCart" /> </event> </config> diff --git a/app/code/Magento/Wishlist/etc/frontend/events.xml b/app/code/Magento/Wishlist/etc/frontend/events.xml index ec0728b0d199f7e703b270628b2d0faf84c2987f..ee256bb7e9bd8451011f7f2a6b9ac40074625d0a 100644 --- a/app/code/Magento/Wishlist/etc/frontend/events.xml +++ b/app/code/Magento/Wishlist/etc/frontend/events.xml @@ -7,9 +7,9 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="customer_login"> - <observer name="wishlist" instance="Magento\Wishlist\Observer\CustomerLogin" method="execute" /> + <observer name="wishlist" instance="Magento\Wishlist\Observer\CustomerLogin" /> </event> <event name="customer_logout"> - <observer name="wishlist" instance="Magento\Wishlist\Observer\CustomerLogout" method="execute" /> + <observer name="wishlist" instance="Magento\Wishlist\Observer\CustomerLogout" /> </event> </config> diff --git a/app/code/Magento/Wishlist/view/adminhtml/templates/customer/edit/tab/wishlist.phtml b/app/code/Magento/Wishlist/view/adminhtml/templates/customer/edit/tab/wishlist.phtml index ff2714c07c92ad5a0607ecda388e5cb17f6b770c..0262fe571fd4a6094a5ee9c007f1831f97dde78c 100644 --- a/app/code/Magento/Wishlist/view/adminhtml/templates/customer/edit/tab/wishlist.phtml +++ b/app/code/Magento/Wishlist/view/adminhtml/templates/customer/edit/tab/wishlist.phtml @@ -11,30 +11,31 @@ */ ?> <script> -require([ - "prototype", - "Magento_Catalog/catalog/product/composite/configure" -], function(){ + require([ + "Magento_Ui/js/modal/confirm", + "prototype", + "Magento_Catalog/catalog/product/composite/configure" + ], function(confirm){ //<!-- -wishlistControl = { - reload: function (urlParams) { - if (!urlParams) { - urlParams = ''; - } - var url = <?php /* @escapeNotVerified */ echo $block->getJsObjectName() ?>.url + '?ajax=true' + urlParams; - new Ajax.Updater( - <?php /* @escapeNotVerified */ echo $block->getJsObjectName() ?>.containerId, - url, - { - parameters: {form_key: FORM_KEY}, - onComplete: <?php /* @escapeNotVerified */ echo $block->getJsObjectName() ?>.initGrid.bind(<?php /* @escapeNotVerified */ echo $block->getJsObjectName() ?>), - evalScripts:true - } - ); - }, + wishlistControl = { + reload: function (urlParams) { + if (!urlParams) { + urlParams = ''; + } + var url = <?php /* @escapeNotVerified */ echo $block->getJsObjectName() ?>.url + '?ajax=true' + urlParams; + new Ajax.Updater( + <?php /* @escapeNotVerified */ echo $block->getJsObjectName() ?>.containerId, + url, + { + parameters: {form_key: FORM_KEY}, + onComplete: <?php /* @escapeNotVerified */ echo $block->getJsObjectName() ?>.initGrid.bind(<?php /* @escapeNotVerified */ echo $block->getJsObjectName() ?>), + evalScripts:true + } + ); + }, - configureItem: function (itemId) { + configureItem: function (itemId) { productConfigure.setOnLoadIFrameCallback('wishlist', this.cbOnLoadIframe.bind(this)); productConfigure.showItemConfiguration('wishlist', itemId); return false; @@ -48,22 +49,27 @@ wishlistControl = { }, removeItem: function (itemId) { - if(!confirm('<?php /* @escapeNotVerified */ echo __('Are you sure you want to remove this item?') ?>')) { - return false; - } - this.reload('&delete=' + itemId); - return false; - } -} + var self = this; -productConfigure.addListType( - 'wishlist', - { - urlFetch: '<?php /* @escapeNotVerified */ echo $block->getUrl('customer/wishlist_product_composite_wishlist/configure') ?>', - urlConfirm: '<?php /* @escapeNotVerified */ echo $block->getUrl('customer/wishlist_product_composite_wishlist/update') ?>' + confirm({ + content: '<?php /* @escapeNotVerified */ echo __('Are you sure you want to remove this item?') ?>', + actions: { + confirm: function () { + self.reload('&delete=' + itemId); + } + } + }); + } } -); -//--> -}); + productConfigure.addListType( + 'wishlist', + { + urlFetch: '<?php /* @escapeNotVerified */ echo $block->getUrl('customer/wishlist_product_composite_wishlist/configure') ?>', + urlConfirm: '<?php /* @escapeNotVerified */ echo $block->getUrl('customer/wishlist_product_composite_wishlist/update') ?>' + } + ); + //--> + + }); </script> diff --git a/app/code/Magento/Wishlist/view/frontend/web/wishlist.js b/app/code/Magento/Wishlist/view/frontend/web/wishlist.js index bb697c1fa5259c12f20b4ac550b0d49f4f83ec85..a831603f9d1b4f8cc26ea81ccc841d8dd8a76746 100644 --- a/app/code/Magento/Wishlist/view/frontend/web/wishlist.js +++ b/app/code/Magento/Wishlist/view/frontend/web/wishlist.js @@ -7,10 +7,12 @@ define([ 'jquery', 'mage/template', + 'Magento_Ui/js/modal/alert', 'jquery/ui', 'mage/validation/validation', + 'mage/dataPost' -], function ($, mageTemplate) { +], function ($, mageTemplate, alert) { 'use strict'; $.widget('mage.wishlist', { @@ -152,7 +154,9 @@ define([ if ($(form).find('input:checkbox:checked').length) { form.submit(); } else { - alert(this.options.checkBoxValidationMessage); + alert({ + content: this.options.checkBoxValidationMessage + }); } }, this) }); diff --git a/app/design/adminhtml/Magento/backend/Magento_ConfigurableProduct/web/css/source/module/components/_steps-wizard.less b/app/design/adminhtml/Magento/backend/Magento_ConfigurableProduct/web/css/source/module/components/_steps-wizard.less index f09454d5862d66eebae899491dd4c32879e7d5c4..4cd621361e3b64df0cef4771ebf137359bbd9f6c 100644 --- a/app/design/adminhtml/Magento/backend/Magento_ConfigurableProduct/web/css/source/module/components/_steps-wizard.less +++ b/app/design/adminhtml/Magento/backend/Magento_ConfigurableProduct/web/css/source/module/components/_steps-wizard.less @@ -72,8 +72,4 @@ margin: @indent__base 0; } } - - .admin__data-grid-pager-wrap { - float: right; - } } diff --git a/app/design/adminhtml/Magento/backend/Magento_ConfigurableProduct/web/css/source/module/steps/_bulk-images.less b/app/design/adminhtml/Magento/backend/Magento_ConfigurableProduct/web/css/source/module/steps/_bulk-images.less index 60203c2aa302166eadb59587d569f3d9aa397e10..d1f298df84ee6e03b39046c82e39d25475b8cba3 100644 --- a/app/design/adminhtml/Magento/backend/Magento_ConfigurableProduct/web/css/source/module/steps/_bulk-images.less +++ b/app/design/adminhtml/Magento/backend/Magento_ConfigurableProduct/web/css/source/module/steps/_bulk-images.less @@ -361,16 +361,6 @@ top: 5px; } -.image-pointer { - background: url(../Magento_Backend/images/gallery-image-panel-corner.png) no-repeat; - height: 15px; - left: 50%; - margin-left: -14px; - position: absolute; - top: -11px; - width: 28px; -} - .image-panel-controls, .image-panel-preview { float: left; @@ -431,28 +421,6 @@ width: 100%; } -.image-panel { - .action-close { - padding: 0; - position: absolute; - right: 29px; - top: 17px; - .lib-icon-font( - @_icon-font-content: @icon-close-mage__content, - @_icon-font: @icons-admin__font-name, - @_icon-font-size: 2rem, - @_icon-font-color: @color-brownie-vanilla, - @_icon-font-color-hover: @color-brownie-vanilla - ); - span { - &:extend(.abs-visually-hidden all); - } - &:active { - padding: 0; - } - } -} - // // Custom Multiselect // _____________________________________________ diff --git a/app/design/adminhtml/Magento/backend/Magento_ProductVideo/web/css/source/_module.less b/app/design/adminhtml/Magento/backend/Magento_ProductVideo/web/css/source/_module.less new file mode 100644 index 0000000000000000000000000000000000000000..7f4e8a590acf9c902b378a441875ac8994a5af14 --- /dev/null +++ b/app/design/adminhtml/Magento/backend/Magento_ProductVideo/web/css/source/_module.less @@ -0,0 +1,236 @@ +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +.image.video-placeholder { + display: inline-block; + position: relative; + text-decoration: none; + &:before { + background: url(../Magento_ProductVideo/images/gallery-sprite.png) no-repeat left bottom; + content: ''; + height: 49px; + left: 50%; + margin-left: -24px; + opacity: 0.7; + position: absolute; + top: 18px; + width: 49px; + z-index: 1; + } + .image-placeholder-text { + font-weight: 400; + } +} + +//re-arrange checkboxes fields in slideout video panel (base, small image etc) +.admin__field { + &.field-video_image, + &.field-video_small_image, + &.field-video_thumbnail, + &.field-video_swatch_image, + &.field-new_video_disabled { + .admin__field-control { + #mix-grid .column(3, @field-grid__columns); + float: left; + margin-left: 80px; + position: relative; + input { + float: right; + } + } + .admin__field-label { + left: 0; + margin-left: 35%; + padding-left: 45px; + position: absolute; + width: 250px; + &:before { + content: none; + } + span { + float: left; + } + } + } + &.field-new_video_disabled { + margin-top: 32px; + } + &.field.field-new_video_screenshot { + margin-bottom: 5px; + } + &.field.field-new_video_screenshot_preview { + margin-bottom: 50px; + } + &.field-roleLabel { + height: 0; + .admin__field-control { + #mix-grid .column(3, @field-grid__columns); + float: left; + margin-left: 80px; + position: relative; + .control-value { + color: @color-black; + font-family: 'Open Sans', @font-family__sans-serif; + font-size: @font-size__s + 0.2; + font-weight: @font-weight__semibold; + float: right; + position: relative; + right: 50px; + top: 21px; + } + } + } +} + +.admin__scope-old { + .fieldset .admin__field { + &.field-video_image, + &.field-video_small_image, + &.field-video_thumbnail, + &.field-video_swatch_image { + margin-bottom: 20px; + } + } + .gallery .image .action-make-base, + .images .image .action-make-base { + .lib-button( + @_button-background: transparent, + @_button-border: none, + @_button-background-hover: transparent, + @_button-border-hover: none, + @_button-background-active: transparent, + @_button-border-active: none, + @_button-font-content: '\e63b', + @_button-icon-use: true, + @_button-icon-font: 'Admin Icons', + @_button-icon-font-text-hide: true, + @_button-icon-font-size: @font-size__xl, + @_button-icon-font-color: @color-gray62, + @_button-icon-font-color-hover: @color-gray52, + @_button-icon-font-color-active: @color-gray52, + @_button-margin: 0 + ); + bottom: 9px; + left: auto; + position: absolute; + right: 9px; + width: 0 !important; + &:before { + left: 16px; + position: absolute; + top: -2px; + } + } + .base-image .image-label { + display: block; + } +} + +.preview_hidden_image_input_button { + display: none; +} + +.video-item { + position: relative; + &:after { + background: url(../Magento_ProductVideo/images/gallery-sprite.png) bottom left; + bottom: 0; + content: ''; + height: 40px; + left: 0; + margin: auto; + position: absolute; + right: 0; + top: 10px; + width: 49px; + z-index: 3; + } +} + +//style slideout panel add video +.mage-new-video-dialog { + form.admin__scope-old { + float: left; + width: 65%; + } + .video-player-sidebar { + width: 34.99999%; + float: left; + } + .video-player-container { + width: 100%; + height: 20vw; + margin-bottom: 30px; + border: 1px solid #e3e3e3; + position: relative; + &:after { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: auto; + width: 93px; + height: 60px; + background: url(../Magento_ProductVideo/images/camera.png) no-repeat center; + z-index: 1; + } + } + .video-information { + margin-bottom: 7px; + display: none; + &:after { + content: ""; + visibility: hidden; + display: block; + height: 0; + clear: both; + } + label { + font-family: 'Open Sans', @font-family__sans-serif; + font-size: @font-size__s + 0.2; + font-weight: @font-weight__semibold; + display: block; + width: 25%; + float: left; + text-align: right; + } + span { + font-family: 'Open Sans', @font-family__sans-serif; + font-size: @font-size__s + 0.2; + font-weight: @font-weight__light; + display: block; + width: 74.9999%; + float: left; + padding-left: 20px; + } + } + .product-video { + width: 100%; + z-index: 20; + height: 100%; + position: relative; + } +} + +.image.video-placeholder > button[data-role="add-video-button"], +.image.video-placeholder > button { + background: transparent; + border: 0; + height: 100%; + position: relative; + width: 100%; + z-index: 10; +} + +.add-video-button-container { + float: right; + margin-bottom: 10px; +} + +.image.base-image:hover .image-label { + display: none; +} diff --git a/app/design/adminhtml/Magento/backend/Magento_Ui/web/css/source/module/_data-grid.less b/app/design/adminhtml/Magento/backend/Magento_Ui/web/css/source/module/_data-grid.less index 50d58b39e6e259760e09a629c5f1b73dac11c1cc..3b4404bc0da1e9336efa2b62783dfb7c48e1bfa0 100644 --- a/app/design/adminhtml/Magento/backend/Magento_Ui/web/css/source/module/_data-grid.less +++ b/app/design/adminhtml/Magento/backend/Magento_Ui/web/css/source/module/_data-grid.less @@ -313,6 +313,11 @@ body._in-resize { text-align: center; vertical-align: middle; } + .data-grid-onoff-label { + > span { + .lib-visually-hidden(); + } + } .data-grid-actions-cell { padding-left: @data-grid-cell__padding-horizontal * 2; padding-right: @data-grid-cell__padding-horizontal * 2; diff --git a/app/design/adminhtml/Magento/backend/Magento_Ui/web/css/source/module/data-grid/data-grid-header/_data-grid-pager.less b/app/design/adminhtml/Magento/backend/Magento_Ui/web/css/source/module/data-grid/data-grid-header/_data-grid-pager.less index a30087cb5a6972ca99f7636d3a4fe26e9ee59219..ec5761b7b2a0c70151d46df186d13f1aeb89ad97 100644 --- a/app/design/adminhtml/Magento/backend/Magento_Ui/web/css/source/module/data-grid/data-grid-header/_data-grid-pager.less +++ b/app/design/adminhtml/Magento/backend/Magento_Ui/web/css/source/module/data-grid/data-grid-header/_data-grid-pager.less @@ -17,6 +17,7 @@ .admin__data-grid-pager-wrap { text-align: right; + float: right; } .admin__data-grid-pager { diff --git a/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/components/_navigation-bar.less b/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/components/_navigation-bar.less index e5749d613096c500134078b17f75d4e8500eadea..b0032568136d083c90d044560d9a55d2b0b919ee 100644 --- a/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/components/_navigation-bar.less +++ b/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/components/_navigation-bar.less @@ -40,11 +40,12 @@ // --------------------------------------------- .nav { + .extend__clearer(); background-color: @nav__background-color; border-bottom: 1px solid @nav__border-color; border-top: 1px solid @nav__border-color; - .extend__clearer(); display: none; + margin-bottom: @nav-bar__indent-top; padding: @nav-bar-dot__size @nav__indent-right 0 0; } diff --git a/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/components/tooltips/_tooltips.less b/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/components/tooltips/_tooltips.less index 17e40244032bf28677b7821880ea2e4dddbc8c16..f364351ed02cc8299666470f95aec39f9df9fa43 100644 --- a/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/components/tooltips/_tooltips.less +++ b/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/components/tooltips/_tooltips.less @@ -54,6 +54,9 @@ margin-left: -(@tooltip-arrow__size / 2); padding: 0 @tooltip-arrow__size; } + p:last-child { + margin-bottom: 0; + } } // Wrapper for the tooltip content diff --git a/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/lib/_buttons.less b/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/lib/_buttons.less index ea227158185d4d72ccea47a7a873b5ed89187f73..3d18910a59ed8c139b8bdb629147f5ef647bd96f 100644 --- a/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/lib/_buttons.less +++ b/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/lib/_buttons.less @@ -113,8 +113,7 @@ ); color: @btn-prime__color; } - &:active, - &:focus { + &:active { .lib-background-gradient( @_background-gradient: true, @_background-gradient-direction: horizontal, diff --git a/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/lib/_structures.less b/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/lib/_structures.less index 5a63e7806784d3771b82f2015251acfa10ea8e56..0dd2a8ed52b499dd13aecea805d51ff779efd5dc 100644 --- a/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/lib/_structures.less +++ b/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/lib/_structures.less @@ -3,6 +3,9 @@ // * See COPYING.txt for license details. // */ +body:not([class]) { + min-width: 0; +} .container { display: block; margin: 0 auto 4rem; diff --git a/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/lib/_variables.less b/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/lib/_variables.less index 7f63e9a9933dbcc5a6a54458ae48180930e29105..7b9cc9eb8d254bfdb09933f829aa413d3381e616 100644 --- a/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/lib/_variables.less +++ b/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/lib/_variables.less @@ -156,7 +156,7 @@ // --------------------------------------------- @container__width: 100rem; -@container__indent: 2rem; +@container__indent: 0; @content__indent: @indent__l; diff --git a/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/pages/_readiness-check.less b/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/pages/_readiness-check.less index 542d96aedebca95ddfa5a3478fdf0330d663bfc0..cde931e2c71e1a17e0212f5012b16dc77c9ad40a 100644 --- a/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/pages/_readiness-check.less +++ b/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/pages/_readiness-check.less @@ -10,7 +10,7 @@ // Sizes @readiness-check-side__width: 22rem; -@readiness-check-content__indent: 7.5rem; +@readiness-check-content__indent: 5.7rem; // // Common @@ -18,6 +18,12 @@ .readiness-check-item { margin-bottom: 4rem; + min-height: 2.5rem; + .spinner { + font-size: 2.5rem; + float: left; + margin: -.4rem 0 0 1.7rem; + } } .readiness-check-title { @@ -49,7 +55,7 @@ .readiness-check-icon { float: left; - margin-left: 2rem; + margin-left: 1.7rem; margin-top: .7rem; } diff --git a/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/setup.less b/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/setup.less index 963c6b01b9f3bde479da1ab0390991a729aab6d4..c2bbaf8f432b9a66faca168a78d9cf5c36f3da39 100644 --- a/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/setup.less +++ b/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/setup.less @@ -98,7 +98,6 @@ // Updater pages @import '../../../updater/styles/less/pages/_common.less'; @import '../../../updater/styles/less/pages/_home.less'; -@import '../../../updater/styles/less/pages/_readiness-check.less'; @import '../../../updater/styles/less/pages/_component-manager.less'; @import '../../../updater/styles/less/pages/_login.less'; diff --git a/app/design/adminhtml/Magento/backend/web/app/updater/styles/less/pages/_readiness-check.less b/app/design/adminhtml/Magento/backend/web/app/updater/styles/less/pages/_readiness-check.less deleted file mode 100644 index 2b6356f5f41a9c74b9227870dca54a48004baf67..0000000000000000000000000000000000000000 --- a/app/design/adminhtml/Magento/backend/web/app/updater/styles/less/pages/_readiness-check.less +++ /dev/null @@ -1,23 +0,0 @@ -// /** -// * Copyright © 2015 Magento. All rights reserved. -// * See COPYING.txt for license details. -// */ - -// -// Upgrade -> Pages -> Readiness Check -// _____________________________________________ - -.readiness-check-item { - padding-top: .3rem; -} - -.readiness-check-icon { - margin-left: 2.4rem; - margin-top: -0.1rem; - &.icon-success { - font-size: 2rem; - } - &.icon-failed { - font-size: 1.6rem; - } -} \ No newline at end of file diff --git a/app/design/adminhtml/Magento/backend/web/css/source/_components.less b/app/design/adminhtml/Magento/backend/web/css/source/_components.less index a9ee8f523cc024a0cf14676317158fd8175d58a2..b376a1a2bd201c0c7281bc9cd8c01f4ccf392114 100644 --- a/app/design/adminhtml/Magento/backend/web/css/source/_components.less +++ b/app/design/adminhtml/Magento/backend/web/css/source/_components.less @@ -13,3 +13,4 @@ @import 'components/_popups.less'; @import 'components/_modals.less'; @import 'components/_modals_extend.less'; +@import 'components/_file-insertion.less'; diff --git a/app/design/adminhtml/Magento/backend/web/css/source/_forms.less b/app/design/adminhtml/Magento/backend/web/css/source/_forms.less index 2e18751ca49556d148c3c8eb2689908a5956ebec..8e1e484f69ac804738d756db855b4a2f09ab7295 100644 --- a/app/design/adminhtml/Magento/backend/web/css/source/_forms.less +++ b/app/design/adminhtml/Magento/backend/web/css/source/_forms.less @@ -7,3 +7,4 @@ @import 'forms/_controls.less'; @import 'forms/_fields.less'; @import 'forms/_temp.less'; +@import 'forms/_form-wysiwyg.less'; diff --git a/app/design/adminhtml/Magento/backend/web/css/source/components/_file-insertion.less b/app/design/adminhtml/Magento/backend/web/css/source/components/_file-insertion.less new file mode 100644 index 0000000000000000000000000000000000000000..cdc66d477555dc532e9f3d9d264c6df18ad0a131 --- /dev/null +++ b/app/design/adminhtml/Magento/backend/web/css/source/components/_file-insertion.less @@ -0,0 +1,49 @@ +// /** +// * Copyright © 2015 Magento. All rights reserved. +// * See COPYING.txt for license details. +// */ + +// +// Block 'Insert File' +// _________________________________________ + +.contents-uploader { + margin: 0 0 @indent__base; + .fileinput-button { + cursor: pointer; + display: inline-block; + float: none; + vertical-align: middle; + span { + display: none; + } + input { + -moz-transforms: none; + border: none; + opacity: 1; + position: static; + } + } +} + +.file-row { + border: 1px solid @color-gray68; + margin: @indent__xs 0; + padding: 2px; +} + +.filecnt { + border: 1px solid @color-gray68; + cursor: pointer; + display: inline-block; + margin: 0 @indent__xs 15px 0; + overflow: hidden; + padding: 3px; + width: 100px; + &.selected { + border-color: @color-blue-dodger; + } + p { + text-align: center; + } +} diff --git a/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less b/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less index 0ea7e84b1447fd2084d24fe1bf1259959f6ca77c..babbdf33f37c48d257f8b9ab055cc49154831065 100644 --- a/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less +++ b/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less @@ -21,6 +21,13 @@ @modal-action-close__font-size: 2rem; @modal-action-close__active__font-size: 1.8rem; @modal-action-close__hover__color: darken(@color-brownie-vanilla, 10%); +@modal-popup-footer-button__margin: 2rem; +@modal-popup-footer-button__padding: 1.4rem; +@modal-popup-footer-button__font-size: 1.5rem; +@modal-popup-footer-button__color: @color-brownie; +@modal-popup-colored__background: @color-lazy-sun; +@modal-popup-colorless__background: @color-white; +@modal-prompt-message__padding: 2rem; // @@ -31,6 +38,7 @@ position: absolute; right: 0; top: 0; + z-index: 1; &:active { transform: none; &:before { @@ -49,10 +57,74 @@ } .modal-popup { + &.prompt { + .prompt-message { + padding: @modal-prompt-message__padding 0; + input { + width: 100%; + } + } + } + &.confirm, + &.prompt { + .modal-inner-wrap { + .message { + background: @modal-popup-colorless__background; + } + } + } + &.modal-system-messages { + .modal-inner-wrap { + background: @modal-popup-colored__background; + } + } + &._image-box { + .modal-inner-wrap { + margin: 5rem auto; + max-width: @modal-popup-image-box__max-width; + position: static; + } + .thumbnail-preview { + padding-bottom: @indent__l; + text-align: center; + .thumbnail-preview-image-block { + border: 1px solid @modal-popup-image-box__border-color; + margin: 0 auto @indent__base; + max-width: @modal-popup-image-box-preview__max-width; + padding: @indent__base; + } + .thumbnail-preview-image { + max-height: @modal-popup-image-box-preview-image__max-height; + } + } + } + .modal-title { font-size: @modal-popup-title__font-size; margin-right: @modal-popup-title__font-size + @modal-popup__padding + 1rem; } + + .action-close { + padding: @modal-popup__padding @modal-popup__padding; + &:active{ + padding-top: @modal-popup__padding + (@modal-action-close__font-size - @modal-action-close__active__font-size) / 3; + padding-right: @modal-popup__padding + (@modal-action-close__font-size - @modal-action-close__active__font-size) / 3; + } + } + + .modal-footer { + text-align: right; + padding-top: @modal-slide__padding; + + .action-primary { + &:extend(.abs-action-secondary all); + &:extend(.abs-action-l all); + } + .action-secondary { + &:extend(.abs-action-tertiary all); + &:extend(.abs-action-l all); + } + } .action-close { padding: @modal-popup__padding; &:active, @@ -69,16 +141,63 @@ font-size: @modal-slide-title__font-size; margin-right: @modal-slide-title__font-size + @modal-slide__padding + 1rem; } + .action-close { padding: @modal-slide-header__padding-vertical @modal-slide__padding; &:active { - padding-right: @modal-slide__padding + (@modal-action-close__font-size - @modal-action-close__active__font-size) / 2; padding-top: @modal-slide-header__padding-vertical + (@modal-action-close__font-size - @modal-action-close__active__font-size) / 2; + padding-right: @modal-slide__padding + (@modal-action-close__font-size - @modal-action-close__active__font-size) / 2; } } .page-main-actions { - margin-bottom: @modal-slide-header__padding-vertical - @page-main-actions__padding; margin-top: @modal-slide-header__padding-vertical; + margin-bottom: @modal-slide-header__padding-vertical - @page-main-actions__padding; + } + + .magento_message { + padding: 0 @popup__padding__horizontal @popup__padding__vertical; + position: relative; + } + + .main-col, + .magento_message { + .insert-title-inner { + &:extend(.abs-clearfix all); + border-bottom: 1px solid @color-gray68; + margin: 0 0 @indent__base; + padding-bottom: @indent__xs; + } + .insert-actions { + float: right; + } + .title { + font-size: @font-size__l; + padding-top: @indent__xs; + } + } + + .main-col, + .side-col { + float: left; + padding-bottom: 0; + &:after { + display: none; + } + } + + .side-col { + width: 20%; + } + + .main-col { + padding-right: 0; + width: 80%; + } + + .content-footer { + .form-buttons { + float: right; + } } } @@ -86,4 +205,4 @@ font-weight: @font-weight__regular; margin-bottom: 0; min-height: 1em; -} +} \ No newline at end of file diff --git a/app/design/adminhtml/Magento/backend/web/css/source/components/_popups.less b/app/design/adminhtml/Magento/backend/web/css/source/components/_popups.less index 6586433b784236fba11f88d78df23519b19a5ca3..520b26a148b743f5a05985e148f70d34ef844299 100644 --- a/app/design/adminhtml/Magento/backend/web/css/source/components/_popups.less +++ b/app/design/adminhtml/Magento/backend/web/css/source/components/_popups.less @@ -389,15 +389,24 @@ // Attribute Popup // _____________________________________________ -.attribute-popup-actions { - background: @color-white; - border-top: 1px solid @color-gray68; - bottom: 0; - left: 0; - padding: @popup__padding; - position: fixed; - right: 0; - top: auto !important; +.catalog-product-attribute-edit { + .page-wrapper { + width: 100%; + .page-content { + padding-left: 0; + } + } +} + +.attribute-popup-actions { // ToDo UI: remove or refactor after New attribute popup refactored to sliding panel + &:extend(.abs-clearfix all); + background: @page-main-actions__background-color; + border-bottom: 1px solid @page-main-actions__border-color; + border-top: 1px solid @page-main-actions__border-color; + padding: @page-main-actions__padding; + &.page-actions { + float: none; + } &.fixed { // ToDo UI: remove or refactor after New attribute popup refactored to sliding panel background: @color-white !important; border-bottom: 0 !important; diff --git a/app/design/adminhtml/Magento/backend/web/css/source/forms/_controls.less b/app/design/adminhtml/Magento/backend/web/css/source/forms/_controls.less index ce0fee6a7723095b7771f13efd95ee082b0fd83e..a8e768b98e179ba058229cfce41a88755b8f36a9 100644 --- a/app/design/adminhtml/Magento/backend/web/css/source/forms/_controls.less +++ b/app/design/adminhtml/Magento/backend/web/css/source/forms/_controls.less @@ -176,6 +176,15 @@ option:empty { } } +// +// Service text or control. Can be used to add text or "Use Default Value" checkbox +// --------------------------------------------- + +.admin__control-service { + float: left; + margin: .8rem 0 0 3rem; +} + // // Textarea // --------------------------------------------- diff --git a/app/design/adminhtml/Magento/backend/web/css/source/forms/_form-wysiwyg.less b/app/design/adminhtml/Magento/backend/web/css/source/forms/_form-wysiwyg.less new file mode 100644 index 0000000000000000000000000000000000000000..8ce2fedb6619f3f25d73bd6a55752266ee5a2eda --- /dev/null +++ b/app/design/adminhtml/Magento/backend/web/css/source/forms/_form-wysiwyg.less @@ -0,0 +1,20 @@ +// /** +// * Copyright © 2015 Magento. All rights reserved. +// * See COPYING.txt for license details. +// */ + +// +// Wysiwyg form control styles +// --------------------------------------------- + +.admin__control-wysiwig { + .buttons-set { + margin: 0 0 15px; + button { + margin-right: 4px; + } + } + textarea{ + width: 100%; + } +} diff --git a/app/design/adminhtml/Magento/backend/web/js/theme.js b/app/design/adminhtml/Magento/backend/web/js/theme.js index 9d1524c4e2352bcdf793859851d0ed0b63c4e3db..5fdaa4c582430c25e0c085121e00ce6ed8e3580a 100644 --- a/app/design/adminhtml/Magento/backend/web/js/theme.js +++ b/app/design/adminhtml/Magento/backend/web/js/theme.js @@ -126,12 +126,13 @@ define('globalNavigationScroll', [ menuItems.on('click', function (e) { var submenu = $(this).children(subMenuClass), - delta; + delta, + logo = $('.logo')[0].offsetHeight; submenuHeight = submenu.height(); - if (submenuHeight > menuHeight && menuHeight > winHeight) { - menu.height(submenuHeight - $('.logo')[0].offsetHeight); + if (submenuHeight > menuHeight && menuHeight + logo > winHeight) { + menu.height(submenuHeight - logo); delta = -menu.position().top; window.scrollTo(0, 0); positionMenu(); diff --git a/app/design/frontend/Magento/blank/Magento_ProductVideo/web/css/source/_module.less b/app/design/frontend/Magento/blank/Magento_ProductVideo/web/css/source/_module.less new file mode 100644 index 0000000000000000000000000000000000000000..d51b978a97e0f74dad2a83121c0b331830e6a051 --- /dev/null +++ b/app/design/frontend/Magento/blank/Magento_ProductVideo/web/css/source/_module.less @@ -0,0 +1,70 @@ +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +.fotorama-video-container { + &:after { + background: url(../Magento_ProductVideo/img/gallery-sprite.png) bottom right; + bottom: 0; + content: ''; + height: 100px; + left: 0; + margin: auto; + position: absolute; + right: 0; + top: 12px; + width: 100px; + } + .magnify-lens { + display: none !important; + } + &.video-unplayed { + &:hover { + img { + opacity: 0.6; + } + &:after { + transform: scale(1.25); + } + } + } +} + +.video-thumb-icon:after { + background: url(../Magento_ProductVideo/img/gallery-sprite.png) bottom left; + bottom: 0; + content: ''; + height: 40px; + left: 0; + margin: auto; + position: absolute; + right: 0; + top: 10px; + width: 49px; +} + +.product-video { + height: 85%; + margin-top: 15%; + position: absolute; + top: 0; + width: 100%; + iframe { + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; + z-index: 9999; + } +} + +.fotorama__arr.hidden-video { + z-index: -1; +} + +.fotorama__video-close { + bottom: 89%; + top: auto; +} diff --git a/app/design/frontend/Magento/blank/etc/view.xml b/app/design/frontend/Magento/blank/etc/view.xml index 6020a6ad025f5519fc84d2a112f08a6e75ffbadc..bdb30144699031fe72d05d500f822ea471a6924c 100644 --- a/app/design/frontend/Magento/blank/etc/view.xml +++ b/app/design/frontend/Magento/blank/etc/view.xml @@ -181,20 +181,65 @@ </media> <vars module="Magento_Catalog"> - <!-- New gallery and magnifier theme settings --> - <var name="gallery:nav">thumbs</var> <!-- Gallery navigation style (false/thumbs/dots) --> - <var name="gallery:loop">true</var> <!-- Gallery navigation loop (true/false) --> - <var name="gallery:keyboard">true</var> <!-- Turn on/off keyboard arrows navigation (true/false) --> - <var name="gallery:arrows">true</var> <!-- Turn on/off arrows on the sides preview (true/false) --> - <var name="gallery:showCaption">false</var> <!-- Display alt text as image title (true/false) --> + <!-- Gallery and magnifier theme settings. Start --> + <var name="gallery"> + <var name="nav">thumbs</var> <!-- Gallery navigation style (false/thumbs/dots) --> + <var name="loop">true</var> <!-- Gallery navigation loop (true/false) --> + <var name="keyboard">true</var> <!-- Turn on/off keyboard arrows navigation (true/false) --> + <var name="arrows">true</var> <!-- Turn on/off arrows on the sides preview (true/false) --> + <var name="caption">false</var> <!-- Display alt text as image title (true/false) --> + <var name="allowfullscreen">true</var> <!-- Turn on/off fullscreen (true/false) --> + <var name="navdir">horizontal</var> <!-- Sliding direction of thumbnails (horizontal/vertical) --> + <var name="navarrows">true</var> <!-- Turn on/off on the thumbs navigation sides (true/false) --> + <var name="navtype">slides</var> <!-- Sliding type of thumbnails (slides/thumbs) --> + <var name="transition"> + <var name="effect">slide</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) --> + <var name="duration">500</var> <!-- Sets transition duration in ms --> + </var> + <var name="fullscreen"> + <var name="nav">thumbs</var> <!-- Fullscreen navigation style (false/thumbs/dots) --> + <var name="loop">true</var> <!-- Fullscreen navigation loop (true/false/null) --> + <var name="keyboard">true</var> <!-- Turn on/off keyboard arrows navigation (true/false/null) --> + <var name="arrows">false</var> <!-- Turn on/off arrows on the sides preview (true/false/null) --> + <var name="caption">false</var> <!-- Display alt text as image title (true/false) --> + <var name="navdir">horizontal</var> <!--Sliding direction of thumbnails in full screen(horizontal/vertical) --> + <var name="thumbwidth">150</var> <!-- Width of thumbnails in fullscreen --> + <var name="thumbheight">150</var> <!-- Height of thumbnails in fullscreen --> + <var name="navigation_carousel">true</var> <!-- Display navigation thumbs as carousel (true/false) --> + <var name="transition"> + <var name="effect">dissolve</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) --> + <var name="duration">500</var> <!-- Sets transition duration in ms --> + <var name="carousel">true</var> <!-- Display navigation thumbs as carousel (true/false) --> + </var> + </var> + </var> - <var name="magnifier:top"></var> <!-- Top position of magnifier --> - <var name="magnifier:left"></var> <!-- Left position of magnifier --> - <var name="magnifier:width"></var> <!-- Width of magnifier block --> - <var name="magnifier:height"></var> <!-- Height of magnifier block --> - <var name="magnifier:eventType">hover</var> <!-- Action that atcivates zoom (hover/click) --> - <var name="magnifier:enabled">true</var> <!-- Turn on/off magnifier (true/false) --> - <!-- end --> + <var name="magnifier"> + <var name="fullscreenzoom">5</var> <!-- Zoom for fullscreen (integer)--> + <var name="top"></var> <!-- Top position of magnifier --> + <var name="left"></var> <!-- Left position of magnifier --> + <var name="width"></var> <!-- Width of magnifier block --> + <var name="height"></var> <!-- Height of magnifier block --> + <var name="eventType">hover</var> <!-- Action that atcivates zoom (hover/click) --> + <var name="enabled">true</var> <!-- Turn on/off magnifier (true/false) --> + </var> + + <var name="breakpoints"> + <var name="mobile"> + <var name="conditions"> + <var name="max-width">767px</var> + </var> + <var name="options"> + <var name="options"> + <var name="navigation">dots</var> + </var> + <var name="magnifierOpts"> + <var name="enabled">false</var> + </var> + </var> + </var> + </var> + <!-- end. Gallery and magnifier theme settings --> <var name="product_small_image_sidebar_size">100</var> <!-- Override for small product image --> <var name="product_base_image_size">275</var> <!-- Override for base product image --> diff --git a/app/design/frontend/Magento/blank/web/css/styles-l.less b/app/design/frontend/Magento/blank/web/css/styles-l.less index c95e1c41e47adbe81784d9426680cb0718084e2f..2463d263a58c1b6a0450936ddc190da34c1fb8d3 100644 --- a/app/design/frontend/Magento/blank/web/css/styles-l.less +++ b/app/design/frontend/Magento/blank/web/css/styles-l.less @@ -22,7 +22,6 @@ //@magento_import 'source/_module.less'; // Theme modules //@magento_import 'source/_widgets.less'; // Theme widgets -//@magento_import 'source/_extend.less'; // Extend for minor customisation // // Media queries collector @@ -38,3 +37,9 @@ // --------------------------------------------- @import 'source/_theme.less'; + +// +// Extend for minor customisation +// --------------------------------------------- + +//@magento_import 'source/_extend.less'; diff --git a/app/design/frontend/Magento/blank/web/css/styles-m.less b/app/design/frontend/Magento/blank/web/css/styles-m.less index dc69a28471e952e442bc874a062c2245de883e1a..fe2783067e26159773f76dc3499bb1fe2761e3fa 100644 --- a/app/design/frontend/Magento/blank/web/css/styles-m.less +++ b/app/design/frontend/Magento/blank/web/css/styles-m.less @@ -23,7 +23,6 @@ //@magento_import 'source/_module.less'; // Theme modules //@magento_import 'source/_widgets.less'; // Theme widgets -//@magento_import 'source/_extend.less'; // Extend for minor customisation // // Media queries collector @@ -38,3 +37,9 @@ // --------------------------------------------- @import 'source/_theme.less'; + +// +// Extend for minor customisation +// --------------------------------------------- + +//@magento_import 'source/_extend.less'; diff --git a/app/design/frontend/Magento/luma/Magento_Review/web/css/source/_module.less b/app/design/frontend/Magento/luma/Magento_Review/web/css/source/_module.less index 7149c5d38d888063b20dc16a0c6f9a79e72093ec..2dea6077b721a9aa25370e06f812e89bb4b469db 100644 --- a/app/design/frontend/Magento/luma/Magento_Review/web/css/source/_module.less +++ b/app/design/frontend/Magento/luma/Magento_Review/web/css/source/_module.less @@ -38,40 +38,6 @@ } } -// -// Reviews list and form -//-------------------------------------- - -.catalog-product-view.ajax-loading { - height: 100%; - overflow: hidden; - &:after { - content: ""; - position:fixed; - height: 100%; - display: block; - width: 100%; - z-index: 998; - background: rgba(255,255,255,.4); - } - &:before { - content: ""; - position:fixed; - top: 0; - left: 0; - bottom: 0; - right: 0; - margin:auto; - display: block; - @loading__size: 74px; - width: @loading__size; - height: @loading__size; - border-radius: @loading__size/2; - z-index: 999; - background: rgba(255, 255, 255, .7) url('../images/loader-1.gif') no-repeat 50% 50%; - } -} - // // Review product page //-------------------------------------- diff --git a/app/design/frontend/Magento/luma/etc/view.xml b/app/design/frontend/Magento/luma/etc/view.xml index 60da26b47742434de38f549d7626c556a26211e0..974c4c9fe5a8064263a06996ba0e9ea7c27ebaef 100644 --- a/app/design/frontend/Magento/luma/etc/view.xml +++ b/app/design/frontend/Magento/luma/etc/view.xml @@ -78,20 +78,20 @@ </image> <image id="product_page_image_large" type="image"/> <image id="product_page_image_medium" type="image"> - <width>560</width> - <height>700</height> + <width>700</width> + <height>560</height> </image> <image id="product_page_image_small" type="thumbnail"> <width>88</width> <height>110</height> </image> <image id="product_page_main_image" type="image"> - <width>560</width> - <height>700</height> + <width>700</width> + <height>560</height> </image> <image id="product_page_main_image_default" type="image"> - <width>560</width> - <height>700</height> + <width>700</width> + <height>560</height> </image> <image id="product_page_more_views" type="thumbnail"> <width>88</width> @@ -185,20 +185,65 @@ </media> <vars module="Magento_Catalog"> - <!-- New gallery and magnifier theme settings --> - <var name="gallery:nav">dots</var> <!-- Gallery navigation style (false/thumbs/dots) --> - <var name="gallery:loop">false</var> <!-- Gallery navigation loop (true/false) --> - <var name="gallery:keyboard">true</var> <!-- Turn on/off keyboard arrows navigation (true/false) --> - <var name="gallery:arrows">true</var> <!-- Turn on/off arrows on the sides preview (true/false) --> - <var name="gallery:showCaption">true</var> <!-- Display alt text as image title (true/false) --> + <!-- Gallery and magnifier theme settings. Start --> + <var name="gallery"> + <var name="nav">thumbs</var> <!-- Gallery navigation style (false/thumbs/dots) --> + <var name="loop">true</var> <!-- Gallery navigation loop (true/false) --> + <var name="keyboard">true</var> <!-- Turn on/off keyboard arrows navigation (true/false) --> + <var name="arrows">true</var> <!-- Turn on/off arrows on the sides preview (true/false) --> + <var name="caption">false</var> <!-- Display alt text as image title (true/false) --> + <var name="allowfullscreen">true</var> <!-- Turn on/off fullscreen (true/false) --> + <var name="navdir">horizontal</var> <!-- Sliding direction of thumbnails (horizontal/vertical) --> + <var name="navarrows">true</var> <!-- Turn on/off on the thumbs navigation sides (true/false) --> + <var name="navtype">slides</var> <!-- Sliding type of thumbnails (slides/thumbs) --> + <var name="transition"> + <var name="effect">slide</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) --> + <var name="duration">500</var> <!-- Sets transition duration in ms --> + </var> + <var name="fullscreen"> + <var name="nav">thumbs</var> <!-- Fullscreen navigation style (false/thumbs/dots) --> + <var name="loop">true</var> <!-- Fullscreen navigation loop (true/false/null) --> + <var name="keyboard">true</var> <!-- Turn on/off keyboard arrows navigation (true/false/null) --> + <var name="arrows">false</var> <!-- Turn on/off arrows on the sides preview (true/false/null) --> + <var name="caption">false</var> <!-- Display alt text as image title (true/false) --> + <var name="navdir">horizontal</var> <!--Sliding direction of thumbnails in full screen(horizontal/vertical) --> + <var name="thumbwidth">150</var> <!-- Width of thumbnails in fullscreen --> + <var name="thumbheight">150</var> <!-- Height of thumbnails in fullscreen --> + <var name="navigation_carousel">true</var> <!-- Display navigation thumbs as carousel (true/false) --> + <var name="transition"> + <var name="effect">dissolve</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) --> + <var name="duration">500</var> <!-- Sets transition duration in ms --> + <var name="carousel">true</var> <!-- Display navigation thumbs as carousel (true/false) --> + </var> + </var> + </var> - <var name="magnifier:top"></var> <!-- Top position of magnifier --> - <var name="magnifier:left"></var> <!-- Right position of magnifier --> - <var name="magnifier:width"></var> <!-- Width of magnifier block --> - <var name="magnifier:height"></var> <!-- Height of magnifier block --> - <var name="magnifier:eventType">click</var> <!-- Action that atcivates zoom (hover/click) --> - <var name="magnifier:enabled">true</var> <!-- Turn on/off magnifier (true/false) --> - <!-- end --> + <var name="magnifier"> + <var name="fullscreenzoom">5</var> <!-- Zoom for fullscreen (integer)--> + <var name="top"></var> <!-- Top position of magnifier --> + <var name="left"></var> <!-- Left position of magnifier --> + <var name="width"></var> <!-- Width of magnifier block --> + <var name="height"></var> <!-- Height of magnifier block --> + <var name="eventType">hover</var> <!-- Action that atcivates zoom (hover/click) --> + <var name="enabled">true</var> <!-- Turn on/off magnifier (true/false) --> + </var> + + <var name="breakpoints"> + <var name="mobile"> + <var name="conditions"> + <var name="max-width">767px</var> + </var> + <var name="options"> + <var name="options"> + <var name="nav">dots</var> + </var> + <var name="magnifierOpts"> + <var name="enabled">false</var> + </var> + </var> + </var> + </var> + <!-- end. Gallery and magnifier theme settings --> <var name="product_small_image_sidebar_size">100</var> <!-- Override for small product image --> <var name="product_base_image_size">275</var> <!-- Override for base product image --> diff --git a/app/etc/di.xml b/app/etc/di.xml index e1aaf36869b136f93525473f8f573e11d5b5fb12..598bc2c341ed351b1cb1ebd20feee0d742330b33 100755 --- a/app/etc/di.xml +++ b/app/etc/di.xml @@ -94,7 +94,7 @@ <preference for="Magento\Framework\Api\SearchCriteriaInterface" type="Magento\Framework\Api\SearchCriteria"/> <preference for="Magento\Framework\App\Rss\UrlBuilderInterface" type="Magento\Framework\App\Rss\UrlBuilder"/> <preference for="Magento\Framework\DB\LoggerInterface" type="Magento\Framework\DB\Logger\Quiet"/> - <preference for="Magento\Framework\App\ResourceConnection\ConnectionAdapterInterface" type="Magento\Framework\Model\ModelResource\Type\Db\Pdo\Mysql"/> + <preference for="Magento\Framework\App\ResourceConnection\ConnectionAdapterInterface" type="Magento\Framework\Model\ResourceModel\Type\Db\Pdo\Mysql"/> <preference for="Magento\Framework\DB\QueryInterface" type="Magento\Framework\DB\Query"/> <preference for="Magento\Framework\App\ProductMetadataInterface" type="Magento\Framework\App\ProductMetadata"/> <preference for="Magento\Framework\Acl\CacheInterface" type="Magento\Framework\Acl\Cache" /> @@ -133,13 +133,13 @@ <preference for="Magento\Framework\Pricing\Amount\AmountInterface" type="Magento\Framework\Pricing\Amount\Base" /> <preference for="Magento\Framework\Api\SearchResultsInterface" type="Magento\Framework\Api\SearchResults" /> <preference for="Magento\Framework\Api\AttributeInterface" type="Magento\Framework\Api\AttributeValue" /> - <preference for="Magento\Framework\Model\ModelResource\Db\TransactionManagerInterface" type="Magento\Framework\Model\ModelResource\Db\TransactionManager" /> + <preference for="Magento\Framework\Model\ResourceModel\Db\TransactionManagerInterface" type="Magento\Framework\Model\ResourceModel\Db\TransactionManager" /> <preference for="Magento\Framework\Api\Data\ImageContentInterface" type="Magento\Framework\Api\ImageContent" /> <preference for="Magento\Framework\Api\ImageContentValidatorInterface" type="Magento\Framework\Api\ImageContentValidator" /> <preference for="Magento\Framework\Api\ImageProcessorInterface" type="Magento\Framework\Api\ImageProcessor" /> <preference for="Magento\Framework\Code\Reader\ClassReaderInterface" type="Magento\Framework\Code\Reader\ClassReader" /> <preference for="Magento\Framework\Stdlib\DateTime\DateTimeFormatterInterface" type="Magento\Framework\Stdlib\DateTime\DateTimeFormatter"/> - <type name="Magento\Framework\Model\ModelResource\Db\TransactionManager" shared="false" /> + <type name="Magento\Framework\Model\ResourceModel\Db\TransactionManager" shared="false" /> <type name="Magento\Framework\Logger\Handler\Base"> <arguments> <argument name="filesystem" xsi:type="object">Magento\Framework\Filesystem\Driver\File</argument> diff --git a/dev/tests/api-functional/_files/Magento/TestModule4/Model/ResourceModel/Item.php b/dev/tests/api-functional/_files/Magento/TestModule4/Model/ResourceModel/Item.php index 39e1bf089cd388300cece8ae19319d196d78fc46..b8cab8ad42eec1a52394573b329d6cc121a98c74 100644 --- a/dev/tests/api-functional/_files/Magento/TestModule4/Model/ResourceModel/Item.php +++ b/dev/tests/api-functional/_files/Magento/TestModule4/Model/ResourceModel/Item.php @@ -9,7 +9,7 @@ namespace Magento\TestModule4\Model\ResourceModel; /** * Sample resource model */ -class Item extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Item extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Initialize connection and define main table diff --git a/dev/tests/api-functional/_files/Magento/TestModuleMSC/Model/ResourceModel/Item.php b/dev/tests/api-functional/_files/Magento/TestModuleMSC/Model/ResourceModel/Item.php index 4052cef7763cae791e9dff947465910f640c6269..fcdce38ba6742e16f965a7c8b64d58306250ba21 100644 --- a/dev/tests/api-functional/_files/Magento/TestModuleMSC/Model/ResourceModel/Item.php +++ b/dev/tests/api-functional/_files/Magento/TestModuleMSC/Model/ResourceModel/Item.php @@ -9,7 +9,7 @@ namespace Magento\TestModuleMSC\Model\ResourceModel; /** * Sample resource model */ -class Item extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class Item extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Initialize connection and define main table diff --git a/dev/tests/api-functional/testsuite/Magento/Bundle/Api/OrderItemRepositoryTest.php b/dev/tests/api-functional/testsuite/Magento/Bundle/Api/OrderItemRepositoryTest.php new file mode 100644 index 0000000000000000000000000000000000000000..72005876cc595da0a6d1a2ae85a258464b07781f --- /dev/null +++ b/dev/tests/api-functional/testsuite/Magento/Bundle/Api/OrderItemRepositoryTest.php @@ -0,0 +1,128 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Bundle\Api; + +use Magento\TestFramework\TestCase\WebapiAbstract; + +class OrderItemRepositoryTest extends WebapiAbstract +{ + const RESOURCE_PATH = '/V1/orders/items'; + + const SERVICE_VERSION = 'V1'; + const SERVICE_NAME = 'salesOrderItemRepositoryV1'; + + const ORDER_INCREMENT_ID = '100000001'; + + /** + * @var \Magento\TestFramework\ObjectManager + */ + protected $objectManager; + + protected function setUp() + { + $this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); + } + + /** + * @magentoApiDataFixture Magento/Bundle/_files/order_item_with_bundle_and_options.php + */ + public function testGet() + { + /** @var \Magento\Sales\Model\Order $order */ + $order = $this->objectManager->create('Magento\Sales\Model\Order'); + $order->loadByIncrementId(self::ORDER_INCREMENT_ID); + $orderItem = current($order->getItems()); + + $serviceInfo = [ + 'rest' => [ + 'resourcePath' => self::RESOURCE_PATH . '/' . $orderItem->getId(), + 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET, + ], + 'soap' => [ + 'service' => self::SERVICE_NAME, + 'serviceVersion' => self::SERVICE_VERSION, + 'operation' => self::SERVICE_NAME . 'get', + ], + ]; + + $response = $this->_webApiCall($serviceInfo, ['id' => $orderItem->getId()]); + + $this->assertTrue(is_array($response)); + $this->assertOrderItem($orderItem, $response); + } + + /** + * @magentoApiDataFixture Magento/Bundle/_files/order_item_with_bundle_and_options.php + */ + public function testGetList() + { + /** @var \Magento\Sales\Model\Order $order */ + $order = $this->objectManager->create('Magento\Sales\Model\Order'); + $order->loadByIncrementId(self::ORDER_INCREMENT_ID); + + /** @var $searchCriteriaBuilder \Magento\Framework\Api\SearchCriteriaBuilder */ + $searchCriteriaBuilder = $this->objectManager->create('Magento\Framework\Api\SearchCriteriaBuilder'); + /** @var $filterBuilder \Magento\Framework\Api\FilterBuilder */ + $filterBuilder = $this->objectManager->create('Magento\Framework\Api\FilterBuilder'); + + $searchCriteriaBuilder->addFilters( + [ + $filterBuilder->setField('order_id') + ->setValue($order->getId()) + ->create(), + ] + ); + + $requestData = ['criteria' => $searchCriteriaBuilder->create()->__toArray()]; + + $serviceInfo = [ + 'rest' => [ + 'resourcePath' => self::RESOURCE_PATH . '?' . http_build_query($requestData), + 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET, + ], + 'soap' => [ + 'service' => self::SERVICE_NAME, + 'serviceVersion' => self::SERVICE_VERSION, + 'operation' => self::SERVICE_NAME . 'getList', + ], + ]; + + $response = $this->_webApiCall($serviceInfo, $requestData); + + $this->assertTrue(is_array($response)); + $this->assertArrayHasKey('items', $response); + $this->assertCount(1, $response['items']); + $this->assertTrue(is_array($response['items'][0])); + $this->assertOrderItem(current($order->getItems()), $response['items'][0]); + } + + /** + * @param \Magento\Sales\Model\Order\Item $orderItem + * @param array $response + * @return void + */ + protected function assertOrderItem(\Magento\Sales\Model\Order\Item $orderItem, array $response) + { + $bundleOption = $orderItem->getBuyRequest()->getBundleOption(); + $bundleOptionQty = $orderItem->getBuyRequest()->getBundleOptionQty(); + + $this->assertArrayHasKey('product_option', $response); + $this->assertArrayHasKey('extension_attributes', $response['product_option']); + $this->assertArrayHasKey('bundle_options', $response['product_option']['extension_attributes']); + + $actualOptions = $response['product_option']['extension_attributes']['bundle_options']; + + $this->assertEquals(array_keys($bundleOption), array_column($actualOptions, 'option_id')); + $this->assertEquals($bundleOptionQty, array_column($actualOptions, 'option_qty', 'option_id')); + + foreach ($actualOptions as $option) { + $expectedSelections = is_array($bundleOption[$option['option_id']]) + ? $bundleOption[$option['option_id']] + : [$bundleOption[$option['option_id']]]; + $this->assertEquals($expectedSelections, $option['option_selections']); + } + } +} diff --git a/dev/tests/api-functional/testsuite/Magento/Catalog/Api/CategoryLinkRepositoryTest.php b/dev/tests/api-functional/testsuite/Magento/Catalog/Api/CategoryLinkRepositoryTest.php index 84588ac82171ea29d17ba377b753d9265c5417db..6a5b956a28fa19c793ece2dd36e035d14777d2f3 100644 --- a/dev/tests/api-functional/testsuite/Magento/Catalog/Api/CategoryLinkRepositoryTest.php +++ b/dev/tests/api-functional/testsuite/Magento/Catalog/Api/CategoryLinkRepositoryTest.php @@ -27,6 +27,8 @@ class CategoryLinkRepositoryTest extends WebapiAbstract */ public function testSave($productLink, $productId, $productPosition = 0) { + $this->checkIfTestable(); + $serviceInfo = [ 'rest' => [ 'resourcePath' => self::RESOURCE_PATH_SUFFIX @@ -69,6 +71,8 @@ class CategoryLinkRepositoryTest extends WebapiAbstract */ public function testUpdateProduct($productLink, $productId, $productPosition = 0) { + $this->checkIfTestable(); + $serviceInfo = [ 'rest' => [ 'resourcePath' => self::RESOURCE_PATH_SUFFIX @@ -107,6 +111,8 @@ class CategoryLinkRepositoryTest extends WebapiAbstract */ public function testDelete() { + $this->checkIfTestable(); + $serviceInfo = [ 'rest' => [ 'resourcePath' => self::RESOURCE_PATH_SUFFIX . '/' . $this->categoryId . @@ -146,4 +152,20 @@ class CategoryLinkRepositoryTest extends WebapiAbstract return false; } } + + /** + * MAGETWO-41737: Skip tests when the flag 'custom_categories_sort' is up + * @return void + */ + private function checkIfTestable() + { + $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); + + /** @var \Magento\Framework\App\Config\ScopeConfigInterface $config */ + $config = $objectManager->get('Magento\Framework\App\Config\ScopeConfigInterface'); + + if ($config->getValue('catalog/custom_categories_sort') == 1) { + $this->markTestSkipped('Will be fixed after MAGETWO-41737'); + } + } } diff --git a/dev/tests/api-functional/testsuite/Magento/Catalog/Api/OrderItemRepositoryTest.php b/dev/tests/api-functional/testsuite/Magento/Catalog/Api/OrderItemRepositoryTest.php new file mode 100644 index 0000000000000000000000000000000000000000..db63fbb6084601820a27dc4cc770fa6826a28507 --- /dev/null +++ b/dev/tests/api-functional/testsuite/Magento/Catalog/Api/OrderItemRepositoryTest.php @@ -0,0 +1,129 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Catalog\Api; + +use Magento\TestFramework\TestCase\WebapiAbstract; + +class OrderItemRepositoryTest extends WebapiAbstract +{ + const RESOURCE_PATH = '/V1/orders/items'; + + const SERVICE_VERSION = 'V1'; + const SERVICE_NAME = 'salesOrderItemRepositoryV1'; + + const ORDER_INCREMENT_ID = '100000001'; + + /** + * @var \Magento\TestFramework\ObjectManager + */ + protected $objectManager; + + protected function setUp() + { + $this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); + } + + /** + * @magentoApiDataFixture Magento/Catalog/_files/order_item_with_product_and_custom_options.php + */ + public function testGet() + { + /** @var \Magento\Sales\Model\Order $order */ + $order = $this->objectManager->create('Magento\Sales\Model\Order'); + $order->loadByIncrementId(self::ORDER_INCREMENT_ID); + $orderItem = current($order->getItems()); + + $serviceInfo = [ + 'rest' => [ + 'resourcePath' => self::RESOURCE_PATH . '/' . $orderItem->getId(), + 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET, + ], + 'soap' => [ + 'service' => self::SERVICE_NAME, + 'serviceVersion' => self::SERVICE_VERSION, + 'operation' => self::SERVICE_NAME . 'get', + ], + ]; + + $response = $this->_webApiCall($serviceInfo, ['id' => $orderItem->getId()]); + + $this->assertTrue(is_array($response)); + $this->assertOrderItem($orderItem, $response); + } + + /** + * @magentoApiDataFixture Magento/Catalog/_files/order_item_with_product_and_custom_options.php + */ + public function testGetList() + { + /** @var \Magento\Sales\Model\Order $order */ + $order = $this->objectManager->create('Magento\Sales\Model\Order'); + $order->loadByIncrementId(self::ORDER_INCREMENT_ID); + + /** @var $searchCriteriaBuilder \Magento\Framework\Api\SearchCriteriaBuilder */ + $searchCriteriaBuilder = $this->objectManager->create('Magento\Framework\Api\SearchCriteriaBuilder'); + /** @var $filterBuilder \Magento\Framework\Api\FilterBuilder */ + $filterBuilder = $this->objectManager->create('Magento\Framework\Api\FilterBuilder'); + + $searchCriteriaBuilder->addFilters( + [ + $filterBuilder->setField('order_id') + ->setValue($order->getId()) + ->create(), + ] + ); + + $requestData = ['criteria' => $searchCriteriaBuilder->create()->__toArray()]; + + $serviceInfo = [ + 'rest' => [ + 'resourcePath' => self::RESOURCE_PATH . '?' . http_build_query($requestData), + 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET, + ], + 'soap' => [ + 'service' => self::SERVICE_NAME, + 'serviceVersion' => self::SERVICE_VERSION, + 'operation' => self::SERVICE_NAME . 'getList', + ], + ]; + + $response = $this->_webApiCall($serviceInfo, $requestData); + + $this->assertTrue(is_array($response)); + $this->assertArrayHasKey('items', $response); + $this->assertCount(1, $response['items']); + $this->assertTrue(is_array($response['items'][0])); + $this->assertOrderItem(current($order->getItems()), $response['items'][0]); + } + + /** + * @param \Magento\Sales\Model\Order\Item $orderItem + * @param array $response + * @return void + */ + protected function assertOrderItem(\Magento\Sales\Model\Order\Item $orderItem, array $response) + { + $expected = $orderItem->getBuyRequest()->getOptions(); + + $this->assertArrayHasKey('product_option', $response); + $this->assertArrayHasKey('extension_attributes', $response['product_option']); + $this->assertArrayHasKey('custom_options', $response['product_option']['extension_attributes']); + + $actualOptions = $response['product_option']['extension_attributes']['custom_options']; + + $expectedOptions = []; + foreach ($expected as $optionId => $optionValue) { + if (is_array($optionValue)) { + $optionValue = implode(',', $optionValue); + } + $expectedOptions[] = [ + 'option_id' => $optionId, + 'option_value' => $optionValue, + ]; + } + $this->assertEquals($expectedOptions, $actualOptions); + } +} diff --git a/dev/tests/api-functional/testsuite/Magento/ConfigurableProduct/Api/OrderItemRepositoryTest.php b/dev/tests/api-functional/testsuite/Magento/ConfigurableProduct/Api/OrderItemRepositoryTest.php new file mode 100644 index 0000000000000000000000000000000000000000..25cb0e8652bf2996a9864e68bfcbeb5fb977fe63 --- /dev/null +++ b/dev/tests/api-functional/testsuite/Magento/ConfigurableProduct/Api/OrderItemRepositoryTest.php @@ -0,0 +1,125 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\ConfigurableProduct\Api; + +use Magento\TestFramework\TestCase\WebapiAbstract; + +class OrderItemRepositoryTest extends WebapiAbstract +{ + const RESOURCE_PATH = '/V1/orders/items'; + + const SERVICE_VERSION = 'V1'; + const SERVICE_NAME = 'salesOrderItemRepositoryV1'; + + const ORDER_INCREMENT_ID = '100000001'; + + /** + * @var \Magento\TestFramework\ObjectManager + */ + protected $objectManager; + + protected function setUp() + { + $this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); + } + + /** + * @magentoApiDataFixture Magento/ConfigurableProduct/_files/order_item_with_configurable_and_options.php + */ + public function testGet() + { + /** @var \Magento\Sales\Model\Order $order */ + $order = $this->objectManager->create('Magento\Sales\Model\Order'); + $order->loadByIncrementId(self::ORDER_INCREMENT_ID); + $orderItem = current($order->getItems()); + + $serviceInfo = [ + 'rest' => [ + 'resourcePath' => self::RESOURCE_PATH . '/' . $orderItem->getId(), + 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET, + ], + 'soap' => [ + 'service' => self::SERVICE_NAME, + 'serviceVersion' => self::SERVICE_VERSION, + 'operation' => self::SERVICE_NAME . 'get', + ], + ]; + + $response = $this->_webApiCall($serviceInfo, ['id' => $orderItem->getId()]); + + $this->assertTrue(is_array($response)); + $this->assertOrderItem($orderItem, $response); + } + + /** + * @magentoApiDataFixture Magento/ConfigurableProduct/_files/order_item_with_configurable_and_options.php + */ + public function testGetList() + { + /** @var \Magento\Sales\Model\Order $order */ + $order = $this->objectManager->create('Magento\Sales\Model\Order'); + $order->loadByIncrementId(self::ORDER_INCREMENT_ID); + + /** @var $searchCriteriaBuilder \Magento\Framework\Api\SearchCriteriaBuilder */ + $searchCriteriaBuilder = $this->objectManager->create('Magento\Framework\Api\SearchCriteriaBuilder'); + /** @var $filterBuilder \Magento\Framework\Api\FilterBuilder */ + $filterBuilder = $this->objectManager->create('Magento\Framework\Api\FilterBuilder'); + + $searchCriteriaBuilder->addFilters( + [ + $filterBuilder->setField('order_id') + ->setValue($order->getId()) + ->create(), + ] + ); + + $requestData = ['criteria' => $searchCriteriaBuilder->create()->__toArray()]; + + $serviceInfo = [ + 'rest' => [ + 'resourcePath' => self::RESOURCE_PATH . '?' . http_build_query($requestData), + 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET, + ], + 'soap' => [ + 'service' => self::SERVICE_NAME, + 'serviceVersion' => self::SERVICE_VERSION, + 'operation' => self::SERVICE_NAME . 'getList', + ], + ]; + + $response = $this->_webApiCall($serviceInfo, $requestData); + + $this->assertTrue(is_array($response)); + $this->assertArrayHasKey('items', $response); + $this->assertCount(1, $response['items']); + $this->assertTrue(is_array($response['items'][0])); + $this->assertOrderItem(current($order->getItems()), $response['items'][0]); + } + + /** + * @param \Magento\Sales\Model\Order\Item $orderItem + * @param array $response + * @return void + */ + protected function assertOrderItem(\Magento\Sales\Model\Order\Item $orderItem, array $response) + { + $expected = $orderItem->getBuyRequest()->getSuperAttribute(); + + $this->assertArrayHasKey('product_option', $response); + $this->assertArrayHasKey('extension_attributes', $response['product_option']); + $this->assertArrayHasKey('configurable_item_options', $response['product_option']['extension_attributes']); + + $actualOptions = $response['product_option']['extension_attributes']['configurable_item_options']; + + $this->assertTrue(is_array($actualOptions)); + $this->assertTrue(is_array($actualOptions[0])); + $this->assertArrayHasKey('option_id', $actualOptions[0]); + $this->assertArrayHasKey('option_value', $actualOptions[0]); + + $this->assertEquals(key($expected), $actualOptions[0]['option_id']); + $this->assertEquals(current($expected), $actualOptions[0]['option_value']); + } +} diff --git a/dev/tests/api-functional/testsuite/Magento/Downloadable/Api/OrderItemRepositoryTest.php b/dev/tests/api-functional/testsuite/Magento/Downloadable/Api/OrderItemRepositoryTest.php new file mode 100644 index 0000000000000000000000000000000000000000..41a5c6a506962a018eeb8421c6d8bc53f5ad7567 --- /dev/null +++ b/dev/tests/api-functional/testsuite/Magento/Downloadable/Api/OrderItemRepositoryTest.php @@ -0,0 +1,120 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Downloadable\Api; + +use Magento\TestFramework\TestCase\WebapiAbstract; + +class OrderItemRepositoryTest extends WebapiAbstract +{ + const RESOURCE_PATH = '/V1/orders/items'; + + const SERVICE_VERSION = 'V1'; + const SERVICE_NAME = 'salesOrderItemRepositoryV1'; + + const ORDER_INCREMENT_ID = '100000001'; + + /** + * @var \Magento\TestFramework\ObjectManager + */ + protected $objectManager; + + protected function setUp() + { + $this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); + } + + /** + * @magentoApiDataFixture Magento/Downloadable/_files/order_item_with_downloadable_and_options.php + */ + public function testGet() + { + /** @var \Magento\Sales\Model\Order $order */ + $order = $this->objectManager->create('Magento\Sales\Model\Order'); + $order->loadByIncrementId(self::ORDER_INCREMENT_ID); + $orderItem = current($order->getItems()); + + $serviceInfo = [ + 'rest' => [ + 'resourcePath' => self::RESOURCE_PATH . '/' . $orderItem->getId(), + 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET, + ], + 'soap' => [ + 'service' => self::SERVICE_NAME, + 'serviceVersion' => self::SERVICE_VERSION, + 'operation' => self::SERVICE_NAME . 'get', + ], + ]; + + $response = $this->_webApiCall($serviceInfo, ['id' => $orderItem->getId()]); + + $this->assertTrue(is_array($response)); + $this->assertOrderItem($orderItem, $response); + } + + /** + * @magentoApiDataFixture Magento/Downloadable/_files/order_item_with_downloadable_and_options.php + */ + public function testGetList() + { + /** @var \Magento\Sales\Model\Order $order */ + $order = $this->objectManager->create('Magento\Sales\Model\Order'); + $order->loadByIncrementId(self::ORDER_INCREMENT_ID); + + /** @var $searchCriteriaBuilder \Magento\Framework\Api\SearchCriteriaBuilder */ + $searchCriteriaBuilder = $this->objectManager->create('Magento\Framework\Api\SearchCriteriaBuilder'); + /** @var $filterBuilder \Magento\Framework\Api\FilterBuilder */ + $filterBuilder = $this->objectManager->create('Magento\Framework\Api\FilterBuilder'); + + $searchCriteriaBuilder->addFilters( + [ + $filterBuilder->setField('order_id') + ->setValue($order->getId()) + ->create(), + ] + ); + + $requestData = ['criteria' => $searchCriteriaBuilder->create()->__toArray()]; + + $serviceInfo = [ + 'rest' => [ + 'resourcePath' => self::RESOURCE_PATH . '?' . http_build_query($requestData), + 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET, + ], + 'soap' => [ + 'service' => self::SERVICE_NAME, + 'serviceVersion' => self::SERVICE_VERSION, + 'operation' => self::SERVICE_NAME . 'getList', + ], + ]; + + $response = $this->_webApiCall($serviceInfo, $requestData); + + $this->assertTrue(is_array($response)); + $this->assertArrayHasKey('items', $response); + $this->assertCount(1, $response['items']); + $this->assertTrue(is_array($response['items'][0])); + $this->assertOrderItem(current($order->getItems()), $response['items'][0]); + } + + /** + * @param \Magento\Sales\Model\Order\Item $orderItem + * @param array $response + * @return void + */ + protected function assertOrderItem(\Magento\Sales\Model\Order\Item $orderItem, array $response) + { + $expected = $orderItem->getBuyRequest()->getLinks(); + + $this->assertArrayHasKey('product_option', $response); + $this->assertArrayHasKey('extension_attributes', $response['product_option']); + $this->assertArrayHasKey('downloadable_option', $response['product_option']['extension_attributes']); + + $actualOptions = $response['product_option']['extension_attributes']['downloadable_option']; + + $this->assertArrayHasKey('downloadable_links', $actualOptions); + $this->assertEquals($expected, $actualOptions['downloadable_links']); + } +} diff --git a/dev/tests/api-functional/testsuite/Magento/Quote/Api/GuestPaymentMethodManagementTest.php b/dev/tests/api-functional/testsuite/Magento/Quote/Api/GuestPaymentMethodManagementTest.php index a1e2789c99142741e413079d6ecbf3be90550c7b..0a238c7f6659cffc84b19a28d0e3465bcdcfb58d 100644 --- a/dev/tests/api-functional/testsuite/Magento/Quote/Api/GuestPaymentMethodManagementTest.php +++ b/dev/tests/api-functional/testsuite/Magento/Quote/Api/GuestPaymentMethodManagementTest.php @@ -81,11 +81,7 @@ class GuestPaymentMethodManagementTest extends \Magento\TestFramework\TestCase\W "cartId" => $cartId, "method" => [ 'method' => 'checkmo', - 'po_number' => null, - 'cc_owner' => 'John', - 'cc_type' => null, - 'cc_exp_year' => null, - 'cc_exp_month' => null, + 'po_number' => null ], ]; @@ -118,11 +114,7 @@ class GuestPaymentMethodManagementTest extends \Magento\TestFramework\TestCase\W "cartId" => $cartId, "method" => [ 'method' => 'checkmo', - 'po_number' => '200', - 'cc_owner' => 'tester', - 'cc_type' => 'test', - 'cc_exp_year' => '2014', - 'cc_exp_month' => '1', + 'po_number' => '200' ], ]; $this->assertNotNull($this->_webApiCall($serviceInfo, $requestData)); @@ -154,11 +146,7 @@ class GuestPaymentMethodManagementTest extends \Magento\TestFramework\TestCase\W "cartId" => $cartId, "method" => [ 'method' => 'checkmo', - 'po_number' => '200', - 'cc_owner' => 'tester', - 'cc_type' => 'test', - 'cc_exp_year' => '2014', - 'cc_exp_month' => '1', + 'po_number' => '200' ], ]; @@ -193,11 +181,7 @@ class GuestPaymentMethodManagementTest extends \Magento\TestFramework\TestCase\W "cartId" => $cartId, "method" => [ 'method' => 'checkmo', - 'po_number' => '200', - 'cc_owner' => 'tester', - 'cc_type' => 'test', - 'cc_exp_year' => '2014', - 'cc_exp_month' => '1', + 'po_number' => '200' ], ]; $this->assertNotNull($this->_webApiCall($serviceInfo, $requestData)); @@ -275,7 +259,7 @@ class GuestPaymentMethodManagementTest extends \Magento\TestFramework\TestCase\W */ protected function getPaymentMethodFieldsForAssert() { - return ['method', 'po_number', 'cc_owner', 'cc_type', 'cc_exp_year', 'cc_exp_month', 'additional_data']; + return ['method', 'po_number', 'additional_data']; } /** diff --git a/dev/tests/api-functional/testsuite/Magento/Quote/Api/PaymentMethodManagementTest.php b/dev/tests/api-functional/testsuite/Magento/Quote/Api/PaymentMethodManagementTest.php index 8a6115ef70be0b80a8e42b1ee9df067fafdbb544..c9f3c85451dfc68aa01e4c267b0899e9fe6ea6cf 100644 --- a/dev/tests/api-functional/testsuite/Magento/Quote/Api/PaymentMethodManagementTest.php +++ b/dev/tests/api-functional/testsuite/Magento/Quote/Api/PaymentMethodManagementTest.php @@ -47,11 +47,7 @@ class PaymentMethodManagementTest extends \Magento\TestFramework\TestCase\Webapi "cartId" => $cartId, "method" => [ 'method' => 'checkmo', - 'po_number' => null, - 'cc_owner' => 'John', - 'cc_type' => null, - 'cc_exp_year' => null, - 'cc_exp_month' => null, + 'po_number' => null ], ]; @@ -84,11 +80,7 @@ class PaymentMethodManagementTest extends \Magento\TestFramework\TestCase\Webapi "cartId" => $cartId, "method" => [ 'method' => 'checkmo', - 'po_number' => '200', - 'cc_owner' => 'tester', - 'cc_type' => 'test', - 'cc_exp_year' => '2014', - 'cc_exp_month' => '1', + 'po_number' => '200' ], ]; $this->assertNotNull($this->_webApiCall($serviceInfo, $requestData)); @@ -120,11 +112,7 @@ class PaymentMethodManagementTest extends \Magento\TestFramework\TestCase\Webapi "cartId" => $cartId, "method" => [ 'method' => 'checkmo', - 'po_number' => '200', - 'cc_owner' => 'tester', - 'cc_type' => 'test', - 'cc_exp_year' => '2014', - 'cc_exp_month' => '1', + 'po_number' => '200' ], ]; @@ -159,11 +147,7 @@ class PaymentMethodManagementTest extends \Magento\TestFramework\TestCase\Webapi "cartId" => $cartId, "method" => [ 'method' => 'checkmo', - 'po_number' => '200', - 'cc_owner' => 'tester', - 'cc_type' => 'test', - 'cc_exp_year' => '2014', - 'cc_exp_month' => '1', + 'po_number' => '200' ], ]; $this->assertNotNull($this->_webApiCall($serviceInfo, $requestData)); @@ -317,11 +301,7 @@ class PaymentMethodManagementTest extends \Magento\TestFramework\TestCase\Webapi $requestData = [ "method" => [ 'method' => 'checkmo', - 'po_number' => '200', - 'cc_owner' => 'tester', - 'cc_type' => 'test', - 'cc_exp_year' => '2014', - 'cc_exp_month' => '1', + 'po_number' => '200' ], ]; @@ -333,7 +313,7 @@ class PaymentMethodManagementTest extends \Magento\TestFramework\TestCase\Webapi */ protected function getPaymentMethodFieldsForAssert() { - return ['method', 'po_number', 'cc_owner', 'cc_type', 'cc_exp_year', 'cc_exp_month', 'additional_data']; + return ['method', 'po_number', 'additional_data']; } /** diff --git a/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/OrderItemGetListTest.php b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/OrderItemGetListTest.php new file mode 100644 index 0000000000000000000000000000000000000000..1cd2b7a30656eea7334dbf9266281f9871bceeec --- /dev/null +++ b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/OrderItemGetListTest.php @@ -0,0 +1,88 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Sales\Service\V1; + +use Magento\TestFramework\TestCase\WebapiAbstract; + +class OrderItemGetListTest extends WebapiAbstract +{ + const RESOURCE_PATH = '/V1/orders/items'; + + const SERVICE_VERSION = 'V1'; + const SERVICE_NAME = 'salesOrderItemRepositoryV1'; + + const ORDER_INCREMENT_ID = '100000001'; + + /** + * @var \Magento\TestFramework\ObjectManager + */ + protected $objectManager; + + protected function setUp() + { + $this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); + } + + /** + * @magentoApiDataFixture Magento/Sales/_files/order.php + */ + public function testGetList() + { + /** @var \Magento\Sales\Model\Order $order */ + $order = $this->objectManager->create('Magento\Sales\Model\Order'); + $order->loadByIncrementId(self::ORDER_INCREMENT_ID); + + /** @var $searchCriteriaBuilder \Magento\Framework\Api\SearchCriteriaBuilder */ + $searchCriteriaBuilder = $this->objectManager->create('Magento\Framework\Api\SearchCriteriaBuilder'); + /** @var $filterBuilder \Magento\Framework\Api\FilterBuilder */ + $filterBuilder = $this->objectManager->create('Magento\Framework\Api\FilterBuilder'); + + $searchCriteriaBuilder->addFilters( + [ + $filterBuilder->setField('order_id') + ->setValue($order->getId()) + ->create(), + ] + ); + + $requestData = ['criteria' => $searchCriteriaBuilder->create()->__toArray()]; + + $serviceInfo = [ + 'rest' => [ + 'resourcePath' => self::RESOURCE_PATH . '?' . http_build_query($requestData), + 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET, + ], + 'soap' => [ + 'service' => self::SERVICE_NAME, + 'serviceVersion' => self::SERVICE_VERSION, + 'operation' => self::SERVICE_NAME . 'getList', + ], + ]; + + $response = $this->_webApiCall($serviceInfo, $requestData); + + $this->assertTrue(is_array($response)); + $this->assertArrayHasKey('items', $response); + $this->assertCount(1, $response['items']); + $this->assertTrue(is_array($response['items'][0])); + $this->assertOrderItem(current($order->getItems()), $response['items'][0]); + } + + /** + * @param \Magento\Sales\Model\Order\Item $orderItem + * @param array $response + * @return void + */ + protected function assertOrderItem(\Magento\Sales\Model\Order\Item $orderItem, array $response) + { + $this->assertEquals($orderItem->getId(), $response['item_id']); + $this->assertEquals($orderItem->getOrderId(), $response['order_id']); + $this->assertEquals($orderItem->getProductId(), $response['product_id']); + $this->assertEquals($orderItem->getProductType(), $response['product_type']); + $this->assertEquals($orderItem->getBasePrice(), $response['base_price']); + $this->assertEquals($orderItem->getRowTotal(), $response['row_total']); + } +} diff --git a/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/OrderItemGetTest.php b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/OrderItemGetTest.php new file mode 100644 index 0000000000000000000000000000000000000000..ca2803a520d4ac25d6bef680541e7de2528626af --- /dev/null +++ b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/OrderItemGetTest.php @@ -0,0 +1,72 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Sales\Service\V1; + +use Magento\TestFramework\TestCase\WebapiAbstract; + +class OrderItemGetTest extends WebapiAbstract +{ + const RESOURCE_PATH = '/V1/orders/items'; + + const SERVICE_VERSION = 'V1'; + const SERVICE_NAME = 'salesOrderItemRepositoryV1'; + + const ORDER_INCREMENT_ID = '100000001'; + + /** + * @var \Magento\TestFramework\ObjectManager + */ + protected $objectManager; + + protected function setUp() + { + $this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); + } + + /** + * @magentoApiDataFixture Magento/Sales/_files/order.php + */ + public function testGet() + { + /** @var \Magento\Sales\Model\Order $order */ + $order = $this->objectManager->create('Magento\Sales\Model\Order'); + $order->loadByIncrementId(self::ORDER_INCREMENT_ID); + /** @var \Magento\Sales\Model\Order\Item $orderItem */ + $orderItem = current($order->getItems()); + + $serviceInfo = [ + 'rest' => [ + 'resourcePath' => self::RESOURCE_PATH . '/' . $orderItem->getId(), + 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET, + ], + 'soap' => [ + 'service' => self::SERVICE_NAME, + 'serviceVersion' => self::SERVICE_VERSION, + 'operation' => self::SERVICE_NAME . 'get', + ], + ]; + + $response = $this->_webApiCall($serviceInfo, ['id' => $orderItem->getId()]); + + $this->assertTrue(is_array($response)); + $this->assertOrderItem($orderItem, $response); + } + + /** + * @param \Magento\Sales\Model\Order\Item $orderItem + * @param array $response + * @return void + */ + protected function assertOrderItem(\Magento\Sales\Model\Order\Item $orderItem, array $response) + { + $this->assertEquals($orderItem->getId(), $response['item_id']); + $this->assertEquals($orderItem->getOrderId(), $response['order_id']); + $this->assertEquals($orderItem->getProductId(), $response['product_id']); + $this->assertEquals($orderItem->getProductType(), $response['product_type']); + $this->assertEquals($orderItem->getBasePrice(), $response['base_price']); + $this->assertEquals($orderItem->getRowTotal(), $response['row_total']); + } +} diff --git a/dev/tests/functional/lib/Magento/Mtf/Client/Element/SimplifiedselectElement.php b/dev/tests/functional/lib/Magento/Mtf/Client/Element/SimplifiedselectElement.php index 3ac15fe0c963c248b424e44d407ed4a65560ede4..aa62e985e5306ba8d254be456eba9beb31b29292 100644 --- a/dev/tests/functional/lib/Magento/Mtf/Client/Element/SimplifiedselectElement.php +++ b/dev/tests/functional/lib/Magento/Mtf/Client/Element/SimplifiedselectElement.php @@ -18,7 +18,7 @@ class SimplifiedselectElement extends SelectElement * * @var string */ - protected $optionGroupValue = ".//*[@title='%s']"; + protected $optionGroupValue = ".//*[@data-title='%s']"; /** * Select value in ropdown which has option groups. diff --git a/dev/tests/functional/lib/Magento/Mtf/Util/Generate/Repository/RepositoryResource.php b/dev/tests/functional/lib/Magento/Mtf/Util/Generate/Repository/RepositoryResource.php index ee45b740731ce6fc090f4192bb8c5e521118dc23..db91d8a9984fcdb3c0af5919ec17b9bf9d97a69f 100644 --- a/dev/tests/functional/lib/Magento/Mtf/Util/Generate/Repository/RepositoryResource.php +++ b/dev/tests/functional/lib/Magento/Mtf/Util/Generate/Repository/RepositoryResource.php @@ -10,7 +10,7 @@ namespace Magento\Mtf\Util\Generate\Repository; * Class Resource * */ -class RepositoryResource extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class RepositoryResource extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Set fixture entity_type @@ -28,7 +28,7 @@ class RepositoryResource extends \Magento\Framework\Model\ModelResource\Db\Abstr * @param \Magento\Framework\Model\AbstractModel $object * @param mixed $value * @param null $field - * @return \Magento\Framework\Model\ModelResource\Db\AbstractDb|void + * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb|void * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function load(\Magento\Framework\Model\AbstractModel $object, $value, $field = null) diff --git a/dev/tests/functional/lib/Magento/Mtf/Util/Generate/Repository/TableCollection.php b/dev/tests/functional/lib/Magento/Mtf/Util/Generate/Repository/TableCollection.php index e22e7837b72fd3fbaaa59ed1f359b054be10c6ae..bdfbd8544da31fc43879042a539b7263f8de148b 100644 --- a/dev/tests/functional/lib/Magento/Mtf/Util/Generate/Repository/TableCollection.php +++ b/dev/tests/functional/lib/Magento/Mtf/Util/Generate/Repository/TableCollection.php @@ -6,7 +6,7 @@ namespace Magento\Mtf\Util\Generate\Repository; -use Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection; +use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection; /** * Class CollectionProvider @@ -26,7 +26,7 @@ class TableCollection extends AbstractCollection * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Framework\Event\ManagerInterface $eventManager * @param null $connection - * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource + * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource * @param array $fixture */ public function __construct( @@ -35,7 +35,7 @@ class TableCollection extends AbstractCollection \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Framework\Event\ManagerInterface $eventManager, \Magento\Framework\DB\Adapter\AdapterInterface $connection = null, - \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null, + \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null, array $fixture = [] ) { $this->setModel('Magento\Framework\DataObject'); diff --git a/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Cache.php b/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Cache.php index 988614620e01b51334c734ea0a2e594487d8611f..be0e3f829e2eb6eb668972e7143aa8e4e4dc35cb 100644 --- a/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Cache.php +++ b/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Cache.php @@ -59,7 +59,6 @@ class Cache extends Block public function flushCacheStorage() { $this->_rootElement->find($this->flushCacheStorageButton)->click(); - $this->browser->acceptAlert(); } /** diff --git a/dev/tests/functional/tests/app/Magento/Backend/Test/Block/FormPageActions.php b/dev/tests/functional/tests/app/Magento/Backend/Test/Block/FormPageActions.php index 246c3113a8d176f05a2b226aab70d056f2effe50..302139354092fc6fdc2cb429056cbadfc1b016b3 100644 --- a/dev/tests/functional/tests/app/Magento/Backend/Test/Block/FormPageActions.php +++ b/dev/tests/functional/tests/app/Magento/Backend/Test/Block/FormPageActions.php @@ -110,7 +110,6 @@ class FormPageActions extends PageActions public function delete() { $this->_rootElement->find($this->deleteButton)->click(); - $this->browser->acceptAlert(); } /** diff --git a/dev/tests/functional/tests/app/Magento/Backend/Test/Block/System/Config/PageActions.php b/dev/tests/functional/tests/app/Magento/Backend/Test/Block/System/Config/PageActions.php index 2dbbdd6fe04c8e4a7b57f1fc71316dd4e1c85023..281c4fbd7a08164f8801d52fce5576a2eb140baa 100644 --- a/dev/tests/functional/tests/app/Magento/Backend/Test/Block/System/Config/PageActions.php +++ b/dev/tests/functional/tests/app/Magento/Backend/Test/Block/System/Config/PageActions.php @@ -35,7 +35,6 @@ class PageActions extends AbstractPageActions { $this->_rootElement->find($this->scopeSelector, Locator::SELECTOR_CSS, 'liselectstore') ->setValue($websiteScope); - $this->browser->acceptAlert(); return $this; } diff --git a/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Widget/Grid.php b/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Widget/Grid.php index 8e1e7be0371373664c4deb588110301cd7f13182..65017b9c85d99fec33b811997c6aec9d17848d67 100644 --- a/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Widget/Grid.php +++ b/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Widget/Grid.php @@ -188,6 +188,13 @@ abstract class Grid extends Block */ protected $rowPattern = '//tbody/tr[%s]'; + /** + * Selector for confirm. + * + * @var string + */ + protected $confirmModal = '.confirm._show[data-role=modal]'; + /** * Get backend abstract block * @@ -340,7 +347,10 @@ abstract class Grid extends Block { $this->_rootElement->find($this->massactionSubmit, Locator::SELECTOR_CSS)->click(); if ($acceptAlert) { - $this->browser->acceptAlert(); + $element = $this->browser->find($this->confirmModal); + /** @var \Magento\Ui\Test\Block\Adminhtml\Modal $modal */ + $modal = $this->blockFactory->create('Magento\Ui\Test\Block\Adminhtml\Modal', ['element' => $element]); + $modal->acceptAlert(); } } diff --git a/dev/tests/functional/tests/app/Magento/Backend/Test/Constraint/AssertStoreCanBeLocalized.php b/dev/tests/functional/tests/app/Magento/Backend/Test/Constraint/AssertStoreCanBeLocalized.php index ffd5e52d7eaa2e47792d8b04636b80198dac9fd3..fd241121f62fc88eaa86debe9df1aa86242f53b0 100644 --- a/dev/tests/functional/tests/app/Magento/Backend/Test/Constraint/AssertStoreCanBeLocalized.php +++ b/dev/tests/functional/tests/app/Magento/Backend/Test/Constraint/AssertStoreCanBeLocalized.php @@ -38,6 +38,7 @@ class AssertStoreCanBeLocalized extends AbstractConstraint // Set locale options $systemConfig->open(); $systemConfig->getPageActions()->selectStore($store->getGroupId() . "/" . $store->getName()); + $systemConfig->getModalBlock()->acceptAlert(); $configGroup = $systemConfig->getForm()->getGroup('Locale Options'); $configGroup->open(); $configGroup->setValue('select-groups-locale-fields-code-value', $locale); diff --git a/dev/tests/functional/tests/app/Magento/Backend/Test/Page/Adminhtml/AdminCache.xml b/dev/tests/functional/tests/app/Magento/Backend/Test/Page/Adminhtml/AdminCache.xml index 6fac6b6f2b7c66f89dc61703351f183a87add3e2..3cdc372ff2c646d006e8627ae0cd100bdb1ffd8e 100644 --- a/dev/tests/functional/tests/app/Magento/Backend/Test/Page/Adminhtml/AdminCache.xml +++ b/dev/tests/functional/tests/app/Magento/Backend/Test/Page/Adminhtml/AdminCache.xml @@ -11,5 +11,6 @@ <block name="actionsBlock" class="Magento\Backend\Test\Block\Cache" locator="div.page-actions" strategy="css selector"/> <block name="additionalBlock" class="Magento\Backend\Test\Block\Cache\Additional" locator="div.additional-cache-management" strategy="css selector"/> <block name="gridBlock" class="Magento\Backend\Test\Block\Cache\Grid" locator="div#cache_grid" strategy="css selector"/> + <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/> </page> </config> diff --git a/dev/tests/functional/tests/app/Magento/Backend/Test/Page/Adminhtml/SystemConfig.xml b/dev/tests/functional/tests/app/Magento/Backend/Test/Page/Adminhtml/SystemConfig.xml index 9b9a0f3a3093c1bded062e441827c8a43733fc94..4dbb6babb500ec6cb10e25b05b5dae7550c3f878 100644 --- a/dev/tests/functional/tests/app/Magento/Backend/Test/Page/Adminhtml/SystemConfig.xml +++ b/dev/tests/functional/tests/app/Magento/Backend/Test/Page/Adminhtml/SystemConfig.xml @@ -6,9 +6,10 @@ */ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/pages.xsd"> - <page name="SystemConfig" area="Adminhtml" mca="admin/system_config" module="Magento_Backend"> - <block name="pageActions" class="Magento\Backend\Test\Block\System\Config\PageActions" locator=".page-main-actions" strategy="css selector"/> - <block name="form" class="Magento\Backend\Test\Block\System\Config\Form" locator="#config-edit-form" strategy="css selector"/> - <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/> - </page> + <page name="SystemConfig" area="Adminhtml" mca="admin/system_config" module="Magento_Backend"> + <block name="pageActions" class="Magento\Backend\Test\Block\System\Config\PageActions" locator=".page-main-actions" strategy="css selector"/> + <block name="form" class="Magento\Backend\Test\Block\System\Config\Form" locator="#config-edit-form" strategy="css selector"/> + <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/> + <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/> + </page> </config> diff --git a/dev/tests/functional/tests/app/Magento/Bundle/Test/Block/Adminhtml/Catalog/Product/Edit/Tab/Bundle/Option.php b/dev/tests/functional/tests/app/Magento/Bundle/Test/Block/Adminhtml/Catalog/Product/Edit/Tab/Bundle/Option.php index 20688802c899c457d0d6723e00d1a1ec0afe8898..7f973d398b8d5b4c17ffe89b1d3265a3568b5e99 100644 --- a/dev/tests/functional/tests/app/Magento/Bundle/Test/Block/Adminhtml/Catalog/Product/Edit/Tab/Bundle/Option.php +++ b/dev/tests/functional/tests/app/Magento/Bundle/Test/Block/Adminhtml/Catalog/Product/Edit/Tab/Bundle/Option.php @@ -22,7 +22,7 @@ class Option extends Form * * @var string */ - protected $searchGridBlock = "ancestor::body//div[contains(@style,'display: block') and @role='dialog']"; + protected $searchGridBlock = "ancestor::body//aside[contains(@class,'_show') and @data-role='modal']"; /** * Added product row diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Attribute/Set/Main.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Attribute/Set/Main.php index 47a2e261ba15fd602141d4e20f9cc5d73b7bf695..58128695cc34a41989502b51e65ff907a5906c9a 100644 --- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Attribute/Set/Main.php +++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Attribute/Set/Main.php @@ -50,6 +50,13 @@ class Main extends Block */ protected $noteBlock = '.attribute-set .title'; + /** + * Selector for prompt. + * + * @var string + */ + protected $promptModal = '.prompt._show[data-role=modal]'; + /** * Move Attribute to Attribute Group * @@ -123,7 +130,10 @@ class Main extends Block public function addAttributeSetGroup($groupName) { $this->_rootElement->find($this->addGroupButton)->click(); - $this->browser->setAlertText($groupName); - $this->browser->acceptAlert(); + $element = $this->browser->find($this->promptModal); + /** @var \Magento\Ui\Test\Block\Adminhtml\Modal $modal */ + $modal = $this->blockFactory->create('Magento\Ui\Test\Block\Adminhtml\Modal', ['element' => $element]); + $modal->setAlertText($groupName); + $modal->acceptAlert(); } } diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Composite/Configure.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Composite/Configure.php index 6416c7c9c7a0672d9b8e147516de5de8a6d79867..9af022411c24bca0123ea9a720a736cc1686322c 100644 --- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Composite/Configure.php +++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Composite/Configure.php @@ -44,7 +44,7 @@ class Configure extends AbstractConfigureBlock * * @var string */ - protected $okButton = '.ui-button.action-primary'; + protected $okButton = '.action-primary[data-role="action"]'; /** * Backend abstract block. diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Edit/Tab/Options.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Edit/Tab/Options.php index e1524101cee79623cf454e1fbc94205a7982dba4..0cd45384360867851e78f7781e45779910c28b03 100644 --- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Edit/Tab/Options.php +++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Edit/Tab/Options.php @@ -51,7 +51,7 @@ class Options extends Tab * * @var string */ - protected $importGrid = "//ancestor::body/div[*[@id='import-container'] and contains(@style,'display: block')]"; + protected $importGrid = "//ancestor::body//aside[*//div[@id='import-container']]"; /** * Fill custom options form on tab diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Grid.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Grid.php index c23f96bef04d15ffdd348ba251f11174f09db5a2..c13742e661e3f7454cfe69dfebbd9ad910963017 100755 --- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Grid.php +++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Grid.php @@ -27,37 +27,37 @@ class Grid extends DataGrid */ protected $filters = [ 'name' => [ - 'selector' => '[name="filters[name]"]', + 'selector' => '[name="name"]', ], 'sku' => [ - 'selector' => '[name="filters[sku]"]', + 'selector' => '[name="sku"]', ], 'type' => [ - 'selector' => '[name="filters[type_id]"]', + 'selector' => '[name="type_id"]', 'input' => 'select', ], 'price_from' => [ - 'selector' => '[name="filters[price][from]"]', + 'selector' => '[name="price[from]"]', ], 'price_to' => [ - 'selector' => '[name="filters[price][to]"]', + 'selector' => '[name="price[to]"]', ], 'qty_from' => [ - 'selector' => '[name="filters[qty][from]"]', + 'selector' => '[name="qty[from]"]', ], 'qty_to' => [ - 'selector' => '[name="filters[qty][to]"]', + 'selector' => '[name="qty[to]"]', ], 'visibility' => [ - 'selector' => '[name="filters[visibility]"]', + 'selector' => '[name="visibility"]', 'input' => 'select', ], 'status' => [ - 'selector' => '[name="filters[status]"]', + 'selector' => '[name="status"]', 'input' => 'select', ], 'set_name' => [ - 'selector' => '[name="filters[attribute_set_id]"]', + 'selector' => '[name="attribute_set_id"]', 'input' => 'select', ], ]; diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Product/Compare/Sidebar.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Product/Compare/Sidebar.php index ea1a27a09e26292c9a81f23f6cb9f7f07e4c407e..eec1be1fcf543149fbcc08a034fa02628c4065c2 100644 --- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Product/Compare/Sidebar.php +++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Product/Compare/Sidebar.php @@ -32,6 +32,13 @@ class Sidebar extends ListCompare */ protected $clearAll = '#compare-clear-all'; + /** + * Selector for alert. + * + * @var string + */ + protected $alertModal = '._show[data-role=modal]'; + /** * Get compare products block content. * @@ -79,6 +86,9 @@ class Sidebar extends ListCompare } ); $this->_rootElement->find($this->clearAll)->click(); - $this->browser->acceptAlert(); + $element = $this->browser->find($this->alertModal); + /** @var \Magento\Ui\Test\Block\Adminhtml\Modal $modal */ + $modal = $this->blockFactory->create('Magento\Ui\Test\Block\Adminhtml\Modal', ['element' => $element]); + $modal->acceptAlert(); } } diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Page/Adminhtml/CatalogCategoryEdit.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/Page/Adminhtml/CatalogCategoryEdit.xml index 6c94684f9931aa51bcd24d7ea2a59cd2a5201834..a9efc7486ed7a16fcf6b5b95ac675a8b728df48b 100644 --- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Page/Adminhtml/CatalogCategoryEdit.xml +++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Page/Adminhtml/CatalogCategoryEdit.xml @@ -6,9 +6,10 @@ */ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/pages.xsd"> - <page name="CatalogCategoryEdit" area="Adminhtml" mca="catalog/category/edit" module="Magento_Catalog"> - <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/> - <block name="formPageActions" class="Magento\Catalog\Test\Block\Adminhtml\Category\Edit\PageActions" locator=".page-main-actions" strategy="css selector"/> - <block name="editForm" class="Magento\Catalog\Test\Block\Adminhtml\Category\Edit\CategoryForm" locator="#category-edit-container" strategy="css selector"/> - </page> + <page name="CatalogCategoryEdit" area="Adminhtml" mca="catalog/category/edit" module="Magento_Catalog"> + <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/> + <block name="formPageActions" class="Magento\Catalog\Test\Block\Adminhtml\Category\Edit\PageActions" locator=".page-main-actions" strategy="css selector"/> + <block name="editForm" class="Magento\Catalog\Test\Block\Adminhtml\Category\Edit\CategoryForm" locator="#category-edit-container" strategy="css selector"/> + <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/> + </page> </config> diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Page/Adminhtml/CatalogProductAttributeNew.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/Page/Adminhtml/CatalogProductAttributeNew.xml index 7340141c593ee3fd494b638beab71df8e12075c4..b53ec68704e7093111573610aab4e467d8f84b8a 100644 --- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Page/Adminhtml/CatalogProductAttributeNew.xml +++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Page/Adminhtml/CatalogProductAttributeNew.xml @@ -6,9 +6,10 @@ */ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/pages.xsd"> - <page name="CatalogProductAttributeNew" area="Adminhtml" mca="catalog/product_attribute/new" module="Magento_Catalog"> - <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/> - <block name="pageActions" class="Magento\Backend\Test\Block\FormPageActions" locator=".page-main-actions" strategy="css selector"/> - <block name="attributeForm" class="Magento\Catalog\Test\Block\Adminhtml\Product\Attribute\Edit\AttributeForm" locator="[id='page:main-container']" strategy="css selector"/> - </page> + <page name="CatalogProductAttributeNew" area="Adminhtml" mca="catalog/product_attribute/new" module="Magento_Catalog"> + <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/> + <block name="pageActions" class="Magento\Backend\Test\Block\FormPageActions" locator=".page-main-actions" strategy="css selector"/> + <block name="attributeForm" class="Magento\Catalog\Test\Block\Adminhtml\Product\Attribute\Edit\AttributeForm" locator="[id='page:main-container']" strategy="css selector"/> + <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/> + </page> </config> diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Page/Adminhtml/CatalogProductSetEdit.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/Page/Adminhtml/CatalogProductSetEdit.xml index be45d688fbc5ab5315cea13690e3d2f717083054..318016cdd30355292c6ae10936b606b4fe3f7691 100644 --- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Page/Adminhtml/CatalogProductSetEdit.xml +++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Page/Adminhtml/CatalogProductSetEdit.xml @@ -6,9 +6,10 @@ */ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/pages.xsd"> - <page name="CatalogProductSetEdit" area="Adminhtml" mca="catalog/product_set/edit" module="Magento_Catalog"> - <block name="pageActions" class="Magento\Catalog\Test\Block\Adminhtml\Product\Attribute\Set\FormPageActions" locator=".page-main-actions" strategy="css selector"/> - <block name="attributeSetEditBlock" class="Magento\Catalog\Test\Block\Adminhtml\Product\Attribute\Set\Main" locator=".attribute-set" strategy="css selector"/> - <block name="attributeSetEditForm" class="Magento\Catalog\Test\Block\Adminhtml\Product\Attribute\Set\Main\EditForm" locator="#set_name" strategy="css selector"/> - </page> + <page name="CatalogProductSetEdit" area="Adminhtml" mca="catalog/product_set/edit" module="Magento_Catalog"> + <block name="pageActions" class="Magento\Catalog\Test\Block\Adminhtml\Product\Attribute\Set\FormPageActions" locator=".page-main-actions" strategy="css selector"/> + <block name="attributeSetEditBlock" class="Magento\Catalog\Test\Block\Adminhtml\Product\Attribute\Set\Main" locator=".attribute-set" strategy="css selector"/> + <block name="attributeSetEditForm" class="Magento\Catalog\Test\Block\Adminhtml\Product\Attribute\Set\Main\EditForm" locator="#set_name" strategy="css selector"/> + <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/> + </page> </config> diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Category/DeleteCategoryEntityTest.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Category/DeleteCategoryEntityTest.php index e6bafe0e25615211ce15857da2e2028cef3c4c33..ec77f237b21cfb95bd1a5202747d54aade59c27b 100644 --- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Category/DeleteCategoryEntityTest.php +++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Category/DeleteCategoryEntityTest.php @@ -74,5 +74,6 @@ class DeleteCategoryEntityTest extends Injectable $this->catalogCategoryIndex->open(); $this->catalogCategoryIndex->getTreeCategories()->selectCategory($category); $this->catalogCategoryEdit->getFormPageActions()->delete(); + $this->catalogCategoryEdit->getModalBlock()->acceptAlert(); } } diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteAssignedToTemplateProductAttributeTest.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteAssignedToTemplateProductAttributeTest.php index b1994e6b362d3c5c753d98ebdf771fa44220c3e8..a3c0028f6e70c13d348e9db060bbf528c24209d8 100644 --- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteAssignedToTemplateProductAttributeTest.php +++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteAssignedToTemplateProductAttributeTest.php @@ -78,6 +78,7 @@ class DeleteAssignedToTemplateProductAttributeTest extends Injectable $this->attributeIndex->open(); $this->attributeIndex->getGrid()->searchAndOpen($filter); $this->attributeNew->getPageActions()->delete(); + $this->attributeNew->getModalBlock()->acceptAlert(); return ['productTemplate' => $productTemplate, 'attribute' => $attribute]; } diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteAttributeSetTest.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteAttributeSetTest.php index 4eb5df71d91d4c48024acec44d3ff42623edb512..d996e70adb41097c9c62ff5f37f52c5cfb7d4760 100644 --- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteAttributeSetTest.php +++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteAttributeSetTest.php @@ -93,6 +93,7 @@ class DeleteAttributeSetTest extends Injectable $this->productSetIndex->open(); $this->productSetIndex->getGrid()->searchAndOpen($filter); $this->productSetEdit->getPageActions()->delete(); + $this->productSetEdit->getModalBlock()->acceptAlert(); return ['product' => $product]; } diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteProductAttributeEntityTest.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteProductAttributeEntityTest.php index b2803209bad71d700debd46f25397569d8f22cb5..0574f736acace9e35c1905d9ff349104efeeab17 100644 --- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteProductAttributeEntityTest.php +++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteProductAttributeEntityTest.php @@ -53,5 +53,6 @@ class DeleteProductAttributeEntityTest extends Injectable $attributeIndex->open(); $attributeIndex->getGrid()->searchAndOpen(['frontend_label' => $attribute->getFrontendLabel()]); $attributeNew->getPageActions()->delete(); + $attributeNew->getModalBlock()->acceptAlert(); } } diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteUsedInConfigurableProductAttributeTest.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteUsedInConfigurableProductAttributeTest.php index 4b5c4403e8c873ba7e04bf1c8ee6a4ad67232506..934b2e185add6a32e4b14dbd5aa91e0c11e45f34 100644 --- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteUsedInConfigurableProductAttributeTest.php +++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteUsedInConfigurableProductAttributeTest.php @@ -82,6 +82,7 @@ class DeleteUsedInConfigurableProductAttributeTest extends Injectable $this->attributeIndex->open(); $this->attributeIndex->getGrid()->searchAndOpen(['attribute_code' => $attribute->getAttributeCode()]); $this->attributeNew->getPageActions()->delete(); + $this->attributeNew->getModalBlock()->acceptAlert(); return ['attribute' => $attribute]; } diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestStep/DeleteAttributeStep.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestStep/DeleteAttributeStep.php index 8665338166eb949f6207668c975b9ee07af7967b..26db72b37ef72a51d534681cbfe241f2642c1b23 100644 --- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestStep/DeleteAttributeStep.php +++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestStep/DeleteAttributeStep.php @@ -67,6 +67,7 @@ class DeleteAttributeStep implements TestStepInterface if ($this->catalogProductAttributeIndex->getGrid()->isRowVisible($filter)) { $this->catalogProductAttributeIndex->getGrid()->searchAndOpen($filter); $this->catalogProductAttributeNew->getPageActions()->delete(); + $this->catalogProductAttributeNew->getModalBlock()->acceptAlert(); } } } diff --git a/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Page/Adminhtml/CatalogRuleNew.xml b/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Page/Adminhtml/CatalogRuleNew.xml index 5dd34d3be1a902e1ba907860806eb3362041fb12..af8118dc6be7fa44a66f48a0bf8c8d68cfd7d4d5 100644 --- a/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Page/Adminhtml/CatalogRuleNew.xml +++ b/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Page/Adminhtml/CatalogRuleNew.xml @@ -6,8 +6,9 @@ */ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/pages.xsd"> - <page name="CatalogRuleNew" area="Adminhtml" mca="catalog_rule/promo_catalog/new" module="Magento_CatalogRule"> - <block name="formPageActions" class="Magento\CatalogRule\Test\Block\Adminhtml\FormPageActions" locator=".page-main-actions" strategy="css selector"/> - <block name="editForm" class="Magento\CatalogRule\Test\Block\Adminhtml\Promo\Catalog\Edit\PromoForm" locator="[id='page:main-container']" strategy="css selector"/> - </page> + <page name="CatalogRuleNew" area="Adminhtml" mca="catalog_rule/promo_catalog/new" module="Magento_CatalogRule"> + <block name="formPageActions" class="Magento\CatalogRule\Test\Block\Adminhtml\FormPageActions" locator=".page-main-actions" strategy="css selector"/> + <block name="editForm" class="Magento\CatalogRule\Test\Block\Adminhtml\Promo\Catalog\Edit\PromoForm" locator="[id='page:main-container']" strategy="css selector"/> + <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/> + </page> </config> diff --git a/dev/tests/functional/tests/app/Magento/CatalogRule/Test/TestCase/DeleteCatalogPriceRuleEntityTest.php b/dev/tests/functional/tests/app/Magento/CatalogRule/Test/TestCase/DeleteCatalogPriceRuleEntityTest.php index 959edfcf46434fe1522a305970123c5c28509582..aaea841d414f4374b3a5d1b52612e829eae889eb 100644 --- a/dev/tests/functional/tests/app/Magento/CatalogRule/Test/TestCase/DeleteCatalogPriceRuleEntityTest.php +++ b/dev/tests/functional/tests/app/Magento/CatalogRule/Test/TestCase/DeleteCatalogPriceRuleEntityTest.php @@ -82,5 +82,6 @@ class DeleteCatalogPriceRuleEntityTest extends Injectable $this->catalogRuleIndex->open(); $this->catalogRuleIndex->getCatalogRuleGrid()->searchAndOpen($filter); $this->catalogRuleNew->getFormPageActions()->delete(); + $this->catalogRuleNew->getModalBlock()->acceptAlert(); } } diff --git a/dev/tests/functional/tests/app/Magento/CatalogRule/Test/TestStep/DeleteAllCatalogRulesStep.php b/dev/tests/functional/tests/app/Magento/CatalogRule/Test/TestStep/DeleteAllCatalogRulesStep.php index dcc06c224c0baafb2d9429ba256b7d922cbb6136..5a733e8224def1d91632c364e31a18c23769733f 100644 --- a/dev/tests/functional/tests/app/Magento/CatalogRule/Test/TestStep/DeleteAllCatalogRulesStep.php +++ b/dev/tests/functional/tests/app/Magento/CatalogRule/Test/TestStep/DeleteAllCatalogRulesStep.php @@ -55,6 +55,7 @@ class DeleteAllCatalogRulesStep implements TestStepInterface while ($this->catalogRuleIndex->getCatalogRuleGrid()->isFirstRowVisible()) { $this->catalogRuleIndex->getCatalogRuleGrid()->openFirstRow(); $this->catalogRuleNew->getFormPageActions()->delete(); + $this->catalogRuleNew->getModalBlock()->acceptAlert(); $this->catalogRuleIndex->getSystemMessageDialog()->closePopup(); } } diff --git a/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/Page/Adminhtml/CatalogSearchEdit.xml b/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/Page/Adminhtml/CatalogSearchEdit.xml index 87d6b0b791a79d52c91d0306a321760cfe2dc72a..0d20a2f4ac16b8f0fc89c7406e3fd7359e696563 100644 --- a/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/Page/Adminhtml/CatalogSearchEdit.xml +++ b/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/Page/Adminhtml/CatalogSearchEdit.xml @@ -6,8 +6,9 @@ */ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/pages.xsd"> - <page name="CatalogSearchEdit" area="Adminhtml" mca="search/term/edit" module="Magento_CatalogSearch"> - <block name="form" class="Magento\CatalogSearch\Test\Block\Adminhtml\Edit\SearchTermForm" locator="#edit_form" strategy="css selector"/> - <block name="formPageActions" class="Magento\Backend\Test\Block\FormPageActions" locator=".page-main-actions" strategy="css selector"/> - </page> + <page name="CatalogSearchEdit" area="Adminhtml" mca="search/term/edit" module="Magento_CatalogSearch"> + <block name="form" class="Magento\CatalogSearch\Test\Block\Adminhtml\Edit\SearchTermForm" locator="#edit_form" strategy="css selector"/> + <block name="formPageActions" class="Magento\Backend\Test\Block\FormPageActions" locator=".page-main-actions" strategy="css selector"/> + <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/> + </page> </config> diff --git a/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/TestCase/DeleteSearchTermEntityTest.php b/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/TestCase/DeleteSearchTermEntityTest.php index b8400504d031aeda63c0d132b266d69aa55e7c46..4c9cdecc2c323be8c36dfb6c06dbeb8d2a49a4c7 100644 --- a/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/TestCase/DeleteSearchTermEntityTest.php +++ b/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/TestCase/DeleteSearchTermEntityTest.php @@ -78,5 +78,6 @@ class DeleteSearchTermEntityTest extends Injectable $this->indexPage->open(); $this->indexPage->getGrid()->searchAndOpen(['search_query' => $searchText]); $this->editPage->getFormPageActions()->delete(); + $this->editPage->getModalBlock()->acceptAlert(); } } diff --git a/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart/Shipping.xml b/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart/Shipping.xml index b2b6b2290fb9a2ec4d3fe2762cc93c6c4ffb5f44..6056844a06473ef7cd7d8624841a8c8a7fb38cf7 100644 --- a/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart/Shipping.xml +++ b/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart/Shipping.xml @@ -6,7 +6,6 @@ */ --> <mapping strict="0"> - <wrapper>shippingAddress</wrapper> <fields> <country_id> <input>select</input> diff --git a/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart/Sidebar/Item.php b/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart/Sidebar/Item.php index 7d0966f153598dcdd97c018ecf89f3cf5b0ae4d1..43dbd23499a0d866f2fdf999c086716d20d79a4d 100644 --- a/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart/Sidebar/Item.php +++ b/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart/Sidebar/Item.php @@ -28,6 +28,13 @@ class Item extends Sidebar */ protected $editItem = '.action.edit'; + /** + * Selector for confirm. + * + * @var string + */ + protected $confirmModal = '.confirm._show[data-role=modal]'; + /** * Remove product item from mini cart * @@ -36,7 +43,10 @@ class Item extends Sidebar public function removeItemFromMiniCart() { $this->_rootElement->find($this->removeItem)->click(); - $this->browser->acceptAlert(); + $element = $this->browser->find($this->confirmModal); + /** @var \Magento\Ui\Test\Block\Adminhtml\Modal $modal */ + $modal = $this->blockFactory->create('Magento\Ui\Test\Block\Adminhtml\Modal', ['element' => $element]); + $modal->acceptAlert(); } /** diff --git a/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Onepage/Shipping.xml b/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Onepage/Shipping.xml index 1b99093b23eec0d7b598fd3fd902867fe2fa5f0a..a61ff0273b51dbf315739492e8a27e88b6f14389 100644 --- a/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Onepage/Shipping.xml +++ b/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Onepage/Shipping.xml @@ -6,7 +6,6 @@ */ --> <mapping strict="0"> - <wrapper>shippingAddress</wrapper> <fields> <email> <selector>#customer-email</selector> @@ -15,7 +14,7 @@ <lastname /> <company /> <street> - <selector>[name='shippingAddress[street][0]']</selector> + <selector>input[name="street[0]"]</selector> </street> <city /> <region_id> @@ -25,8 +24,6 @@ <input>select</input> </country_id> <telephone /> - <postcode> - <selector>[name='shippingAddress[postcode]']</selector> - </postcode> + <postcode /> </fields> </mapping> diff --git a/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/Page/Adminhtml/CheckoutAgreementNew.xml b/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/Page/Adminhtml/CheckoutAgreementNew.xml index 401dac62e9c0a18d8e7845519006a65da12caa7d..05356444ea635cd7b1cf78c0d862acc356b68eb8 100644 --- a/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/Page/Adminhtml/CheckoutAgreementNew.xml +++ b/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/Page/Adminhtml/CheckoutAgreementNew.xml @@ -9,5 +9,6 @@ <page name="CheckoutAgreementNew" area="Adminhtml" mca="checkout/agreement/new" module="Magento_CheckoutAgreements"> <block name="pageActionsBlock" class="Magento\Backend\Test\Block\FormPageActions" locator=".page-main-actions" strategy="css selector"/> <block name="agreementsForm" class="Magento\CheckoutAgreements\Test\Block\Adminhtml\Block\Agreement\Edit\AgreementsForm" locator="#edit_form" strategy="css selector"/> + <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/> </page> </config> \ No newline at end of file diff --git a/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/TestStep/DeleteAllTermsEntityStep.php b/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/TestStep/DeleteAllTermsEntityStep.php index 3599882b174c192c6f0638b491a86937e7e39c8c..b40f50f32d2ba5b85354b5c7f88859b3d322fc8c 100644 --- a/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/TestStep/DeleteAllTermsEntityStep.php +++ b/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/TestStep/DeleteAllTermsEntityStep.php @@ -56,6 +56,7 @@ class DeleteAllTermsEntityStep implements TestStepInterface while ($this->agreementIndex->getAgreementGridBlock()->isFirstRowVisible()) { $this->agreementIndex->getAgreementGridBlock()->openFirstRow(); $this->agreementNew->getPageActionsBlock()->delete(); + $this->agreementNew->getModalBlock()->acceptAlert(); } } } diff --git a/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/TestStep/DeleteTermEntityStep.php b/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/TestStep/DeleteTermEntityStep.php index d5b572db6ea2f8cd935667a2443ce334e99afe3e..34c352f39ea40b8735ac2e7e48b61fd8cc6240aa 100644 --- a/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/TestStep/DeleteTermEntityStep.php +++ b/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/TestStep/DeleteTermEntityStep.php @@ -63,5 +63,6 @@ class DeleteTermEntityStep implements TestStepInterface { $this->agreementIndex->open()->getAgreementGridBlock()->searchAndOpen(['name' => $this->agreement->getName()]); $this->agreementNew->getPageActionsBlock()->delete(); + $this->agreementNew->getModalBlock()->acceptAlert(); } } diff --git a/dev/tests/functional/tests/app/Magento/Cms/Test/Block/Adminhtml/Block/CmsGrid.php b/dev/tests/functional/tests/app/Magento/Cms/Test/Block/Adminhtml/Block/CmsGrid.php index 4ca3fe0ead7b62c175f7452f3f52f921aeff78ca..1f4c5cfbd659be67e2849194278241068c38c47a 100644 --- a/dev/tests/functional/tests/app/Magento/Cms/Test/Block/Adminhtml/Block/CmsGrid.php +++ b/dev/tests/functional/tests/app/Magento/Cms/Test/Block/Adminhtml/Block/CmsGrid.php @@ -28,36 +28,36 @@ class CmsGrid extends DataGrid */ protected $filters = [ 'block_id_from' => [ - 'selector' => '[name="filters[block_id][from]"]', + 'selector' => '[name="block_id[from]"]', ], 'block_id_to' => [ - 'selector' => '[name="filters[block_id][to]"]', + 'selector' => '[name="block_id[to]"]', ], 'title' => [ - 'selector' => '[name="filters[title]"]', + 'selector' => '[name="title"]', ], 'identifier' => [ - 'selector' => '[name="filters[identifier]"]', + 'selector' => '[name="identifier"]', ], 'store_id' => [ - 'selector' => '[name="filters[store_id]"]', + 'selector' => '[name="store_id"]', 'input' => 'simplifiedselect' ], 'is_active' => [ - 'selector' => '[name="filters[is_active]"]', + 'selector' => '[name="is_active"]', 'input' => 'select', ], 'creation_time_from' => [ - 'selector' => '[name="filters[creation_time][from]"]', + 'selector' => '[name="creation_time[from]"]', ], 'creation_time_to' => [ - 'selector' => '[name="filters[creation_time][to]"]', + 'selector' => '[name="creation_time[to]"]', ], 'update_time_from' => [ - 'selector' => '[name="filters[update_time][from]"]', + 'selector' => '[name="update_time[from]"]', ], 'update_time_to' => [ - 'selector' => '[name="filters[update_time][to]"]', + 'selector' => '[name="update_time[to]"]', ], ]; diff --git a/dev/tests/functional/tests/app/Magento/Cms/Test/Block/Adminhtml/Page/Grid.php b/dev/tests/functional/tests/app/Magento/Cms/Test/Block/Adminhtml/Page/Grid.php index 76415b59ed47ad9df9646ca6b42920c6abcf7945..8562232305382db9d419dfaa7d2baa59e6794509 100644 --- a/dev/tests/functional/tests/app/Magento/Cms/Test/Block/Adminhtml/Page/Grid.php +++ b/dev/tests/functional/tests/app/Magento/Cms/Test/Block/Adminhtml/Page/Grid.php @@ -29,43 +29,43 @@ class Grid extends DataGrid */ protected $filters = [ 'page_id_from' => [ - 'selector' => '[name="filters[page_id][from]"]', + 'selector' => '[name="page_id[from]"]', ], 'page_id_to' => [ - 'selector' => '[name="filters[page_id][to]"]', + 'selector' => '[name="page_id[to]"]', ], 'title' => [ - 'selector' => '[name="filters[title]"]', + 'selector' => '[name="title"]', ], 'identifier' => [ - 'selector' => '[name="filters[identifier]"]', + 'selector' => '[name="identifier"]', ], 'page_layout' => [ - 'selector' => '[name="filters[page_layout]"]', + 'selector' => '[name="page_layout"]', 'input' => 'select', ], 'store_id' => [ - 'selector' => '[name="filters[store_id]"]', + 'selector' => '[name="store_id"]', 'input' => 'selectstore' ], 'is_active' => [ - 'selector' => '[name="filters[is_active]"]', + 'selector' => '[name="is_active"]', 'input' => 'select', ], 'creation_time_from' => [ - 'selector' => '[name="filters[creation_time][from]"]', + 'selector' => '[name="creation_time[from]"]', ], 'creation_time_to' => [ - 'selector' => '[name="filters[creation_time][to]"]', + 'selector' => '[name="creation_time[to]"]', ], 'update_time_from' => [ - 'selector' => '[name="filters[update_time][from]"]', + 'selector' => '[name="update_time[from]"]', ], 'update_time_to' => [ - 'selector' => '[name="filters[update_time][to]"]', + 'selector' => '[name="update_time[to]"]', ], 'under_version_control' => [ - 'selector' => '[name="filters[under_version_control]"]', + 'selector' => '[name="under_version_control"]', ], ]; diff --git a/dev/tests/functional/tests/app/Magento/Cms/Test/Page/Adminhtml/CmsBlockNew.xml b/dev/tests/functional/tests/app/Magento/Cms/Test/Page/Adminhtml/CmsBlockNew.xml index d37d3e1420419a36bb1c134e900889c80c5ba50b..a9089eeddc76073466aa542f0d8687a1d1eeb68e 100644 --- a/dev/tests/functional/tests/app/Magento/Cms/Test/Page/Adminhtml/CmsBlockNew.xml +++ b/dev/tests/functional/tests/app/Magento/Cms/Test/Page/Adminhtml/CmsBlockNew.xml @@ -10,5 +10,6 @@ <block name="formPageActions" class="Magento\Backend\Test\Block\FormPageActions" locator=".page-main-actions" strategy="css selector" /> <block name="cmsForm" class="Magento\Cms\Test\Block\Adminhtml\Block\Edit\CmsForm" locator="[id='page:main-container']" strategy="css selector" /> <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector" /> + <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/> </page> </config> diff --git a/dev/tests/functional/tests/app/Magento/Cms/Test/Page/Adminhtml/CmsPageNew.xml b/dev/tests/functional/tests/app/Magento/Cms/Test/Page/Adminhtml/CmsPageNew.xml index 252dc039121b9ae55c6b30b063170fee9114c9a6..fc93801cdc7ef5a32179fc2f643388022f320e72 100644 --- a/dev/tests/functional/tests/app/Magento/Cms/Test/Page/Adminhtml/CmsPageNew.xml +++ b/dev/tests/functional/tests/app/Magento/Cms/Test/Page/Adminhtml/CmsPageNew.xml @@ -9,5 +9,6 @@ <page name="CmsPageNew" area="Adminhtml" mca="cms/page/new" module="Magento_Cms"> <block name="pageForm" class="Magento\Cms\Test\Block\Adminhtml\Page\Edit\PageForm" locator="[id='page:main-container']" strategy="css selector" /> <block name="pageMainActions" class="Magento\Backend\Test\Block\FormPageActions" locator=".page-main-actions" strategy="css selector" /> + <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/> </page> </config> diff --git a/dev/tests/functional/tests/app/Magento/Cms/Test/TestCase/DeleteCmsBlockEntityTest.php b/dev/tests/functional/tests/app/Magento/Cms/Test/TestCase/DeleteCmsBlockEntityTest.php index 07f8d2dea4488bc90f697262bbaadf250022dde9..31f36c5eb25d627416f072aeb42a2bbe97306e31 100644 --- a/dev/tests/functional/tests/app/Magento/Cms/Test/TestCase/DeleteCmsBlockEntityTest.php +++ b/dev/tests/functional/tests/app/Magento/Cms/Test/TestCase/DeleteCmsBlockEntityTest.php @@ -77,5 +77,6 @@ class DeleteCmsBlockEntityTest extends Injectable $this->cmsBlockIndex->open(); $this->cmsBlockIndex->getCmsBlockGrid()->searchAndOpen($filter, true, false); $this->cmsBlockNew->getFormPageActions()->delete(); + $this->cmsBlockNew->getModalBlock()->acceptAlert(); } } diff --git a/dev/tests/functional/tests/app/Magento/Cms/Test/TestCase/DeleteCmsPageEntityTest.php b/dev/tests/functional/tests/app/Magento/Cms/Test/TestCase/DeleteCmsPageEntityTest.php index 5801ba85ea504bfeab0d880713bb50a51780d201..17d47b6681c4c87f62b492f32f327411e1089ff9 100644 --- a/dev/tests/functional/tests/app/Magento/Cms/Test/TestCase/DeleteCmsPageEntityTest.php +++ b/dev/tests/functional/tests/app/Magento/Cms/Test/TestCase/DeleteCmsPageEntityTest.php @@ -74,5 +74,6 @@ class DeleteCmsPageEntityTest extends Injectable $this->cmsPageIndex->open(); $this->cmsPageIndex->getCmsPageGridBlock()->searchAndOpen(['title' => $cmsPage->getTitle()]); $this->cmsPageNew->getPageMainActions()->delete(); + $this->cmsPageNew->getModalBlock()->acceptAlert(); } } diff --git a/dev/tests/functional/tests/app/Magento/Cms/Test/TestCase/DeleteCmsPageUrlRewriteEntityTest.php b/dev/tests/functional/tests/app/Magento/Cms/Test/TestCase/DeleteCmsPageUrlRewriteEntityTest.php index 7d5364c7c6fe48279ef35c797ddce98eefa828c2..7ef7db00e0aa723a15fd04cd347ced2fb6bc48f3 100644 --- a/dev/tests/functional/tests/app/Magento/Cms/Test/TestCase/DeleteCmsPageUrlRewriteEntityTest.php +++ b/dev/tests/functional/tests/app/Magento/Cms/Test/TestCase/DeleteCmsPageUrlRewriteEntityTest.php @@ -77,5 +77,6 @@ class DeleteCmsPageUrlRewriteEntityTest extends Injectable $this->urlRewriteIndex->open(); $this->urlRewriteIndex->getUrlRedirectGrid()->searchAndOpen(['request_path' => $urlRewrite->getRequestPath()]); $this->urlRewriteEdit->getPageMainActions()->delete(); + $this->urlRewriteEdit->getModalBlock()->acceptAlert(); } } diff --git a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Adminhtml/Product/AttributesGrid.php b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Adminhtml/Product/AttributesGrid.php index 523ff4c9c377d560c074d62834fc98d9642a24ff..78e58b4926c514bf1f388d0c0ddc8f8d0a53bdea 100644 --- a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Adminhtml/Product/AttributesGrid.php +++ b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Adminhtml/Product/AttributesGrid.php @@ -20,7 +20,7 @@ class AttributesGrid extends DataGrid */ protected $filters = [ 'frontend_label' => [ - 'selector' => '[name="filters[frontend_label]"]', + 'selector' => '[name="frontend_label"]', ], ]; } diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/Block/Account/AddressesAdditional.php b/dev/tests/functional/tests/app/Magento/Customer/Test/Block/Account/AddressesAdditional.php index 89292194978865d58920ac9c5cadcc8b47c1b69f..9e316ceabeab7a7c3b2f500465ece437d0032136 100644 --- a/dev/tests/functional/tests/app/Magento/Customer/Test/Block/Account/AddressesAdditional.php +++ b/dev/tests/functional/tests/app/Magento/Customer/Test/Block/Account/AddressesAdditional.php @@ -36,6 +36,13 @@ class AddressesAdditional extends Block */ protected $additionalAddressContent = '.block-content'; + /** + * Selector for confirm. + * + * @var string + */ + protected $confirmModal = '.confirm._show[data-role=modal]'; + /** * Delete Additional Address * @@ -46,7 +53,10 @@ class AddressesAdditional extends Block { $this->_rootElement->find(sprintf($this->addressSelector, $address->getStreet()), Locator::SELECTOR_XPATH) ->find($this->deleteAddressLink)->click(); - $this->browser->acceptAlert(); + $element = $this->browser->find($this->confirmModal); + /** @var \Magento\Ui\Test\Block\Adminhtml\Modal $modal */ + $modal = $this->blockFactory->create('Magento\Ui\Test\Block\Adminhtml\Modal', ['element' => $element]); + $modal->acceptAlert(); } /** diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/Block/Adminhtml/Edit/CustomerForm.xml b/dev/tests/functional/tests/app/Magento/Customer/Test/Block/Adminhtml/Edit/CustomerForm.xml index bc70891ffa44c1c7dc73bdc6469b37fcd113c886..c4778125723fb2d2312f151e23a32ad03248d2c1 100644 --- a/dev/tests/functional/tests/app/Magento/Customer/Test/Block/Adminhtml/Edit/CustomerForm.xml +++ b/dev/tests/functional/tests/app/Magento/Customer/Test/Block/Adminhtml/Edit/CustomerForm.xml @@ -10,7 +10,7 @@ <class>\Magento\Backend\Test\Block\Widget\Tab</class> <selector>#tab_customer</selector> <strategy>css selector</strategy> - <wrapper>data[customer]</wrapper> + <wrapper>customer</wrapper> <fields> <website_id> <input>select</input> diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/Page/Adminhtml/CustomerGroupNew.xml b/dev/tests/functional/tests/app/Magento/Customer/Test/Page/Adminhtml/CustomerGroupNew.xml index 69db394b4cd959a1ed6c295872385ba49c86b0cf..72d8c4bf8231191d34e9337edc1bc90379eac86e 100644 --- a/dev/tests/functional/tests/app/Magento/Customer/Test/Page/Adminhtml/CustomerGroupNew.xml +++ b/dev/tests/functional/tests/app/Magento/Customer/Test/Page/Adminhtml/CustomerGroupNew.xml @@ -6,9 +6,10 @@ */ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/pages.xsd"> - <page name="CustomerGroupNew" area="Adminhtml" mca="customer/group/new" module="Magento_Customer"> - <block name="pageMainActions" class="Magento\Backend\Test\Block\FormPageActions" locator=".page-main-actions" strategy="css selector"/> - <block name="pageMainForm" class="Magento\Customer\Test\Block\Adminhtml\Group\Edit\Form" locator="[id='page:main-container']" strategy="css selector"/> - <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/> - </page> + <page name="CustomerGroupNew" area="Adminhtml" mca="customer/group/new" module="Magento_Customer"> + <block name="pageMainActions" class="Magento\Backend\Test\Block\FormPageActions" locator=".page-main-actions" strategy="css selector"/> + <block name="pageMainForm" class="Magento\Customer\Test\Block\Adminhtml\Group\Edit\Form" locator="[id='page:main-container']" strategy="css selector"/> + <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/> + <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/> + </page> </config> diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/Page/Adminhtml/CustomerIndexEdit.xml b/dev/tests/functional/tests/app/Magento/Customer/Test/Page/Adminhtml/CustomerIndexEdit.xml index 80bd928de60acd6954d2f443840b73a548cd2c49..7dfacbc495c1259f286bfca6677d7339e280503a 100644 --- a/dev/tests/functional/tests/app/Magento/Customer/Test/Page/Adminhtml/CustomerIndexEdit.xml +++ b/dev/tests/functional/tests/app/Magento/Customer/Test/Page/Adminhtml/CustomerIndexEdit.xml @@ -6,11 +6,12 @@ */ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/pages.xsd"> - <page name="CustomerIndexEdit" area="Adminhtml" mca="customer/index/edit" module="Magento_Customer"> - <block name="titleBlock" class="Magento\Theme\Test\Block\Html\Title" locator=".page-title-wrapper .page-title" strategy="css selector"/> - <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/> - <block name="pageActionsBlock" class="Magento\Customer\Test\Block\Adminhtml\Edit\FormPageActions" locator=".page-main-actions" strategy="css selector"/> - <block name="customerForm" class="Magento\Customer\Test\Block\Adminhtml\Edit\CustomerForm" locator="[id='page:main-container']" strategy="css selector"/> - <block name="configureProductBlock" class="Magento\Catalog\Test\Block\Adminhtml\Product\Composite\Configure" locator="//*[@role='dialog' and ./*[@id='product_composite_configure'] and contains(@style,'display: block')]" strategy="xpath"/> - </page> + <page name="CustomerIndexEdit" area="Adminhtml" mca="customer/index/edit" module="Magento_Customer"> + <block name="titleBlock" class="Magento\Theme\Test\Block\Html\Title" locator=".page-title-wrapper .page-title" strategy="css selector"/> + <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/> + <block name="pageActionsBlock" class="Magento\Customer\Test\Block\Adminhtml\Edit\FormPageActions" locator=".page-main-actions" strategy="css selector"/> + <block name="customerForm" class="Magento\Customer\Test\Block\Adminhtml\Edit\CustomerForm" locator="[id='page:main-container']" strategy="css selector"/> + <block name="configureProductBlock" class="Magento\Catalog\Test\Block\Adminhtml\Product\Composite\Configure" locator="//*[@role='dialog' and ./*[@id='product_composite_configure'] and contains(@style,'display: block')]" strategy="xpath"/> + <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/> + </page> </config> diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/DeleteCustomerBackendEntityTest.php b/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/DeleteCustomerBackendEntityTest.php index adb0c3fc6db5b4bdf5459ba0982afc63b350cc59..55193f4834afad1c48e987b460f3e834dd4f8836 100644 --- a/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/DeleteCustomerBackendEntityTest.php +++ b/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/DeleteCustomerBackendEntityTest.php @@ -74,5 +74,6 @@ class DeleteCustomerBackendEntityTest extends Injectable $this->customerIndexPage->open(); $this->customerIndexPage->getCustomerGridBlock()->searchAndOpen($filter); $this->customerIndexEditPage->getPageActionsBlock()->delete(); + $this->customerIndexEditPage->getModalBlock()->acceptAlert(); } } diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/DeleteCustomerGroupEntityTest.php b/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/DeleteCustomerGroupEntityTest.php index 7b3cfefbf139cc9d1c62c61f1cc96872a5da1a39..067e17a8d0e5945f342579371a6325436e014b60 100644 --- a/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/DeleteCustomerGroupEntityTest.php +++ b/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/DeleteCustomerGroupEntityTest.php @@ -80,5 +80,6 @@ class DeleteCustomerGroupEntityTest extends Injectable $this->customerGroupIndex->open(); $this->customerGroupIndex->getCustomerGroupGrid()->searchAndOpen($filter); $this->customerGroupNew->getPageMainActions()->delete(); + $this->customerGroupNew->getModalBlock()->acceptAlert(); } } diff --git a/dev/tests/functional/tests/app/Magento/Integration/Test/Block/Adminhtml/Integration/IntegrationGrid.php b/dev/tests/functional/tests/app/Magento/Integration/Test/Block/Adminhtml/Integration/IntegrationGrid.php index fa5f9a0e4a2f82c9ebc6216d254390dbadde8964..73c66f0af0aa7d3ab65c1f10d8d6505267960090 100644 --- a/dev/tests/functional/tests/app/Magento/Integration/Test/Block/Adminhtml/Integration/IntegrationGrid.php +++ b/dev/tests/functional/tests/app/Magento/Integration/Test/Block/Adminhtml/Integration/IntegrationGrid.php @@ -74,6 +74,13 @@ class IntegrationGrid extends Grid */ protected $tokensPopupSelector = './/ancestor::body/div[descendant::fieldset[contains(@id,"integration_token")]]'; + /** + * Selector for confirm. + * + * @var string + */ + protected $confirmModal = '.confirm._show[data-role=modal]'; + /** * Search and delete current item * @@ -84,13 +91,10 @@ class IntegrationGrid extends Grid { $this->search($item); $this->_rootElement->find($this->deleteLink)->click(); - - /** @var \Magento\Integration\Test\Block\Adminhtml\Integration\IntegrationGrid\DeleteDialog $deleteDialog */ - $deleteDialog = $this->blockFactory->create( - 'Magento\Integration\Test\Block\Adminhtml\Integration\IntegrationGrid\DeleteDialog', - ['element' => $this->_rootElement->find($this->deleteBlockSelector, Locator::SELECTOR_XPATH)] - ); - $deleteDialog->acceptDeletion(); + $element = $this->browser->find($this->confirmModal); + /** @var \Magento\Ui\Test\Block\Adminhtml\Modal $modal */ + $modal = $this->blockFactory->create('Magento\Ui\Test\Block\Adminhtml\Modal', ['element' => $element]); + $modal->acceptAlert(); } /** diff --git a/dev/tests/functional/tests/app/Magento/ProductVideo/Test/Block/Adminhtml/Product/Edit/Tab/ImagesAndVideos.php b/dev/tests/functional/tests/app/Magento/ProductVideo/Test/Block/Adminhtml/Product/Edit/Tab/ImagesAndVideos.php index efbf9ac19ef2cadf83593911322353f99b0a5a3d..c490b2dbaf13b2cfaba9787a46afa4fc6fc22f7a 100755 --- a/dev/tests/functional/tests/app/Magento/ProductVideo/Test/Block/Adminhtml/Product/Edit/Tab/ImagesAndVideos.php +++ b/dev/tests/functional/tests/app/Magento/ProductVideo/Test/Block/Adminhtml/Product/Edit/Tab/ImagesAndVideos.php @@ -20,7 +20,7 @@ class ImagesAndVideos extends Tab * * @var string */ - protected $addVideoButton = '#product_info_tabs_images-and-videos_content #add_video_button'; + protected $addVideoButton = '#product_info_tabs_image-management_content #add_video_button'; /** * Video dialog CSS locator. diff --git a/dev/tests/functional/tests/app/Magento/ProductVideo/Test/Block/Adminhtml/Product/ProductForm.xml b/dev/tests/functional/tests/app/Magento/ProductVideo/Test/Block/Adminhtml/Product/ProductForm.xml index 94e28feef713c0c1e8a6746f2f6749d02fd73e8b..5a3c8fbe3fd8a2ad7b6aa3e97d29357ef2a9a0a5 100755 --- a/dev/tests/functional/tests/app/Magento/ProductVideo/Test/Block/Adminhtml/Product/ProductForm.xml +++ b/dev/tests/functional/tests/app/Magento/ProductVideo/Test/Block/Adminhtml/Product/ProductForm.xml @@ -8,7 +8,7 @@ <tabs> <images-and-videos> <class>\Magento\ProductVideo\Test\Block\Adminhtml\Product\Edit\Tab\ImagesAndVideos</class> - <selector>#product_info_tabs_images-and-videos</selector> + <selector>#product_info_tabs_image-management</selector> <strategy>css selector</strategy> <fields> <position /> diff --git a/dev/tests/functional/tests/app/Magento/ProductVideo/Test/Repository/ConfigData.xml b/dev/tests/functional/tests/app/Magento/ProductVideo/Test/Repository/ConfigData.xml new file mode 100755 index 0000000000000000000000000000000000000000..5227236ce505b0b23ac486f1b3cffcf509cbe6e4 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/ProductVideo/Test/Repository/ConfigData.xml @@ -0,0 +1,27 @@ +<?xml version="1.0"?> +<!-- +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +--> +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/Magento/Mtf/Repository/etc/repository.xsd"> + <repository class="Magento\Config\Test\Repository\ConfigData"> + <dataset name="youtube_api_key"> + <field name="catalog/product_video/youtube_api_key" xsi:type="array"> + <item name="scope" xsi:type="string">default</item> + <item name="scope_id" xsi:type="number">0</item> + <item name="label" xsi:type="string"/> + <item name="value" xsi:type="string">AIzaSyDwqDWuw1lra-LnpJL2Mr02DYuFmkuRSns</item> + </field> + </dataset> + <dataset name="youtube_api_key_rollback"> + <field name="catalog/product_video/youtube_api_key" xsi:type="array"> + <item name="scope" xsi:type="string">default</item> + <item name="scope_id" xsi:type="number">0</item> + <item name="label" xsi:type="string"/> + <item name="value" xsi:type="string"/> + </field> + </dataset> + </repository> +</config> diff --git a/dev/tests/functional/tests/app/Magento/ProductVideo/Test/TestCase/UpdateSimpleProductEntityTest.xml b/dev/tests/functional/tests/app/Magento/ProductVideo/Test/TestCase/UpdateSimpleProductEntityTest.xml index 6a151535f05f02ed372dbe0fec9671a6235b4840..74f73a10f81e37277a67c839ac9318704cda1712 100755 --- a/dev/tests/functional/tests/app/Magento/ProductVideo/Test/TestCase/UpdateSimpleProductEntityTest.xml +++ b/dev/tests/functional/tests/app/Magento/ProductVideo/Test/TestCase/UpdateSimpleProductEntityTest.xml @@ -34,6 +34,7 @@ <data name="product/data/media_gallery/images/0/video_url" xsi:type="string">https://youtu.be/WMp2PvU2qi8</data> <data name="product/data/media_gallery/images/0/video_title" xsi:type="string">Foo Test 1</data> <data name="product/data/media_gallery/images/0/video_description" xsi:type="string">This is a test "Foo Test 1"</data> + <data name="configData" xsi:type="string">youtube_api_key</data> <constraint name="Magento\ProductVideo\Test\Constraint\AssertVideoCategoryView" /> <constraint name="Magento\ProductVideo\Test\Constraint\AssertVideoProductView" /> <constraint name="Magento\Catalog\Test\Constraint\AssertProductForm" /> @@ -50,18 +51,19 @@ <constraint name="Magento\Catalog\Test\Constraint\AssertProductForm" /> </variation> <variation name="AddVideoToPCFTestVariation3"> - <data name="initialProduct/dataset" xsi:type="string">product_with_category</data> - <data name="product/data/sku" xsi:type="string">simple_product_with_category_%isolation%</data> + <data name="initialProduct/dataset" xsi:type="string">product_with_category</data> + <data name="product/data/sku" xsi:type="string">simple_product_with_category_%isolation%</data> <data name="product/data/sku" xsi:type="string">sku_simple_product_with_video_%isolation%</data> <data name="product/data/media_gallery/images/0/video_url" xsi:type="string">https://youtu.be/WMp2PvU2qi8</data> <data name="product/data/media_gallery/images/0/video_title" xsi:type="string">Foo Test 1</data> + <data name="configData" xsi:type="string">youtube_api_key</data> <constraint name="Magento\ProductVideo\Test\Constraint\AssertVideoCategoryView" /> <constraint name="Magento\ProductVideo\Test\Constraint\AssertVideoProductView" /> <constraint name="Magento\Catalog\Test\Constraint\AssertProductForm" /> </variation> <variation name="AddVideoToPCFTestVariation4"> - <data name="initialProduct/dataset" xsi:type="string">product_with_category</data> - <data name="product/data/sku" xsi:type="string">simple_product_with_category_%isolation%</data> + <data name="initialProduct/dataset" xsi:type="string">product_with_category</data> + <data name="product/data/sku" xsi:type="string">simple_product_with_category_%isolation%</data> <data name="product/data/media_gallery/images/0/video_url" xsi:type="string">https://vimeo.com/21776334</data> <data name="product/data/media_gallery/images/0/video_title" xsi:type="string">Foo Test 2</data> <constraint name="Magento\ProductVideo\Test\Constraint\AssertVideoCategoryView" /> @@ -73,6 +75,7 @@ <data name="initialProduct/dataset" xsi:type="string">product_with_video_youtube</data> <data name="product/data/sku" xsi:type="string">sku_simple_product_with_video_%isolation%</data> <data name="product/data/media_gallery/images/0/video_url" xsi:type="string">https://youtu.be/bpOSxM0rNPM</data> + <data name="configData" xsi:type="string">youtube_api_key</data> <constraint name="Magento\Catalog\Test\Constraint\AssertProductForm" /> </variation> <variation name="UpdateVideoInPCFTestVariation2"> @@ -97,6 +100,7 @@ <data name="productVideo/data/media_gallery/images/0/video_url" xsi:type="string">https://youtu.be/bpOSxM0rNPM</data> <data name="productVideo/data/media_gallery/images/0/video_title" xsi:type="string">Edit Test</data> <data name="productVideo/data/media_gallery/images/0/video_description" xsi:type="string">This is an edit test</data> + <data name="configData" xsi:type="string">youtube_api_key</data> <constraint name="Magento\Catalog\Test\Constraint\AssertProductForm" /> </variation> <variation name="GetVideoInfoTestVariation1"> @@ -105,6 +109,7 @@ <data name="product/data/sku" xsi:type="string">simple_product_with_category_%isolation%</data> <data name="product/data/media_gallery/images/0/video_url" xsi:type="string">https://youtu.be/WMp2PvU2qi8</data> <data name="video/video_title" xsi:type="string">Foo Fighters - Congregation</data> + <data name="configData" xsi:type="string">youtube_api_key</data> <constraint name="Magento\ProductVideo\Test\Constraint\AssertGetVideoInfoDataIsCorrect" /> </variation> <variation name="GetVideoInfoTestVariation2"> diff --git a/dev/tests/functional/tests/app/Magento/Review/Test/Constraint/AssertSetApprovedProductReview.php b/dev/tests/functional/tests/app/Magento/Review/Test/Constraint/AssertSetApprovedProductReview.php index 1e627941bd767bda72fe440332592e03926229a6..ea33820808df7a4ec29e046b924ed061dceafcb2 100644 --- a/dev/tests/functional/tests/app/Magento/Review/Test/Constraint/AssertSetApprovedProductReview.php +++ b/dev/tests/functional/tests/app/Magento/Review/Test/Constraint/AssertSetApprovedProductReview.php @@ -69,6 +69,7 @@ class AssertSetApprovedProductReview extends AbstractConstraint { $this->cachePage->open(); $this->cachePage->getActionsBlock()->flushCacheStorage(); + $this->cachePage->getModalBlock()->acceptAlert(); \PHPUnit_Framework_Assert::assertTrue( $this->cachePage->getActionsBlock()->isStorageCacheFlushed(), 'Cache is not flushed.' diff --git a/dev/tests/functional/tests/app/Magento/Review/Test/Page/Adminhtml/RatingEdit.xml b/dev/tests/functional/tests/app/Magento/Review/Test/Page/Adminhtml/RatingEdit.xml index 2f6ca2960091c5bd82bb7b4d7d53870d6e62705a..f5f44551d022211696f6414d012d7ae71c082980 100644 --- a/dev/tests/functional/tests/app/Magento/Review/Test/Page/Adminhtml/RatingEdit.xml +++ b/dev/tests/functional/tests/app/Magento/Review/Test/Page/Adminhtml/RatingEdit.xml @@ -9,5 +9,6 @@ <page name="RatingEdit" area="Adminhtml" mca="review/rating/edit" module="Magento_Review"> <block name="pageActions" class="Magento\Backend\Test\Block\FormPageActions" locator=".page-main-actions" strategy="css selector" /> <block name="ratingForm" class="Magento\Review\Test\Block\Adminhtml\Rating\Edit\RatingForm" locator="[id='page:main-container']" strategy="css selector" /> + <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/> </page> </config> diff --git a/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/CreateProductRatingEntityTest.php b/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/CreateProductRatingEntityTest.php index 9f826b41451c330ba04df0998bf884e2a757c4fd..bbfabc028edbfcf7f338079820e8d1eab1aa5efb 100644 --- a/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/CreateProductRatingEntityTest.php +++ b/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/CreateProductRatingEntityTest.php @@ -127,5 +127,6 @@ class CreateProductRatingEntityTest extends Injectable $this->ratingIndex->open(); $this->ratingIndex->getRatingGrid()->searchAndOpen($filter); $this->ratingEdit->getPageActions()->delete(); + $this->ratingEdit->getModalBlock()->acceptAlert(); } } diff --git a/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/CreateProductReviewBackendEntityTest.php b/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/CreateProductReviewBackendEntityTest.php index 937cca411d93bd0c63e1fa0781d3fb24a1160f90..961ab02b043db089113b5b9872d48e9635aefb0c 100644 --- a/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/CreateProductReviewBackendEntityTest.php +++ b/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/CreateProductReviewBackendEntityTest.php @@ -135,6 +135,7 @@ class CreateProductReviewBackendEntityTest extends Injectable foreach ($this->review->getRatings() as $rating) { $this->ratingIndex->getRatingGrid()->searchAndOpen(['rating_code' => $rating['title']]); $this->ratingEdit->getPageActions()->delete(); + $this->ratingEdit->getModalBlock()->acceptAlert(); } } } diff --git a/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/CreateProductReviewFrontendEntityTest.php b/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/CreateProductReviewFrontendEntityTest.php index d0635638f9ff22cd66dd9652799057e37202d706..406f4deef9c96938bcc1168594cff4ec68fa1bb4 100644 --- a/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/CreateProductReviewFrontendEntityTest.php +++ b/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/CreateProductReviewFrontendEntityTest.php @@ -128,6 +128,7 @@ class CreateProductReviewFrontendEntityTest extends Injectable foreach ($ratings as $rating) { $this->ratingIndex->getRatingGrid()->searchAndOpen(['rating_code' => $rating['title']]); $this->ratingEdit->getPageActions()->delete(); + $this->ratingEdit->getModalBlock()->acceptAlert(); } } } diff --git a/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/DeleteProductRatingEntityTest.php b/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/DeleteProductRatingEntityTest.php index 193c7307ab800639ce31252e6b9614b64c18238f..8b7d3bf5749d993c9b6af023813bb06e9f74af05 100644 --- a/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/DeleteProductRatingEntityTest.php +++ b/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/DeleteProductRatingEntityTest.php @@ -90,5 +90,6 @@ class DeleteProductRatingEntityTest extends Injectable $this->ratingIndex->open(); $this->ratingIndex->getRatingGrid()->searchAndOpen(['rating_code' => $productRating->getRatingCode()]); $this->ratingEdit->getPageActions()->delete(); + $this->ratingEdit->getModalBlock()->acceptAlert(); } } diff --git a/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/ManageProductReviewFromCustomerPageTest.php b/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/ManageProductReviewFromCustomerPageTest.php index f0a34008cf012d56b49cf4f91e3c721aa00a319f..b7d7b5b53f55c84b5e599a517dbb12866b49e212 100644 --- a/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/ManageProductReviewFromCustomerPageTest.php +++ b/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/ManageProductReviewFromCustomerPageTest.php @@ -208,6 +208,7 @@ class ManageProductReviewFromCustomerPageTest extends Injectable foreach ($this->reviewInitial->getRatings() as $rating) { $this->ratingIndex->getRatingGrid()->searchAndOpen(['rating_code' => $rating['title']]); $this->ratingEdit->getPageActions()->delete(); + $this->ratingEdit->getModalBlock()->acceptAlert(); } } } diff --git a/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/MassActionsProductReviewEntityTest.php b/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/MassActionsProductReviewEntityTest.php index f351eb72b7d9364a998b6c3e0edb9398ae3ca568..188ec0fa1e69df95095bd633a8d7c13a51fcfbc9 100644 --- a/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/MassActionsProductReviewEntityTest.php +++ b/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/MassActionsProductReviewEntityTest.php @@ -119,6 +119,7 @@ class MassActionsProductReviewEntityTest extends Injectable foreach ($this->review->getRatings() as $rating) { $this->ratingIndex->getRatingGrid()->searchAndOpen(['rating_code' => $rating['title']]); $this->ratingEdit->getPageActions()->delete(); + $this->ratingEdit->getModalBlock()->acceptAlert(); } } } diff --git a/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/UpdateProductReviewEntityOnProductPageTest.php b/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/UpdateProductReviewEntityOnProductPageTest.php index 7b6908ce0a0aeb502cb1954369d583de1ec36041..0a373da1808d8f3d1fa4b0de030cc9c0f0d5c5c7 100644 --- a/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/UpdateProductReviewEntityOnProductPageTest.php +++ b/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/UpdateProductReviewEntityOnProductPageTest.php @@ -178,6 +178,7 @@ class UpdateProductReviewEntityOnProductPageTest extends Injectable foreach ($this->reviewInitial->getRatings() as $rating) { $this->ratingIndex->getRatingGrid()->searchAndOpen(['rating_code' => $rating['title']]); $this->ratingEdit->getPageActions()->delete(); + $this->ratingEdit->getModalBlock()->acceptAlert(); } } } diff --git a/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/UpdateProductReviewEntityTest.php b/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/UpdateProductReviewEntityTest.php index f2ab71072a284343bb6b61dfa5c7fd8d1c0f7284..f3005a32db02202fbb7e12576727b1f64e1c01e4 100644 --- a/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/UpdateProductReviewEntityTest.php +++ b/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/UpdateProductReviewEntityTest.php @@ -132,6 +132,7 @@ class UpdateProductReviewEntityTest extends Injectable foreach ($this->review->getRatings() as $rating) { $this->ratingIndex->getRatingGrid()->searchAndOpen(['rating_code' => $rating['title']]); $this->ratingEdit->getPageActions()->delete(); + $this->ratingEdit->getModalBlock()->acceptAlert(); } } } diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Actions.php b/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Actions.php index 4d5bf937f8f114d8b7aecfc572af2e91f6ddaff6..2a1942e9f7254b0ff6bfba751f5f17f073e160ca 100644 --- a/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Actions.php +++ b/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Actions.php @@ -113,6 +113,13 @@ class Actions extends Block */ protected $button = 'button[data-ui-id$="%s-button"]'; + /** + * Selector for confirm. + * + * @var string + */ + protected $confirmModal = '.confirm._show[data-role=modal]'; + /** * Ship order * @@ -171,7 +178,10 @@ class Actions extends Block public function cancel() { $this->_rootElement->find($this->cancel)->click(); - $this->browser->acceptAlert(); + $element = $this->browser->find($this->confirmModal); + /** @var \Magento\Ui\Test\Block\Adminhtml\Modal $modal */ + $modal = $this->blockFactory->create('Magento\Ui\Test\Block\Adminhtml\Modal', ['element' => $element]); + $modal->acceptAlert(); } /** diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Grid.php b/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Grid.php index 8edbfb720f70923331a9af8cd1d2f6c0581e34d6..eafb045e43909796768abf263b75cfbe940e875d 100644 --- a/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Grid.php +++ b/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Grid.php @@ -21,39 +21,39 @@ class Grid extends DataGrid */ protected $filters = [ 'id' => [ - 'selector' => '[name="filters[increment_id]"]', + 'selector' => '[name="increment_id"]', ], 'status' => [ - 'selector' => '[name="filters[status]"]', + 'selector' => '[name="status"]', 'input' => 'select', ], 'purchase_date_from' => [ - 'selector' => '[name="filters[created_at][from]"]', + 'selector' => '[name="created_at[from]"]', ], 'purchase_date_to' => [ - 'selector' => '[name="filters[created_at][to]"]', + 'selector' => '[name="created_at[to]"]', ], 'base_grand_total_from' => [ - 'selector' => '[name="filters[base_grand_total][from]"]', + 'selector' => '[name="base_grand_total[from]"]', ], 'base_grand_total_to' => [ - 'selector' => '[name="filters[base_grand_total][to]"]', + 'selector' => '[name="base_grand_total[to]"]', ], 'purchased_gran_total_from' => [ - 'selector' => '[name="filters[grand_total][from]"]', + 'selector' => '[name="grand_total[from]"]', ], 'purchased_gran_total_to' => [ - 'selector' => '[name="filters[grand_total][to]"]', + 'selector' => '[name="grand_total[to]"]', ], 'purchase_point' => [ - 'selector' => '[name="filters[store_id]"]', + 'selector' => '[name="store_id"]', 'input' => 'selectstore' ], 'bill_to_name' => [ - 'selector' => '[name="filters[billing_name]"]' + 'selector' => '[name="billing_name"]' ], 'ship_to_name' => [ - 'selector' => '[name="filters[shipping_name]"]', + 'selector' => '[name="shipping_name"]', ] ]; @@ -62,13 +62,6 @@ class Grid extends DataGrid */ protected $createNewOrder = '[data-ui-id="add-button"]'; - /** - * Purchase Point Filter selector. - * - * @var string - */ - protected $purchasePointFilter = '[name="filters[store_id]"]'; - /** * Order Id td selector. * @@ -101,12 +94,14 @@ class Grid extends DataGrid public function getPurchasePointStoreGroups() { $this->openFilterBlock(); - $storeGroupElements = $this->_rootElement->find($this->purchasePointFilter) + + $storeGroupElements = $this->_rootElement->find($this->filters['purchase_point']['selector']) ->getElements('//option/preceding-sibling::optgroup[1]', Locator::SELECTOR_XPATH); $result = []; foreach ($storeGroupElements as $storeGroupElement) { - $result[] = trim($storeGroupElement->getAttribute('label')); + // "u" pattern modifier allows to match " " and other similar entities given in invalid encryption + $result[] = preg_replace('~^\s*~u', '', $storeGroupElement->getAttribute('label')); } return $result; diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/Page/Adminhtml/OrderCreateIndex.xml b/dev/tests/functional/tests/app/Magento/Sales/Test/Page/Adminhtml/OrderCreateIndex.xml index 9ca28ac5ddd33341712eca9726bc6c2b62656946..cdfafdfa832440fa68a2891379cf88a96dd80613 100644 --- a/dev/tests/functional/tests/app/Magento/Sales/Test/Page/Adminhtml/OrderCreateIndex.xml +++ b/dev/tests/functional/tests/app/Magento/Sales/Test/Page/Adminhtml/OrderCreateIndex.xml @@ -13,6 +13,6 @@ <block name="actionsBlock" class="Magento\Backend\Test\Block\GridPageActions" locator=".page-main-actions" strategy="css selector"/> <block name="couponsBlock" class="Magento\Sales\Test\Block\Adminhtml\Order\Create\Coupons" locator="#order-coupons" strategy="css selector"/> <block name="customerActivitiesBlock" class="Magento\Sales\Test\Block\Adminhtml\Order\Create\CustomerActivities" locator=".customer-current-activity" strategy="css selector"/> - <block name="configureProductBlock" class="Magento\Catalog\Test\Block\Adminhtml\Product\Composite\Configure" locator="//*[@role='dialog' and ./*[@id='product_composite_configure'] and contains(@style,'display: block')]" strategy="xpath"/> + <block name="configureProductBlock" class="Magento\Catalog\Test\Block\Adminhtml\Product\Composite\Configure" locator="//*[@data-role='modal' and .//*[@id='product_composite_configure'] and contains(@class,'_show')]" strategy="xpath"/> </page> </config> diff --git a/dev/tests/functional/tests/app/Magento/SalesRule/Test/Page/Adminhtml/PromoQuoteEdit.xml b/dev/tests/functional/tests/app/Magento/SalesRule/Test/Page/Adminhtml/PromoQuoteEdit.xml index 23b3fe8d67b3aa5d93acb24f2f156893daff2730..432d754fddf7ef133232e86840e61ba25ea4c035 100644 --- a/dev/tests/functional/tests/app/Magento/SalesRule/Test/Page/Adminhtml/PromoQuoteEdit.xml +++ b/dev/tests/functional/tests/app/Magento/SalesRule/Test/Page/Adminhtml/PromoQuoteEdit.xml @@ -9,5 +9,6 @@ <page name="PromoQuoteEdit" area="Adminhtml" mca="sales_rule/promo_quote/edit" module="Magento_SalesRule"> <block name="formPageActions" class="Magento\Backend\Test\Block\FormPageActions" locator=".page-main-actions" strategy="css selector" /> <block name="salesRuleForm" class="Magento\SalesRule\Test\Block\Adminhtml\Promo\Quote\Edit\PromoQuoteForm" locator="[id='page:main-container']" strategy="css selector" /> + <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/> </page> </config> diff --git a/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestCase/CreateSalesRuleEntityTest.php b/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestCase/CreateSalesRuleEntityTest.php index 906a7b51a359b37337311d70edfde7d57a18c135..833752c00f609c80f4cd7666e1f0bb27f9d0c8d5 100644 --- a/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestCase/CreateSalesRuleEntityTest.php +++ b/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestCase/CreateSalesRuleEntityTest.php @@ -142,5 +142,6 @@ class CreateSalesRuleEntityTest extends Injectable $this->promoQuoteIndex->open(); $this->promoQuoteIndex->getPromoQuoteGrid()->searchAndOpen($filter); $this->promoQuoteEdit->getFormPageActions()->delete(); + $this->promoQuoteEdit->getModalBlock()->acceptAlert(); } } diff --git a/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestCase/DeleteSalesRuleEntityTest.php b/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestCase/DeleteSalesRuleEntityTest.php index 39acead1497ca0f54a8b88c0ab2991fb1b2e6ee5..354d27064be2eeedd4ad36ac9a7c0ff0f212c667 100644 --- a/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestCase/DeleteSalesRuleEntityTest.php +++ b/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestCase/DeleteSalesRuleEntityTest.php @@ -75,5 +75,6 @@ class DeleteSalesRuleEntityTest extends Injectable $this->promoQuoteIndex->open(); $this->promoQuoteIndex->getPromoQuoteGrid()->searchAndOpen(['name' => $salesRule->getName()]); $this->promoQuoteEdit->getFormPageActions()->delete(); + $this->promoQuoteEdit->getModalBlock()->acceptAlert(); } } diff --git a/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestCase/UpdateSalesRuleEntityTest.php b/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestCase/UpdateSalesRuleEntityTest.php index a1ef4b347fef4ddf8cf43643b7ac9723e34191cb..5ae2160bc42b3ab727644f984d089c4963c82118 100644 --- a/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestCase/UpdateSalesRuleEntityTest.php +++ b/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestCase/UpdateSalesRuleEntityTest.php @@ -127,5 +127,6 @@ class UpdateSalesRuleEntityTest extends Injectable $this->promoQuoteIndex->open(); $this->promoQuoteIndex->getPromoQuoteGrid()->searchAndOpen($filter); $this->promoQuoteEdit->getFormPageActions()->delete(); + $this->promoQuoteEdit->getModalBlock()->acceptAlert(); } } diff --git a/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestStep/DeleteAllSalesRuleStep.php b/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestStep/DeleteAllSalesRuleStep.php index 98bf51e84f7c37fa0c7cf86af5024e0f7ceefe72..db64010c1af084e6d9aa892612f0fe28e401f9bc 100644 --- a/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestStep/DeleteAllSalesRuleStep.php +++ b/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestStep/DeleteAllSalesRuleStep.php @@ -54,6 +54,7 @@ class DeleteAllSalesRuleStep implements TestStepInterface while ($this->promoQuoteIndex->getPromoQuoteGrid()->isFirstRowVisible()) { $this->promoQuoteIndex->getPromoQuoteGrid()->openFirstRow(); $this->promoQuoteEdit->getFormPageActions()->delete(); + $this->promoQuoteEdit->getModalBlock()->acceptAlert(); $this->promoQuoteIndex->getSystemMessageDialog()->closePopup(); } } diff --git a/dev/tests/functional/tests/app/Magento/Sitemap/Test/Page/Adminhtml/SitemapEdit.xml b/dev/tests/functional/tests/app/Magento/Sitemap/Test/Page/Adminhtml/SitemapEdit.xml index 78ebe3f0f12dd0acebec5c13d7da02b3d7ad1b48..9f2d045ae61a873198f246971f3da1eb4ed3ef29 100644 --- a/dev/tests/functional/tests/app/Magento/Sitemap/Test/Page/Adminhtml/SitemapEdit.xml +++ b/dev/tests/functional/tests/app/Magento/Sitemap/Test/Page/Adminhtml/SitemapEdit.xml @@ -6,7 +6,8 @@ */ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/pages.xsd"> - <page name="SitemapEdit" area="Adminhtml" mca="admin/sitemap/edit" module="Magento_Sitemap"> - <block name="formPageActions" class="Magento\Backend\Test\Block\FormPageActions" locator=".page-main-actions" strategy="css selector"/> - </page> + <page name="SitemapEdit" area="Adminhtml" mca="admin/sitemap/edit" module="Magento_Sitemap"> + <block name="formPageActions" class="Magento\Backend\Test\Block\FormPageActions" locator=".page-main-actions" strategy="css selector"/> + <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/> + </page> </config> diff --git a/dev/tests/functional/tests/app/Magento/Sitemap/Test/TestCase/DeleteSitemapEntityTest.php b/dev/tests/functional/tests/app/Magento/Sitemap/Test/TestCase/DeleteSitemapEntityTest.php index 56371fb69ad3d0420eaade513e0efd1594a34b0a..9e62c9111a036bb42a1708148ab53f5b8c2aa3b3 100644 --- a/dev/tests/functional/tests/app/Magento/Sitemap/Test/TestCase/DeleteSitemapEntityTest.php +++ b/dev/tests/functional/tests/app/Magento/Sitemap/Test/TestCase/DeleteSitemapEntityTest.php @@ -72,5 +72,6 @@ class DeleteSitemapEntityTest extends Injectable $this->sitemapIndex->open(); $this->sitemapIndex->getSitemapGrid()->searchAndOpen($filter); $this->sitemapEdit->getFormPageActions()->delete(); + $this->sitemapEdit->getModalBlock()->acceptAlert(); } } diff --git a/dev/tests/functional/tests/app/Magento/Tax/Test/Page/Adminhtml/TaxRateNew.xml b/dev/tests/functional/tests/app/Magento/Tax/Test/Page/Adminhtml/TaxRateNew.xml index 0237379975c22bc99ffe1e1be0f486821e03efc7..9940b8cca862f7a0b1c62448bc9cb3bb76c74e89 100644 --- a/dev/tests/functional/tests/app/Magento/Tax/Test/Page/Adminhtml/TaxRateNew.xml +++ b/dev/tests/functional/tests/app/Magento/Tax/Test/Page/Adminhtml/TaxRateNew.xml @@ -6,9 +6,10 @@ */ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/pages.xsd"> - <page name="TaxRateNew" area="Adminhtml" mca="tax/rate/add" module="Magento_Tax"> - <block name="formPageActions" class="Magento\Tax\Test\Block\Adminhtml\Rate\Edit\FormPageActions" locator=".page-main-actions" strategy="css selector"/> - <block name="taxRateForm" class="Magento\Tax\Test\Block\Adminhtml\Rate\Edit\Form" locator="#rate-form" strategy="css selector"/> - <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/> - </page> + <page name="TaxRateNew" area="Adminhtml" mca="tax/rate/add" module="Magento_Tax"> + <block name="formPageActions" class="Magento\Tax\Test\Block\Adminhtml\Rate\Edit\FormPageActions" locator=".page-main-actions" strategy="css selector"/> + <block name="taxRateForm" class="Magento\Tax\Test\Block\Adminhtml\Rate\Edit\Form" locator="#rate-form" strategy="css selector"/> + <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/> + <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/> + </page> </config> diff --git a/dev/tests/functional/tests/app/Magento/Tax/Test/Page/Adminhtml/TaxRuleNew.xml b/dev/tests/functional/tests/app/Magento/Tax/Test/Page/Adminhtml/TaxRuleNew.xml index 3396503e1d46f35179b27fe6f7f9e39274d3ac8a..3806a2e36a130cd002e0c38914ccc6a12f59786e 100644 --- a/dev/tests/functional/tests/app/Magento/Tax/Test/Page/Adminhtml/TaxRuleNew.xml +++ b/dev/tests/functional/tests/app/Magento/Tax/Test/Page/Adminhtml/TaxRuleNew.xml @@ -6,9 +6,10 @@ */ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/pages.xsd"> - <page name="TaxRuleNew" area="Adminhtml" mca="tax/rule/new" module="Magento_Tax"> - <block name="formPageActions" class="Magento\Backend\Test\Block\FormPageActions" locator=".page-main-actions" strategy="css selector"/> - <block name="taxRuleForm" class="Magento\Tax\Test\Block\Adminhtml\Rule\Edit\Form" locator="#edit_form" strategy="css selector"/> - <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/> - </page> + <page name="TaxRuleNew" area="Adminhtml" mca="tax/rule/new" module="Magento_Tax"> + <block name="formPageActions" class="Magento\Backend\Test\Block\FormPageActions" locator=".page-main-actions" strategy="css selector"/> + <block name="taxRuleForm" class="Magento\Tax\Test\Block\Adminhtml\Rule\Edit\Form" locator="#edit_form" strategy="css selector"/> + <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/> + <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/> + </page> </config> diff --git a/dev/tests/functional/tests/app/Magento/Tax/Test/TestCase/DeleteTaxRateEntityTest.php b/dev/tests/functional/tests/app/Magento/Tax/Test/TestCase/DeleteTaxRateEntityTest.php index 4bbdfbe520493e9ce5e1eafb98f0598a2edf5f06..a83bfa60070df51611a05ef74aecb4b16a4e75ca 100644 --- a/dev/tests/functional/tests/app/Magento/Tax/Test/TestCase/DeleteTaxRateEntityTest.php +++ b/dev/tests/functional/tests/app/Magento/Tax/Test/TestCase/DeleteTaxRateEntityTest.php @@ -81,5 +81,6 @@ class DeleteTaxRateEntityTest extends Injectable $this->taxRateIndex->open(); $this->taxRateIndex->getTaxRateGrid()->searchAndOpen($filter); $this->taxRateNew->getFormPageActions()->delete(); + $this->taxRateNew->getModalBlock()->acceptAlert(); } } diff --git a/dev/tests/functional/tests/app/Magento/Tax/Test/TestCase/DeleteTaxRuleEntityTest.php b/dev/tests/functional/tests/app/Magento/Tax/Test/TestCase/DeleteTaxRuleEntityTest.php index bef4c799b43f3a3603fb29b7706b12def4732cc0..de83384d07acc21f24b4926c4c9a187daf29915f 100644 --- a/dev/tests/functional/tests/app/Magento/Tax/Test/TestCase/DeleteTaxRuleEntityTest.php +++ b/dev/tests/functional/tests/app/Magento/Tax/Test/TestCase/DeleteTaxRuleEntityTest.php @@ -89,5 +89,6 @@ class DeleteTaxRuleEntityTest extends Injectable $this->taxRuleIndexPage->open(); $this->taxRuleIndexPage->getTaxRuleGrid()->searchAndOpen(['code' => $taxRule->getCode()]); $this->taxRuleNewPage->getFormPageActions()->delete(); + $this->taxRuleNewPage->getModalBlock()->acceptAlert(); } } diff --git a/dev/tests/functional/tests/app/Magento/Tax/Test/TestStep/DeleteAllTaxRulesStep.php b/dev/tests/functional/tests/app/Magento/Tax/Test/TestStep/DeleteAllTaxRulesStep.php index d24b2ca4c4de8cd5cb362704b3c78c2ad4905fb4..212d8beabc9568d25cfdabba0a00f75bd4c86e5b 100644 --- a/dev/tests/functional/tests/app/Magento/Tax/Test/TestStep/DeleteAllTaxRulesStep.php +++ b/dev/tests/functional/tests/app/Magento/Tax/Test/TestStep/DeleteAllTaxRulesStep.php @@ -55,6 +55,7 @@ class DeleteAllTaxRulesStep implements TestStepInterface while ($this->taxRuleIndexPage->getTaxRuleGrid()->isFirstRowVisible()) { $this->taxRuleIndexPage->getTaxRuleGrid()->openFirstRow(); $this->taxRuleNewPage->getFormPageActions()->delete(); + $this->taxRuleNewPage->getModalBlock()->acceptAlert(); } } } diff --git a/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/DataGrid.php b/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/DataGrid.php index f8091af4cc497cfc16cbef6222ec0e7e8c00c6d1..5757bf446e6eecf0bf13ea8c2e9253e3166ae137 100644 --- a/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/DataGrid.php +++ b/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/DataGrid.php @@ -121,6 +121,13 @@ class DataGrid extends Grid */ protected $noRecords = '[class$=no-data]'; + /** + * Selector for alert. + * + * @var string + */ + protected $alertModal = '._show[data-role=modal]'; + /** * Clear all applied Filters. * @@ -250,7 +257,10 @@ class DataGrid extends Grid ->find(sprintf($this->massActionToggleList, $actionType), Locator::SELECTOR_XPATH) ->click(); if ($acceptAlert) { - $this->browser->find($this->actionButton)->click(); + $element = $this->browser->find($this->alertModal); + /** @var \Magento\Ui\Test\Block\Adminhtml\Modal $modal */ + $modal = $this->blockFactory->create('Magento\Ui\Test\Block\Adminhtml\Modal', ['element' => $element]); + $modal->acceptAlert(); } } diff --git a/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/Modal.php b/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/Modal.php new file mode 100644 index 0000000000000000000000000000000000000000..96ed46ae296cd0ec50cb90259929c9d87d068e5d --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/Modal.php @@ -0,0 +1,94 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Ui\Test\Block\Adminhtml; + +use Magento\Mtf\Block\Block; + +/** + * Alert, confirm, prompt block. + */ +class Modal extends Block +{ + /** + * Locator value for accept button. + * + * @var string + */ + protected $acceptButtonSelector = '.action-accept'; + + /** + * Locator value for dismiss button. + * + * @var string + */ + protected $dismissButtonSelector = '.action-dismiss'; + + /** + * Locator value for close button. + * + * @var string + */ + protected $closeButtonSelector = '.action-close'; + + /** + * Locator value for prompt input. + * + * @var string + */ + protected $inputFieldSelector = '[data-role="promptField"]'; + + /** + * Press OK on an alert, confirm, prompt a dialog. + * + * @return void + */ + public function acceptAlert() + { + $this->_rootElement->find($this->acceptButtonSelector)->click(); + } + + /** + * Press Cancel on an alert, confirm, prompt a dialog. + * + * @return void + */ + public function dismissAlert() + { + $this->_rootElement->find($this->dismissButtonSelector)->click(); + } + + /** + * Press Close on an alert, confirm, prompt a dialog. + * + * @return void + */ + public function closeAlert() + { + $this->_rootElement->find($this->closeButtonSelector)->click(); + } + + /** + * Get the alert dialog text. + * + * @return string + */ + public function getAlertText() + { + return $this->_rootElement->find($this->inputFieldSelector)->getValue(); + } + + /** + * Set the text to a prompt popup. + * + * @param string $text + * @return void + */ + public function setAlertText($text) + { + $this->_rootElement->find($this->inputFieldSelector)->setValue($text); + } +} diff --git a/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/Page/Adminhtml/UrlRewriteEdit.xml b/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/Page/Adminhtml/UrlRewriteEdit.xml index 77022c54f4f7354855acb5fc1515f866b899faa5..96a0d514a30736d6aadcad8340e921fed9f5fbbb 100644 --- a/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/Page/Adminhtml/UrlRewriteEdit.xml +++ b/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/Page/Adminhtml/UrlRewriteEdit.xml @@ -6,13 +6,14 @@ */ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/pages.xsd"> - <page name="UrlRewriteEdit" area="Adminhtml" mca="admin/url_rewrite/edit" module="Magento_UrlRewrite"> - <block name="treeBlock" class="Magento\UrlRewrite\Test\Block\Adminhtml\Catalog\Category\Tree" locator="[id='page:main-container']" strategy="css selector"/> - <block name="formBlock" class="Magento\UrlRewrite\Test\Block\Adminhtml\Catalog\Edit\UrlRewriteForm" locator="[id='page:main-container']" strategy="css selector"/> - <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages .messages" strategy="css selector"/> - <block name="pageMainActions" class="Magento\Backend\Test\Block\FormPageActions" locator=".page-main-actions" strategy="css selector"/> - <block name="productGridBlock" class="Magento\UrlRewrite\Test\Block\Adminhtml\Catalog\Product\Grid" locator="[id='productGrid']" strategy="css selector"/> - <block name="urlRewriteTypeSelectorBlock" class="Magento\UrlRewrite\Test\Block\Adminhtml\Selector" locator="[data-container-for='entity-type-selector']" strategy="css selector"/> - <block name="cmsGridBlock" class="Magento\UrlRewrite\Test\Block\Adminhtml\Cms\Page\Grid" locator="#cmsPageGrid" strategy="css selector"/> - </page> + <page name="UrlRewriteEdit" area="Adminhtml" mca="admin/url_rewrite/edit" module="Magento_UrlRewrite"> + <block name="treeBlock" class="Magento\UrlRewrite\Test\Block\Adminhtml\Catalog\Category\Tree" locator="[id='page:main-container']" strategy="css selector"/> + <block name="formBlock" class="Magento\UrlRewrite\Test\Block\Adminhtml\Catalog\Edit\UrlRewriteForm" locator="[id='page:main-container']" strategy="css selector"/> + <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages .messages" strategy="css selector"/> + <block name="pageMainActions" class="Magento\Backend\Test\Block\FormPageActions" locator=".page-main-actions" strategy="css selector"/> + <block name="productGridBlock" class="Magento\UrlRewrite\Test\Block\Adminhtml\Catalog\Product\Grid" locator="[id='productGrid']" strategy="css selector"/> + <block name="urlRewriteTypeSelectorBlock" class="Magento\UrlRewrite\Test\Block\Adminhtml\Selector" locator="[data-container-for='entity-type-selector']" strategy="css selector"/> + <block name="cmsGridBlock" class="Magento\UrlRewrite\Test\Block\Adminhtml\Cms\Page\Grid" locator="#cmsPageGrid" strategy="css selector"/> + <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/> + </page> </config> diff --git a/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/DeleteCategoryUrlRewriteEntityTest.php b/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/DeleteCategoryUrlRewriteEntityTest.php index 75365689598a48d2b2d548a4cc9d9c6451b2eab1..a7eebdeae3e29abbb8d58c9a5fa2c1b51b86f9bf 100644 --- a/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/DeleteCategoryUrlRewriteEntityTest.php +++ b/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/DeleteCategoryUrlRewriteEntityTest.php @@ -82,5 +82,6 @@ class DeleteCategoryUrlRewriteEntityTest extends Injectable } $this->urlRewriteIndex->getUrlRedirectGrid()->searchAndOpen($filter); $this->urlRewriteEdit->getPageMainActions()->delete(); + $this->urlRewriteEdit->getModalBlock()->acceptAlert(); } } diff --git a/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/DeleteCustomUrlRewriteEntityTest.php b/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/DeleteCustomUrlRewriteEntityTest.php index f5592e87abef014f261c7d6bcaef3f4a6557972c..d34485b7819e70a21a5828890f7bdcfdd5080cc2 100644 --- a/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/DeleteCustomUrlRewriteEntityTest.php +++ b/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/DeleteCustomUrlRewriteEntityTest.php @@ -78,5 +78,6 @@ class DeleteCustomUrlRewriteEntityTest extends Injectable $filter = ['request_path' => $urlRewrite->getRequestPath()]; $this->urlRewriteIndex->getUrlRedirectGrid()->searchAndOpen($filter); $this->urlRewriteEdit->getPageMainActions()->delete(); + $this->urlRewriteEdit->getModalBlock()->acceptAlert(); } } diff --git a/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/DeleteProductUrlRewriteEntityTest.php b/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/DeleteProductUrlRewriteEntityTest.php index c668f0512eabda5375eef8fb30e59bc2f203bc1c..5673b0ae5e35c56cb721052e22ad3cdef054a8e7 100644 --- a/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/DeleteProductUrlRewriteEntityTest.php +++ b/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/DeleteProductUrlRewriteEntityTest.php @@ -80,5 +80,6 @@ class DeleteProductUrlRewriteEntityTest extends Injectable $filter = ['request_path' => $productRedirect->getRequestPath()]; $this->urlRewriteIndex->getUrlRedirectGrid()->searchAndOpen($filter); $this->urlRewriteEdit->getPageMainActions()->delete(); + $this->urlRewriteEdit->getModalBlock()->acceptAlert(); } } diff --git a/dev/tests/functional/tests/app/Magento/User/Test/Block/Adminhtml/User/Edit/PageActions.php b/dev/tests/functional/tests/app/Magento/User/Test/Block/Adminhtml/User/Edit/PageActions.php index c2cf7eaf643955c850940a7b7c78254aa710d881..4c75ccbc6e183f14f614ad94faf2641c600cd5d5 100644 --- a/dev/tests/functional/tests/app/Magento/User/Test/Block/Adminhtml/User/Edit/PageActions.php +++ b/dev/tests/functional/tests/app/Magento/User/Test/Block/Adminhtml/User/Edit/PageActions.php @@ -21,6 +21,13 @@ class PageActions extends FormPageActions */ protected $forceSignIn = '#invalidate'; + /** + * Selector for confirm. + * + * @var string + */ + protected $confirmModal = '.confirm._show[data-role=modal]'; + /** * Click on 'Force Sign-In' button. * @@ -29,6 +36,9 @@ class PageActions extends FormPageActions public function forceSignIn() { $this->_rootElement->find($this->forceSignIn)->click(); - $this->browser->acceptAlert(); + $element = $this->browser->find($this->confirmModal); + /** @var \Magento\Ui\Test\Block\Adminhtml\Modal $modal */ + $modal = $this->blockFactory->create('Magento\Ui\Test\Block\Adminhtml\Modal', ['element' => $element]); + $modal->acceptAlert(); } } diff --git a/dev/tests/functional/tests/app/Magento/User/Test/Page/Adminhtml/UserEdit.xml b/dev/tests/functional/tests/app/Magento/User/Test/Page/Adminhtml/UserEdit.xml index 63f872991799bd133ff580c0ff246c5023fa420d..67a3334680817155db54376c80d3aba5bbb7dec2 100644 --- a/dev/tests/functional/tests/app/Magento/User/Test/Page/Adminhtml/UserEdit.xml +++ b/dev/tests/functional/tests/app/Magento/User/Test/Page/Adminhtml/UserEdit.xml @@ -6,10 +6,11 @@ */ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/pages.xsd"> - <page name="UserEdit" area="Adminhtml" mca="admin/user/edit" module="Magento_User"> - <block name="pageActions" class="Magento\User\Test\Block\Adminhtml\User\Edit\PageActions" locator=".page-main-actions" strategy="css selector"/> - <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/> - <block name="userForm" class="Magento\User\Test\Block\Adminhtml\User\UserForm" locator="[id='page:main-container']" strategy="css selector"/> - <block name="rolesGrid" class="Magento\User\Test\Block\Adminhtml\User\Tab\Role\Grid" locator="[id='permissionsUserRolesGrid']" strategy="css selector"/> - </page> + <page name="UserEdit" area="Adminhtml" mca="admin/user/edit" module="Magento_User"> + <block name="pageActions" class="Magento\User\Test\Block\Adminhtml\User\Edit\PageActions" locator=".page-main-actions" strategy="css selector"/> + <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/> + <block name="userForm" class="Magento\User\Test\Block\Adminhtml\User\UserForm" locator="[id='page:main-container']" strategy="css selector"/> + <block name="rolesGrid" class="Magento\User\Test\Block\Adminhtml\User\Tab\Role\Grid" locator="[id='permissionsUserRolesGrid']" strategy="css selector"/> + <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/> + </page> </config> diff --git a/dev/tests/functional/tests/app/Magento/User/Test/Page/Adminhtml/UserRoleEditRole.xml b/dev/tests/functional/tests/app/Magento/User/Test/Page/Adminhtml/UserRoleEditRole.xml index 739a150f8a4842f11ff4deeba75ae08e8fb6acc3..4f30dddd026ccb065f3220129f1c136c195fb18c 100644 --- a/dev/tests/functional/tests/app/Magento/User/Test/Page/Adminhtml/UserRoleEditRole.xml +++ b/dev/tests/functional/tests/app/Magento/User/Test/Page/Adminhtml/UserRoleEditRole.xml @@ -6,9 +6,10 @@ */ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/pages.xsd"> - <page name="UserRoleEditRole" area="Adminhtml" mca="admin/user_role/editrole" module="Magento_User"> - <block name="pageActions" class="Magento\User\Test\Block\Adminhtml\Role\PageActions" locator=".page-main-actions" strategy="css selector"/> - <block name="roleFormTabs" class="Magento\User\Test\Block\Adminhtml\Role\RoleForm" locator="[id='page:main-container']" strategy="css selector"/> - <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/> - </page> + <page name="UserRoleEditRole" area="Adminhtml" mca="admin/user_role/editrole" module="Magento_User"> + <block name="pageActions" class="Magento\User\Test\Block\Adminhtml\Role\PageActions" locator=".page-main-actions" strategy="css selector"/> + <block name="roleFormTabs" class="Magento\User\Test\Block\Adminhtml\Role\RoleForm" locator="[id='page:main-container']" strategy="css selector"/> + <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/> + <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/> + </page> </config> diff --git a/dev/tests/functional/tests/app/Magento/User/Test/TestCase/DeleteAdminUserEntityTest.php b/dev/tests/functional/tests/app/Magento/User/Test/TestCase/DeleteAdminUserEntityTest.php index 662992062276a834232c280958d232c8bfc983fc..0e0c500fc5f125bcdee94ebcbace61ae262b7837 100644 --- a/dev/tests/functional/tests/app/Magento/User/Test/TestCase/DeleteAdminUserEntityTest.php +++ b/dev/tests/functional/tests/app/Magento/User/Test/TestCase/DeleteAdminUserEntityTest.php @@ -120,6 +120,7 @@ class DeleteAdminUserEntityTest extends Injectable $this->userIndex->open(); $this->userIndex->getUserGrid()->searchAndOpen($filter); $this->userEdit->getPageActions()->delete(); + $this->userEdit->getModalBlock()->acceptAlert(); } /** diff --git a/dev/tests/functional/tests/app/Magento/User/Test/TestCase/DeleteUserRoleEntityTest.php b/dev/tests/functional/tests/app/Magento/User/Test/TestCase/DeleteUserRoleEntityTest.php index 22421a9557c82e3a7feb4f745ec5c92da61d59ee..8f66d93cc0831c81a4750c7a6503ed13ee810920 100644 --- a/dev/tests/functional/tests/app/Magento/User/Test/TestCase/DeleteUserRoleEntityTest.php +++ b/dev/tests/functional/tests/app/Magento/User/Test/TestCase/DeleteUserRoleEntityTest.php @@ -122,6 +122,7 @@ class DeleteUserRoleEntityTest extends Injectable $this->userRoleIndex->open(); $this->userRoleIndex->getRoleGrid()->searchAndOpen($filter); $this->userRoleEditRole->getPageActions()->delete(); + $this->userRoleEditRole->getModalBlock()->acceptAlert(); } /** diff --git a/dev/tests/functional/tests/app/Magento/Variable/Test/Block/Adminhtml/System/Variable/FormPageActions.php b/dev/tests/functional/tests/app/Magento/Variable/Test/Block/Adminhtml/System/Variable/FormPageActions.php index 8fa7f1fc390d3a44fae5e75970962dec1d72711a..fab74ada1dcf7f6031dd7b1b658bbb3cb691d159 100644 --- a/dev/tests/functional/tests/app/Magento/Variable/Test/Block/Adminhtml/System/Variable/FormPageActions.php +++ b/dev/tests/functional/tests/app/Magento/Variable/Test/Block/Adminhtml/System/Variable/FormPageActions.php @@ -35,6 +35,13 @@ class FormPageActions extends AbstractFormPageActions */ protected $storeView = './/*/a[contains(text(),"%s")]'; + /** + * Selector for confirm. + * + * @var string + */ + protected $confirmModal = '.confirm._show[data-role=modal]'; + /** * Select Store View. * @@ -56,7 +63,10 @@ class FormPageActions extends AbstractFormPageActions } else { throw new \Exception('Store View with name \'' . $storeName . '\' is not visible!'); } - $this->browser->acceptAlert(); + $element = $this->browser->find($this->confirmModal); + /** @var \Magento\Ui\Test\Block\Adminhtml\Modal $modal */ + $modal = $this->blockFactory->create('Magento\Ui\Test\Block\Adminhtml\Modal', ['element' => $element]); + $modal->acceptAlert(); return null; } diff --git a/dev/tests/functional/tests/app/Magento/Variable/Test/Page/Adminhtml/SystemVariableNew.xml b/dev/tests/functional/tests/app/Magento/Variable/Test/Page/Adminhtml/SystemVariableNew.xml index 1ef12a76ebccb87e88c0a471733b5c256f06f123..294fbe0a1e9760fbdad9c19bc2bce5b082d493f2 100644 --- a/dev/tests/functional/tests/app/Magento/Variable/Test/Page/Adminhtml/SystemVariableNew.xml +++ b/dev/tests/functional/tests/app/Magento/Variable/Test/Page/Adminhtml/SystemVariableNew.xml @@ -6,8 +6,9 @@ */ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/pages.xsd"> - <page name="SystemVariableNew" area="Adminhtml" mca="admin/system_variable/new" module="Magento_Variable"> - <block name="formPageActions" class="Magento\Variable\Test\Block\Adminhtml\System\Variable\FormPageActions" locator=".page-main-actions" strategy="css selector"/> - <block name="systemVariableForm" class="Magento\Variable\Test\Block\Adminhtml\System\Variable\Edit\VariableForm" locator="#edit_form" strategy="css selector"/> - </page> + <page name="SystemVariableNew" area="Adminhtml" mca="admin/system_variable/new" module="Magento_Variable"> + <block name="formPageActions" class="Magento\Variable\Test\Block\Adminhtml\System\Variable\FormPageActions" locator=".page-main-actions" strategy="css selector"/> + <block name="systemVariableForm" class="Magento\Variable\Test\Block\Adminhtml\System\Variable\Edit\VariableForm" locator="#edit_form" strategy="css selector"/> + <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/> + </page> </config> diff --git a/dev/tests/functional/tests/app/Magento/Variable/Test/TestCase/DeleteCustomVariableEntityTest.php b/dev/tests/functional/tests/app/Magento/Variable/Test/TestCase/DeleteCustomVariableEntityTest.php index 48ae7608c568326d3cd3bcac38a21985d29bed1e..a52fdc02ca3c20d1e168bb144f9533a2995541d6 100644 --- a/dev/tests/functional/tests/app/Magento/Variable/Test/TestCase/DeleteCustomVariableEntityTest.php +++ b/dev/tests/functional/tests/app/Magento/Variable/Test/TestCase/DeleteCustomVariableEntityTest.php @@ -80,5 +80,6 @@ class DeleteCustomVariableEntityTest extends Injectable $this->systemVariableIndexPage->open(); $this->systemVariableIndexPage->getSystemVariableGrid()->searchAndOpen($filter); $this->systemVariableNewPage->getFormPageActions()->delete(); + $this->systemVariableNewPage->getModalBlock()->acceptAlert(); } } diff --git a/dev/tests/functional/tests/app/Magento/Widget/Test/Page/Adminhtml/WidgetInstanceEdit.xml b/dev/tests/functional/tests/app/Magento/Widget/Test/Page/Adminhtml/WidgetInstanceEdit.xml index ce17b52e6d47f0ab26bb8146f8f3f0372fa604d6..a91e0a5d3c3e48ee80edefe16ad73fbffb6bb6d4 100644 --- a/dev/tests/functional/tests/app/Magento/Widget/Test/Page/Adminhtml/WidgetInstanceEdit.xml +++ b/dev/tests/functional/tests/app/Magento/Widget/Test/Page/Adminhtml/WidgetInstanceEdit.xml @@ -10,5 +10,6 @@ <block name="widgetForm" class="Magento\Widget\Test\Block\Adminhtml\Widget\Instance\Edit\WidgetForm" locator="[id='page:main-container']" strategy="css selector" /> <block name="pageActionsBlock" class="Magento\Backend\Test\Block\FormPageActions" locator=".page-main-actions" strategy="css selector" /> <block name="templateBlock" class="Magento\Backend\Test\Block\Template" locator="body" strategy="css selector" /> + <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/> </page> </config> diff --git a/dev/tests/functional/tests/app/Magento/Widget/Test/TestCase/DeleteWidgetEntityTest.php b/dev/tests/functional/tests/app/Magento/Widget/Test/TestCase/DeleteWidgetEntityTest.php index b89af1b2bc4e7aa6ee4347cc5370b759dc206c0d..076cc16f6fef7a43061ca835723389aebb639bb5 100644 --- a/dev/tests/functional/tests/app/Magento/Widget/Test/TestCase/DeleteWidgetEntityTest.php +++ b/dev/tests/functional/tests/app/Magento/Widget/Test/TestCase/DeleteWidgetEntityTest.php @@ -77,5 +77,6 @@ class DeleteWidgetEntityTest extends Injectable $this->widgetInstanceIndex->open(); $this->widgetInstanceIndex->getWidgetGrid()->searchAndOpen($filter); $this->widgetInstanceEdit->getPageActionsBlock()->delete(); + $this->widgetInstanceEdit->getModalBlock()->acceptAlert(); } } diff --git a/dev/tests/functional/tests/app/Magento/Widget/Test/TestStep/DeleteAllWidgetsStep.php b/dev/tests/functional/tests/app/Magento/Widget/Test/TestStep/DeleteAllWidgetsStep.php index fd5825cb022ec3c7a45323949345efcb467ef580..f3d8184eea17df7a2748b6933b104d034d7423bb 100644 --- a/dev/tests/functional/tests/app/Magento/Widget/Test/TestStep/DeleteAllWidgetsStep.php +++ b/dev/tests/functional/tests/app/Magento/Widget/Test/TestStep/DeleteAllWidgetsStep.php @@ -55,6 +55,7 @@ class DeleteAllWidgetsStep implements TestStepInterface $this->widgetInstanceIndex->getWidgetGrid()->openFirstRow(); $this->widgetInstanceEdit->getTemplateBlock()->waitLoader(); $this->widgetInstanceEdit->getPageActionsBlock()->delete(); + $this->widgetInstanceEdit->getModalBlock()->acceptAlert(); $this->widgetInstanceIndex->getSystemMessageDialog()->closePopup(); } } diff --git a/dev/tests/functional/tests/app/Magento/Wishlist/Test/Block/Adminhtml/Customer/Edit/Tab/Wishlist/Grid.php b/dev/tests/functional/tests/app/Magento/Wishlist/Test/Block/Adminhtml/Customer/Edit/Tab/Wishlist/Grid.php index e7147535ce163d374438d18904e87cf26202bc9c..a13e0feda852349ec6d3182b80853c5282b41f57 100644 --- a/dev/tests/functional/tests/app/Magento/Wishlist/Test/Block/Adminhtml/Customer/Edit/Tab/Wishlist/Grid.php +++ b/dev/tests/functional/tests/app/Magento/Wishlist/Test/Block/Adminhtml/Customer/Edit/Tab/Wishlist/Grid.php @@ -57,6 +57,13 @@ class Grid extends \Magento\Backend\Test\Block\Widget\Grid */ protected $rowTemplateStrict = 'td[contains(.,normalize-space("%s"))]'; + /** + * Selector for confirm. + * + * @var string + */ + protected $confirmModal = '.confirm._show[data-role=modal]'; + /** * Delete product * @@ -65,7 +72,10 @@ class Grid extends \Magento\Backend\Test\Block\Widget\Grid protected function delete() { $this->_rootElement->find($this->rowItem . ' ' . $this->deleteLink)->click(); - $this->browser->acceptAlert(); + $element = $this->browser->find($this->confirmModal); + /** @var \Magento\Ui\Test\Block\Adminhtml\Modal $modal */ + $modal = $this->blockFactory->create('Magento\Ui\Test\Block\Adminhtml\Modal', ['element' => $element]); + $modal->acceptAlert(); } /** diff --git a/dev/tests/integration/framework/Magento/TestFramework/Application.php b/dev/tests/integration/framework/Magento/TestFramework/Application.php index cddc60e12b3313098902441a995703641c3c79ce..523c4de04e492b3a64d26133a1e4d66ba16122ff 100644 --- a/dev/tests/integration/framework/Magento/TestFramework/Application.php +++ b/dev/tests/integration/framework/Magento/TestFramework/Application.php @@ -367,7 +367,6 @@ class Application 'core_app_init_current_store_after' => [ 'integration_tests' => [ 'instance' => 'Magento\TestFramework\Event\Magento', - 'method' => 'initStoreAfter', 'name' => 'integration_tests' ] ] diff --git a/dev/tests/integration/framework/Magento/TestFramework/Db/ConnectionAdapter.php b/dev/tests/integration/framework/Magento/TestFramework/Db/ConnectionAdapter.php index 4e59fa47d7da9753acc9128204008c617c527eac..7f624342718b7d1004ca98bf065a5de3d75cb8e7 100644 --- a/dev/tests/integration/framework/Magento/TestFramework/Db/ConnectionAdapter.php +++ b/dev/tests/integration/framework/Magento/TestFramework/Db/ConnectionAdapter.php @@ -7,7 +7,7 @@ */ namespace Magento\TestFramework\Db; -class ConnectionAdapter extends \Magento\Framework\Model\ModelResource\Type\Db\Pdo\Mysql +class ConnectionAdapter extends \Magento\Framework\Model\ResourceModel\Type\Db\Pdo\Mysql { /** * Retrieve DB connection class name diff --git a/dev/tests/integration/framework/Magento/TestFramework/Event/Magento.php b/dev/tests/integration/framework/Magento/TestFramework/Event/Magento.php index 95d35b39eb61bc186d8a44a9e0647e915d86887c..37191d9f51c825e4af31fa805c26b557334eebd9 100644 --- a/dev/tests/integration/framework/Magento/TestFramework/Event/Magento.php +++ b/dev/tests/integration/framework/Magento/TestFramework/Event/Magento.php @@ -6,10 +6,12 @@ namespace Magento\TestFramework\Event; +use Magento\Framework\Event\ObserverInterface; + /** * Observer of Magento events triggered using \Magento\TestFramework\EventManager::dispatch() */ -class Magento +class Magento implements ObserverInterface { /** * Used when Magento framework instantiates the class on its own and passes nothing to the constructor @@ -51,8 +53,10 @@ class Magento /** * Handler for 'core_app_init_current_store_after' event, that converts it into 'initStoreAfter' + * @param \Magento\Framework\Event\Observer $observer + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ - public function initStoreAfter() + public function execute(\Magento\Framework\Event\Observer $observer) { $this->_eventManager->fireEvent('initStoreAfter'); } diff --git a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Event/MagentoTest.php b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Event/MagentoTest.php index 119dc7bed56275c1f396628e89705ed99fb15fc1..ca83fe53b581daa291733b020c863a06834af671 100644 --- a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Event/MagentoTest.php +++ b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Event/MagentoTest.php @@ -61,6 +61,6 @@ class MagentoTest extends \PHPUnit_Framework_TestCase public function testInitStoreAfter() { $this->_eventManager->expects($this->once())->method('fireEvent')->with('initStoreAfter'); - $this->_object->initStoreAfter(); + $this->_object->execute($this->getMock('\Magento\Framework\Event\Observer')); } } diff --git a/dev/tests/integration/testsuite/Magento/Bundle/_files/order_item_with_bundle_and_options.php b/dev/tests/integration/testsuite/Magento/Bundle/_files/order_item_with_bundle_and_options.php new file mode 100644 index 0000000000000000000000000000000000000000..b4e01574fae77202e053a134691b32fe96222d4b --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Bundle/_files/order_item_with_bundle_and_options.php @@ -0,0 +1,79 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +require __DIR__ . '/product_with_multiple_options.php'; + +$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); + +$addressData = include __DIR__ . '/../../../Magento/Sales/_files/address_data.php'; + +$billingAddress = $objectManager->create('Magento\Sales\Model\Order\Address', ['data' => $addressData]); +$billingAddress->setAddressType('billing'); + +$shippingAddress = clone $billingAddress; +$shippingAddress->setId(null)->setAddressType('shipping'); + +$payment = $objectManager->create('Magento\Sales\Model\Order\Payment'); +$payment->setMethod('checkmo'); + +/** @var $product \Magento\Catalog\Model\Product */ +$product = $objectManager->create('Magento\Catalog\Model\Product'); +$product->load(3); + +/** @var $typeInstance \Magento\Bundle\Model\Product\Type */ +$typeInstance = $product->getTypeInstance(); +$typeInstance->setStoreFilter($product->getStoreId(), $product); +$optionCollection = $typeInstance->getOptionsCollection($product); + +$bundleOptions = []; +$bundleOptionsQty = []; +foreach ($optionCollection as $option) { + /** @var $option \Magento\Bundle\Model\Option */ + $selectionsCollection = $typeInstance->getSelectionsCollection([$option->getId()], $product); + if ($option->isMultiSelection()) { + $bundleOptions[$option->getId()] = array_column($selectionsCollection->toArray(), 'selection_id'); + } else { + $bundleOptions[$option->getId()] = $selectionsCollection->getFirstItem()->getSelectionId(); + } + $bundleOptionsQty[$option->getId()] = 1; +} + +$requestInfo = [ + 'product' => $product->getId(), + 'bundle_option' => $bundleOptions, + 'bundle_option_qty' => $bundleOptionsQty, + 'qty' => 1, +]; + +/** @var \Magento\Sales\Model\Order\Item $orderItem */ +$orderItem = $objectManager->create('Magento\Sales\Model\Order\Item'); +$orderItem->setProductId($product->getId()); +$orderItem->setQtyOrdered(1); +$orderItem->setBasePrice($product->getPrice()); +$orderItem->setPrice($product->getPrice()); +$orderItem->setRowTotal($product->getPrice()); +$orderItem->setProductType($product->getTypeId()); +$orderItem->setProductOptions(['info_buyRequest' => $requestInfo]); + +/** @var \Magento\Sales\Model\Order $order */ +$order = $objectManager->create('Magento\Sales\Model\Order'); +$order->setIncrementId('100000001'); +$order->setState(\Magento\Sales\Model\Order::STATE_NEW); +$order->setStatus($order->getConfig()->getStateDefaultStatus(\Magento\Sales\Model\Order::STATE_NEW)); +$order->setCustomerIsGuest(true); +$order->setCustomerEmail('customer@null.com'); +$order->setCustomerFirstname('firstname'); +$order->setCustomerLastname('lastname'); +$order->setBillingAddress($billingAddress); +$order->setShippingAddress($shippingAddress); +$order->setAddresses([$billingAddress, $shippingAddress]); +$order->setPayment($payment); +$order->addItem($orderItem); +$order->setStoreId($objectManager->get('Magento\Store\Model\StoreManagerInterface')->getStore()->getId()); +$order->setSubtotal(100); +$order->setBaseSubtotal(100); +$order->setBaseGrandTotal(100); +$order->save(); diff --git a/dev/tests/integration/testsuite/Magento/Bundle/_files/order_item_with_bundle_and_options_rollback.php b/dev/tests/integration/testsuite/Magento/Bundle/_files/order_item_with_bundle_and_options_rollback.php new file mode 100644 index 0000000000000000000000000000000000000000..e528be5818b7b2d98f4035f813a7f68b7fd8b039 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Bundle/_files/order_item_with_bundle_and_options_rollback.php @@ -0,0 +1,8 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +require __DIR__ . '/product_with_multiple_options_rollback.php'; +require __DIR__ . '/../../../Magento/Sales/_files/default_rollback.php'; diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/Price/_files/products_base.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/Price/_files/products_base.php index 990052de5455996f134cf596d0556fe7d4419071..03f477f6054fd65d9f72254c719d4bae7bed9e84 100644 --- a/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/Price/_files/products_base.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/Price/_files/products_base.php @@ -64,6 +64,8 @@ foreach ($testCases as $index => $testCase) { true )->setPosition( $position + )->setUrlKey( + 'category_' . $categoryId )->save(); foreach ($testCase[0] as $price) { diff --git a/dev/tests/integration/testsuite/Magento/Catalog/_files/order_item_with_product_and_custom_options.php b/dev/tests/integration/testsuite/Magento/Catalog/_files/order_item_with_product_and_custom_options.php new file mode 100644 index 0000000000000000000000000000000000000000..0d4b9ba608adf24f09684176d849cbc349a34d17 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Catalog/_files/order_item_with_product_and_custom_options.php @@ -0,0 +1,75 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +require __DIR__ . '/product_simple.php'; + +$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); + +$addressData = include __DIR__ . '/../../../Magento/Sales/_files/address_data.php'; + +$billingAddress = $objectManager->create('Magento\Sales\Model\Order\Address', ['data' => $addressData]); +$billingAddress->setAddressType('billing'); + +$shippingAddress = clone $billingAddress; +$shippingAddress->setId(null)->setAddressType('shipping'); + +$payment = $objectManager->create('Magento\Sales\Model\Order\Payment'); +$payment->setMethod('checkmo'); + +/** @var $product \Magento\Catalog\Model\Product */ +$product = $objectManager->create('Magento\Catalog\Model\Product'); +$product->load(1); + +$optionValuesByType = [ + 'field' => 'Test value', + 'date_time' => [ + 'year' => '2015', + 'month' => '9', + 'day' => '9', + 'hour' => '2', + 'minute' => '2', + 'day_part' => 'am', + 'date_internal' => '', + ], + 'drop_down' => '3-1-select', + 'radio' => '4-1-radio', +]; + +$requestInfo = ['options' => []]; +$productOptions = $product->getOptions(); +foreach ($productOptions as $option) { + $requestInfo['options'][$option->getOptionId()] = $optionValuesByType[$option->getType()]; +} + +/** @var \Magento\Sales\Model\Order\Item $orderItem */ +$orderItem = $objectManager->create('Magento\Sales\Model\Order\Item'); +$orderItem->setProductId($product->getId()); +$orderItem->setQtyOrdered(1); +$orderItem->setBasePrice($product->getPrice()); +$orderItem->setPrice($product->getPrice()); +$orderItem->setRowTotal($product->getPrice()); +$orderItem->setProductType($product->getTypeId()); +$orderItem->setProductOptions(['info_buyRequest' => $requestInfo]); + +/** @var \Magento\Sales\Model\Order $order */ +$order = $objectManager->create('Magento\Sales\Model\Order'); +$order->setIncrementId('100000001'); +$order->setState(\Magento\Sales\Model\Order::STATE_NEW); +$order->setStatus($order->getConfig()->getStateDefaultStatus(\Magento\Sales\Model\Order::STATE_NEW)); +$order->setCustomerIsGuest(true); +$order->setCustomerEmail('customer@null.com'); +$order->setCustomerFirstname('firstname'); +$order->setCustomerLastname('lastname'); +$order->setBillingAddress($billingAddress); +$order->setShippingAddress($shippingAddress); +$order->setAddresses([$billingAddress, $shippingAddress]); +$order->setPayment($payment); +$order->addItem($orderItem); +$order->setStoreId($objectManager->get('Magento\Store\Model\StoreManagerInterface')->getStore()->getId()); +$order->setSubtotal(100); +$order->setBaseSubtotal(100); +$order->setBaseGrandTotal(100); +$order->save(); diff --git a/dev/tests/integration/testsuite/Magento/Catalog/_files/order_item_with_product_and_custom_options_rollback.php b/dev/tests/integration/testsuite/Magento/Catalog/_files/order_item_with_product_and_custom_options_rollback.php new file mode 100644 index 0000000000000000000000000000000000000000..dc1ef8a350e6b42cad88a9a371ca2ff8f010579d --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Catalog/_files/order_item_with_product_and_custom_options_rollback.php @@ -0,0 +1,8 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +require __DIR__ . '/product_simple_rollback.php'; +require __DIR__ . '/../../../Magento/Sales/_files/default_rollback.php'; diff --git a/dev/tests/integration/testsuite/Magento/Config/Block/System/Config/FormTest.php b/dev/tests/integration/testsuite/Magento/Config/Block/System/Config/FormTest.php index cc545e0b5537bd4025c7fa2aba8f0113d49cb51b..d1bd13f74a1885c3289c8673beb0cb2691203f28 100644 --- a/dev/tests/integration/testsuite/Magento/Config/Block/System/Config/FormTest.php +++ b/dev/tests/integration/testsuite/Magento/Config/Block/System/Config/FormTest.php @@ -75,19 +75,21 @@ class FormTest extends \PHPUnit_Framework_TestCase /** * @covers \Magento\Config\Block\System\Config\Form::initFields - * @param bool $useConfigField uses the test_field_use_config field if true + * @param string $fieldId uses the test_field_use_config field if true * @param bool $isConfigDataEmpty if the config data array should be empty or not - * @param $configDataValue the value that the field path should be set to in the config data + * @param string $configDataValue The value that the field path should be set to in the config data + * @param int $valueSelCtr Number of time that value is selected * @param bool $expectedUseDefault * @dataProvider initFieldsUseDefaultCheckboxDataProvider */ public function testInitFieldsUseDefaultCheckbox( - $useConfigField, + $fieldId, $isConfigDataEmpty, $configDataValue, - $expectedUseDefault + $expectedUseDefault, + $valueSelCtr = 1 ) { - $this->_setupFieldsInheritCheckbox($useConfigField, $isConfigDataEmpty, $configDataValue); + $this->_setupFieldsInheritCheckbox($fieldId, $isConfigDataEmpty, $configDataValue); \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get( 'Magento\Framework\Config\ScopeInterface' @@ -126,12 +128,17 @@ class FormTest extends \PHPUnit_Framework_TestCase $fieldsetHtml = $fieldset->getElementHtml(); $this->assertSelectCount($fieldsetSel, true, $fieldsetHtml, 'Fieldset HTML is invalid'); - $this->assertSelectCount($valueSel, true, $fieldsetHtml, 'Field input not found in fieldset HTML'); + $this->assertSelectCount( + $valueSel, + $valueSelCtr, + $fieldsetHtml, + 'Field input should appear ' . $valueSelCtr . ' times in fieldset HTML' + ); $this->assertSelectCount( $useDefaultSel, - true, + $valueSelCtr, $fieldsetHtml, - '"Use Default" checkbox not found in fieldset HTML' + '"Use Default" checkbox should appear' . $valueSelCtr . ' times in fieldset HTML.' ); if ($expectedUseDefault) { @@ -159,25 +166,27 @@ class FormTest extends \PHPUnit_Framework_TestCase public static function initFieldsUseDefaultCheckboxDataProvider() { return [ - [false, true, null, true], - [false, false, null, false], - [false, false, '', false], - [false, false, 'value', false], - [true, false, 'config value', false] + ['test_field', true, null, true], + ['test_field', false, null, false], + ['test_field', false, '', false], + ['test_field', false, 'value', false], + ['test_field_use_config_module_1', false, 'config value', false], + ['test_field_use_config_module_0', false, 'config value', false, 0], ]; } /** * @covers \Magento\Config\Block\System\Config\Form::initFields - * @param bool $useConfigField uses the test_field_use_config field if true + * @param string $fieldId uses the test_field_use_config field if true * @param bool $isConfigDataEmpty if the config data array should be empty or not - * @param $configDataValue the value that the field path should be set to in the config data + * @param string $configDataValue Value that the field path should be set to in the config data + * @param int $valueSelCtr Number of time that value is selected * @dataProvider initFieldsUseConfigPathDataProvider * @magentoConfigFixture default/test_config_section/test_group_config_node/test_field_value config value */ - public function testInitFieldsUseConfigPath($useConfigField, $isConfigDataEmpty, $configDataValue) + public function testInitFieldsUseConfigPath($fieldId, $isConfigDataEmpty, $configDataValue, $valueSelCtr = 1) { - $this->_setupFieldsInheritCheckbox($useConfigField, $isConfigDataEmpty, $configDataValue); + $this->_setupFieldsInheritCheckbox($fieldId, $isConfigDataEmpty, $configDataValue); \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get( 'Magento\Framework\Config\ScopeInterface' @@ -208,7 +217,12 @@ class FormTest extends \PHPUnit_Framework_TestCase $fieldsetHtml = $fieldset->getElementHtml(); $this->assertSelectCount($fieldsetSel, true, $fieldsetHtml, 'Fieldset HTML is invalid'); - $this->assertSelectCount($valueSel, true, $fieldsetHtml, 'Field input not found in fieldset HTML'); + $this->assertSelectCount( + $valueSel, + $valueSelCtr, + $fieldsetHtml, + 'Field input should appear ' . $valueSelCtr . ' times in fieldset HTML' + ); } /** @@ -217,20 +231,21 @@ class FormTest extends \PHPUnit_Framework_TestCase public static function initFieldsUseConfigPathDataProvider() { return [ - [false, true, null], - [false, false, null], - [false, false, ''], - [false, false, 'value'], - [true, false, 'config value'] + ['test_field', true, null], + ['test_field', false, null], + ['test_field', false, ''], + ['test_field', false, 'value'], + ['test_field_use_config_module_1', false, 'config value'], + ['test_field_use_config_module_0', false, 'config value', 0] ]; } /** - * @param bool $useConfigField uses the test_field_use_config field if true + * @param string $fieldId uses the test_field_use_config field if true * @param bool $isConfigDataEmpty if the config data array should be empty or not - * @param $configDataValue the value that the field path should be set to in the config data + * @param string $configDataValue the value that the field path should be set to in the config data */ - protected function _setupFieldsInheritCheckbox($useConfigField, $isConfigDataEmpty, $configDataValue) + protected function _setupFieldsInheritCheckbox($fieldId, $isConfigDataEmpty, $configDataValue) { \Magento\TestFramework\Helper\Bootstrap::getInstance()->reinitialize([ State::PARAM_BAN_CACHE => true, @@ -273,11 +288,8 @@ class FormTest extends \PHPUnit_Framework_TestCase $this->_group = $structure->getElement('test_section/test_group'); - if ($useConfigField) { - $this->_field = $structure->getElement('test_section/test_group/test_field_use_config'); - } else { - $this->_field = $structure->getElement('test_section/test_group/test_field'); - } + $this->_field = $structure->getElement('test_section/test_group/' . $fieldId); + $fieldPath = $this->_field->getConfigPath(); if ($isConfigDataEmpty) { diff --git a/dev/tests/integration/testsuite/Magento/Config/Block/System/Config/_files/test_section_config.xml b/dev/tests/integration/testsuite/Magento/Config/Block/System/Config/_files/test_section_config.xml index 072e1921a23e5b855d183235bf5192b5e3531b64..d584ff2a9f445ef867e1e6728a6df4eb6702bb3d 100644 --- a/dev/tests/integration/testsuite/Magento/Config/Block/System/Config/_files/test_section_config.xml +++ b/dev/tests/integration/testsuite/Magento/Config/Block/System/Config/_files/test_section_config.xml @@ -20,9 +20,15 @@ <label>Test Field</label> <config_path>test_section/test_group/test_field</config_path> </field> - <field id="test_field_use_config" translate="label comment" showInDefault="1" showInWebsite="1" showInStore="1" type="text" sortOrder="20"> + <field id="test_field_use_config_module_1" translate="label comment" showInDefault="1" showInWebsite="1" showInStore="1" type="text" sortOrder="20"> <label>Test Field</label> <config_path>test_config_section/test_group_config_node/test_field_value</config_path> + <if_module_enabled>Magento_Config</if_module_enabled> + </field> + <field id="test_field_use_config_module_0" translate="label comment" showInDefault="1" showInWebsite="1" showInStore="1" type="text" sortOrder="20"> + <label>Test Field</label> + <config_path>test_config_section/test_group_config_node/test_field_value</config_path> + <if_module_enabled>Test_Module</if_module_enabled> </field> </group> </section> diff --git a/dev/tests/integration/testsuite/Magento/ConfigurableProduct/_files/order_item_with_configurable_and_options.php b/dev/tests/integration/testsuite/Magento/ConfigurableProduct/_files/order_item_with_configurable_and_options.php new file mode 100644 index 0000000000000000000000000000000000000000..3a63d6c93e73e8fb8fe0b01ee0229b1d238ede19 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/ConfigurableProduct/_files/order_item_with_configurable_and_options.php @@ -0,0 +1,70 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +require 'product_configurable.php'; + +$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); + +$addressData = include __DIR__ . '/../../../Magento/Sales/_files/address_data.php'; + +$billingAddress = $objectManager->create('Magento\Sales\Model\Order\Address', ['data' => $addressData]); +$billingAddress->setAddressType('billing'); + +$shippingAddress = clone $billingAddress; +$shippingAddress->setId(null)->setAddressType('shipping'); + +$payment = $objectManager->create('Magento\Sales\Model\Order\Payment'); +$payment->setMethod('checkmo'); + +/** @var $product \Magento\Catalog\Model\Product */ +$product = $objectManager->create('Magento\Catalog\Model\Product'); +$product->load(1); + +/** @var $attribute \Magento\Catalog\Model\ResourceModel\Eav\Attribute */ +$eavConfig = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Eav\Model\Config'); +$attribute = $eavConfig->getAttribute('catalog_product', 'test_configurable'); + +/** @var $options \Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\Collection */ +$options = $objectManager->create('Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\Collection'); +$option = $options->setAttributeFilter($attribute->getId()) + ->getFirstItem(); + +$requestInfo = [ + 'qty' => 1, + 'super_attribute' => [ + $attribute->getId() => $option->getId(), + ], +]; + +/** @var \Magento\Sales\Model\Order\Item $orderItem */ +$orderItem = $objectManager->create('Magento\Sales\Model\Order\Item'); +$orderItem->setProductId($product->getId()); +$orderItem->setQtyOrdered(1); +$orderItem->setBasePrice($product->getPrice()); +$orderItem->setPrice($product->getPrice()); +$orderItem->setRowTotal($product->getPrice()); +$orderItem->setProductType($product->getTypeId()); +$orderItem->setProductOptions(['info_buyRequest' => $requestInfo]); + +/** @var \Magento\Sales\Model\Order $order */ +$order = $objectManager->create('Magento\Sales\Model\Order'); +$order->setIncrementId('100000001'); +$order->setState(\Magento\Sales\Model\Order::STATE_NEW); +$order->setStatus($order->getConfig()->getStateDefaultStatus(\Magento\Sales\Model\Order::STATE_NEW)); +$order->setCustomerIsGuest(true); +$order->setCustomerEmail('customer@null.com'); +$order->setCustomerFirstname('firstname'); +$order->setCustomerLastname('lastname'); +$order->setBillingAddress($billingAddress); +$order->setShippingAddress($shippingAddress); +$order->setAddresses([$billingAddress, $shippingAddress]); +$order->setPayment($payment); +$order->addItem($orderItem); +$order->setStoreId($objectManager->get('Magento\Store\Model\StoreManagerInterface')->getStore()->getId()); +$order->setSubtotal(100); +$order->setBaseSubtotal(100); +$order->setBaseGrandTotal(100); +$order->save(); diff --git a/dev/tests/integration/testsuite/Magento/ConfigurableProduct/_files/order_item_with_configurable_and_options_rollback.php b/dev/tests/integration/testsuite/Magento/ConfigurableProduct/_files/order_item_with_configurable_and_options_rollback.php new file mode 100644 index 0000000000000000000000000000000000000000..bb2003ecfc1e4065f8fffd39b323f3cfbf5414ac --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/ConfigurableProduct/_files/order_item_with_configurable_and_options_rollback.php @@ -0,0 +1,8 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +require __DIR__ . '/product_configurable_rollback.php'; +require __DIR__ . '/../../../Magento/Sales/_files/default_rollback.php'; diff --git a/dev/tests/integration/testsuite/Magento/Downloadable/_files/order_item_with_downloadable_and_options.php b/dev/tests/integration/testsuite/Magento/Downloadable/_files/order_item_with_downloadable_and_options.php new file mode 100644 index 0000000000000000000000000000000000000000..e7919efd48315e714028e3e7fff963d6a7f4f3db --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Downloadable/_files/order_item_with_downloadable_and_options.php @@ -0,0 +1,58 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +require __DIR__ . '/product_downloadable.php'; + +$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); + +$addressData = include __DIR__ . '/../../../Magento/Sales/_files/address_data.php'; + +$billingAddress = $objectManager->create('Magento\Sales\Model\Order\Address', ['data' => $addressData]); +$billingAddress->setAddressType('billing'); + +$shippingAddress = clone $billingAddress; +$shippingAddress->setId(null)->setAddressType('shipping'); + +$payment = $objectManager->create('Magento\Sales\Model\Order\Payment'); +$payment->setMethod('checkmo'); + +/** @var $product \Magento\Catalog\Model\Product */ +$product = $objectManager->create('Magento\Catalog\Model\Product'); +$product->load(1); + +$requestInfo = [ + 'links' => array_keys($product->getDownloadableLinks()), +]; + +/** @var \Magento\Sales\Model\Order\Item $orderItem */ +$orderItem = $objectManager->create('Magento\Sales\Model\Order\Item'); +$orderItem->setProductId($product->getId()); +$orderItem->setQtyOrdered(1); +$orderItem->setBasePrice($product->getPrice()); +$orderItem->setPrice($product->getPrice()); +$orderItem->setRowTotal($product->getPrice()); +$orderItem->setProductType($product->getTypeId()); +$orderItem->setProductOptions(['info_buyRequest' => $requestInfo]); + +/** @var \Magento\Sales\Model\Order $order */ +$order = $objectManager->create('Magento\Sales\Model\Order'); +$order->setIncrementId('100000001'); +$order->setState(\Magento\Sales\Model\Order::STATE_NEW); +$order->setStatus($order->getConfig()->getStateDefaultStatus(\Magento\Sales\Model\Order::STATE_NEW)); +$order->setCustomerIsGuest(true); +$order->setCustomerEmail('customer@null.com'); +$order->setCustomerFirstname('firstname'); +$order->setCustomerLastname('lastname'); +$order->setBillingAddress($billingAddress); +$order->setShippingAddress($shippingAddress); +$order->setAddresses([$billingAddress, $shippingAddress]); +$order->setPayment($payment); +$order->addItem($orderItem); +$order->setStoreId($objectManager->get('Magento\Store\Model\StoreManagerInterface')->getStore()->getId()); +$order->setSubtotal(100); +$order->setBaseSubtotal(100); +$order->setBaseGrandTotal(100); +$order->save(); diff --git a/dev/tests/integration/testsuite/Magento/Downloadable/_files/order_item_with_downloadable_and_options_rollback.php b/dev/tests/integration/testsuite/Magento/Downloadable/_files/order_item_with_downloadable_and_options_rollback.php new file mode 100644 index 0000000000000000000000000000000000000000..3d18328b96d754940a55b9ee9ac25e6b6ed62707 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Downloadable/_files/order_item_with_downloadable_and_options_rollback.php @@ -0,0 +1,8 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +require __DIR__ . '/product_downloadable_rollback.php'; +require __DIR__ . '/../../../Magento/Sales/_files/default_rollback.php'; diff --git a/dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/Db/AbstractTest.php b/dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/Db/AbstractTest.php similarity index 87% rename from dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/Db/AbstractTest.php rename to dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/Db/AbstractTest.php index c772877befa9eb668ca54fb901fbfb0b3e2cde6b..ca8c899be7be3d643aab9d0fb965bba3090c41c3 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/Db/AbstractTest.php +++ b/dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/Db/AbstractTest.php @@ -6,12 +6,12 @@ // @codingStandardsIgnoreFile -namespace Magento\Framework\Model\ModelResource\Db; +namespace Magento\Framework\Model\ResourceModel\Db; class AbstractTest extends \PHPUnit_Framework_TestCase { /** - * @var \Magento\Framework\Model\ModelResource\Db\AbstractDb + * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb */ protected $_model; @@ -19,10 +19,10 @@ class AbstractTest extends \PHPUnit_Framework_TestCase { $resource = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Framework\App\ResourceConnection'); $context = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create( - '\Magento\Framework\Model\ModelResource\Db\Context', + '\Magento\Framework\Model\ResourceModel\Db\Context', ['resource' => $resource] ); - $this->_model = $this->getMockForAbstractClass('Magento\Framework\Model\ModelResource\Db\AbstractDb', + $this->_model = $this->getMockForAbstractClass('Magento\Framework\Model\ResourceModel\Db\AbstractDb', ['context' => $context] ); } @@ -59,11 +59,11 @@ class AbstractTest extends \PHPUnit_Framework_TestCase ['tablePrefix' => 'prefix_'] ); $context = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create( - '\Magento\Framework\Model\ModelResource\Db\Context', + '\Magento\Framework\Model\ResourceModel\Db\Context', ['resource' => $resource] ); - $model = $this->getMockForAbstractClass('Magento\Framework\Model\ModelResource\Db\AbstractDb', + $model = $this->getMockForAbstractClass('Magento\Framework\Model\ResourceModel\Db\AbstractDb', ['context' => $context] ); diff --git a/dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/Db/Collection/AbstractTest.php b/dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/Db/Collection/AbstractTest.php similarity index 87% rename from dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/Db/Collection/AbstractTest.php rename to dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/Db/Collection/AbstractTest.php index 49449b23aa54b9ca74f939f53d56a01dd6ff0c6b..0bdb5fa5e4bd624d0a0628b87e1d3b4f731a52ed 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/Db/Collection/AbstractTest.php +++ b/dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/Db/Collection/AbstractTest.php @@ -3,12 +3,12 @@ * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ -namespace Magento\Framework\Model\ModelResource\Db\Collection; +namespace Magento\Framework\Model\ResourceModel\Db\Collection; class AbstractTest extends \PHPUnit_Framework_TestCase { /** - * @var \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection + * @var \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection */ protected $_model = null; @@ -17,12 +17,12 @@ class AbstractTest extends \PHPUnit_Framework_TestCase $resourceModel = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() ->get('Magento\Framework\App\ResourceConnection'); $context = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create( - '\Magento\Framework\Model\ModelResource\Db\Context', + '\Magento\Framework\Model\ResourceModel\Db\Context', ['resource' => $resourceModel] ); $resource = $this->getMockForAbstractClass( - 'Magento\Framework\Model\ModelResource\Db\AbstractDb', + 'Magento\Framework\Model\ResourceModel\Db\AbstractDb', [$context], '', true, @@ -52,7 +52,7 @@ class AbstractTest extends \PHPUnit_Framework_TestCase $logger = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Psr\Log\LoggerInterface'); $this->_model = $this->getMockForAbstractClass( - 'Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection', + 'Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection', [$entityFactory, $logger, $fetchStrategy, $eventManager, null, $resource] ); } diff --git a/dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/Db/ProfilerTest.php b/dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/Db/ProfilerTest.php similarity index 90% rename from dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/Db/ProfilerTest.php rename to dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/Db/ProfilerTest.php index 98031031fe1402a5ecbcca34816cc3f910b5858d..34b1d0a51b312f1fc48a335ad8c4b5d74f69d356 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/Db/ProfilerTest.php +++ b/dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/Db/ProfilerTest.php @@ -1,11 +1,11 @@ <?php /** - * Test for \Magento\Framework\Model\ModelResource\Db\Profiler + * Test for \Magento\Framework\Model\ResourceModel\Db\Profiler * * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ -namespace Magento\Framework\Model\ModelResource\Db; +namespace Magento\Framework\Model\ResourceModel\Db; use Magento\Framework\Config\ConfigOptionsListConstants; @@ -49,7 +49,7 @@ class ProfilerTest extends \PHPUnit_Framework_TestCase $dbConfig = $reader->getConfigData(ConfigOptionsListConstants::KEY_DB); $connectionConfig = $dbConfig['connection']['default']; $connectionConfig['profiler'] = [ - 'class' => 'Magento\Framework\Model\ModelResource\Db\Profiler', + 'class' => 'Magento\Framework\Model\ResourceModel\Db\Profiler', 'enabled' => 'true', ]; @@ -78,9 +78,9 @@ class ProfilerTest extends \PHPUnit_Framework_TestCase $result->fetchAll(); } - /** @var \Magento\Framework\Model\ModelResource\Db\Profiler $profiler */ + /** @var \Magento\Framework\Model\ResourceModel\Db\Profiler $profiler */ $profiler = $connection->getProfiler(); - $this->assertInstanceOf('Magento\Framework\Model\ModelResource\Db\Profiler', $profiler); + $this->assertInstanceOf('Magento\Framework\Model\ResourceModel\Db\Profiler', $profiler); $queryProfiles = $profiler->getQueryProfiles($queryType); $this->assertCount(1, $queryProfiles); @@ -140,9 +140,9 @@ class ProfilerTest extends \PHPUnit_Framework_TestCase $testTableName = $resource->getTableName('setup_module'); $connection->query('SELECT * FROM ' . $testTableName); - /** @var \Magento\Framework\Model\ModelResource\Db\Profiler $profiler */ + /** @var \Magento\Framework\Model\ResourceModel\Db\Profiler $profiler */ $profiler = $connection->getProfiler(); - $this->assertInstanceOf('Magento\Framework\Model\ModelResource\Db\Profiler', $profiler); + $this->assertInstanceOf('Magento\Framework\Model\ResourceModel\Db\Profiler', $profiler); $queryProfiles = $profiler->getQueryProfiles(\Magento\Framework\DB\Profiler::SELECT); $this->assertCount(2, $queryProfiles); diff --git a/dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/Entity/TableTest.php b/dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/Entity/TableTest.php similarity index 84% rename from dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/Entity/TableTest.php rename to dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/Entity/TableTest.php index 432aa215b12fe8a4255fe9ace78fedff43f4b290..80209e56a038f28cea11c6b647e17f5bbabcf05d 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/Entity/TableTest.php +++ b/dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/Entity/TableTest.php @@ -3,12 +3,12 @@ * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ -namespace Magento\Framework\Model\ModelResource\Entity; +namespace Magento\Framework\Model\ResourceModel\Entity; class TableTest extends \PHPUnit_Framework_TestCase { /** - * @var \Magento\Framework\Model\ModelResource\Entity\Table + * @var \Magento\Framework\Model\ResourceModel\Entity\Table */ protected $_model; @@ -21,7 +21,7 @@ class TableTest extends \PHPUnit_Framework_TestCase // @codingStandardsIgnoreEnd $this->_model = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->create('Magento\Framework\Model\ModelResource\Entity\Table', ['config' => $config]); + ->create('Magento\Framework\Model\ResourceModel\Entity\Table', ['config' => $config]); } public function testGetTable() diff --git a/dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/IteratorTest.php b/dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/IteratorTest.php similarity index 88% rename from dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/IteratorTest.php rename to dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/IteratorTest.php index 930397c73d24fea938227ce6307c647d504534fc..808ce9113056b3b54a09f751036fbefaa62b9639 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/IteratorTest.php +++ b/dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/IteratorTest.php @@ -3,12 +3,12 @@ * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ -namespace Magento\Framework\Model\ModelResource; +namespace Magento\Framework\Model\ResourceModel; class IteratorTest extends \PHPUnit_Framework_TestCase { /** - * @var \Magento\Framework\Model\ModelResource\Iterator + * @var \Magento\Framework\Model\ResourceModel\Iterator */ protected $_model; @@ -22,7 +22,7 @@ class IteratorTest extends \PHPUnit_Framework_TestCase protected function setUp() { $this->_model = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create( - 'Magento\Framework\Model\ModelResource\Iterator' + 'Magento\Framework\Model\ResourceModel\Iterator' ); } diff --git a/dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/Type/Db/ConnectionFactoryTest.php b/dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/Type/Db/ConnectionFactoryTest.php similarity index 94% rename from dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/Type/Db/ConnectionFactoryTest.php rename to dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/Type/Db/ConnectionFactoryTest.php index a23a42f42d4a6c8ebb432dba325457ec1da7a987..84ff6306201d6be927155ed3198d39f9fecceaf8 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/Type/Db/ConnectionFactoryTest.php +++ b/dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/Type/Db/ConnectionFactoryTest.php @@ -3,7 +3,7 @@ * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ -namespace Magento\Framework\Model\ModelResource\Type\Db; +namespace Magento\Framework\Model\ResourceModel\Type\Db; class ConnectionFactoryTest extends \PHPUnit_Framework_TestCase { diff --git a/dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/Type/Db/Pdo/MysqlTest.php b/dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/Type/Db/Pdo/MysqlTest.php similarity index 87% rename from dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/Type/Db/Pdo/MysqlTest.php rename to dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/Type/Db/Pdo/MysqlTest.php index 871c85d9faf5c2cdd4c34e807965551801592386..f57497cd8e906be9002c627b2014c2c2bc0d599f 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/Model/ModelResource/Type/Db/Pdo/MysqlTest.php +++ b/dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/Type/Db/Pdo/MysqlTest.php @@ -4,7 +4,7 @@ * See COPYING.txt for license details. */ -namespace Magento\Framework\Model\ModelResource\Type\Db\Pdo; +namespace Magento\Framework\Model\ResourceModel\Type\Db\Pdo; class MysqlTest extends \PHPUnit_Framework_TestCase { @@ -23,9 +23,9 @@ class MysqlTest extends \PHPUnit_Framework_TestCase 'dbname' => $db->getSchema(), 'active' => true, ]; - /** @var \Magento\Framework\Model\ModelResource\Type\Db\Pdo\Mysql $object */ + /** @var \Magento\Framework\Model\ResourceModel\Type\Db\Pdo\Mysql $object */ $object = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create( - 'Magento\Framework\Model\ModelResource\Type\Db\Pdo\Mysql', + 'Magento\Framework\Model\ResourceModel\Type\Db\Pdo\Mysql', ['config' => $config] ); diff --git a/dev/tests/integration/testsuite/Magento/Framework/Model/ResourceTest.php b/dev/tests/integration/testsuite/Magento/Framework/Model/ResourceTest.php index 666627931acc80c31e68700f13a0a81ac2493b43..961fc60985a5d75572237f08304144e89a3c38d8 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/Model/ResourceTest.php +++ b/dev/tests/integration/testsuite/Magento/Framework/Model/ResourceTest.php @@ -1,6 +1,6 @@ <?php /** - * Test for \Magento\Framework\Model\ModelResource + * Test for \Magento\Framework\Model\ResourceModel * * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. @@ -51,7 +51,7 @@ class ResourceTest extends \PHPUnit_Framework_TestCase [ 'config' => [ 'profiler' => [ - 'class' => 'Magento\Framework\Model\ModelResource\Db\Profiler', + 'class' => 'Magento\Framework\Model\ResourceModel\Db\Profiler', 'enabled' => 'true', ], 'username' => 'username', @@ -63,10 +63,10 @@ class ResourceTest extends \PHPUnit_Framework_TestCase ] ); - /** @var \Magento\Framework\Model\ModelResource\Db\Profiler $profiler */ + /** @var \Magento\Framework\Model\ResourceModel\Db\Profiler $profiler */ $profiler = $connection->getProfiler(); - $this->assertInstanceOf('Magento\Framework\Model\ModelResource\Db\Profiler', $profiler); + $this->assertInstanceOf('Magento\Framework\Model\ResourceModel\Db\Profiler', $profiler); $this->assertTrue($profiler->getEnabled()); } } diff --git a/dev/tests/integration/testsuite/Magento/Paypal/Controller/ExpressTest.php b/dev/tests/integration/testsuite/Magento/Paypal/Controller/ExpressTest.php index 59b3cca4eaa66375c6fdf35ddbb71c8e8d29f739..5320205fdbbff3345ef124690f6a13846c7f504a 100644 --- a/dev/tests/integration/testsuite/Magento/Paypal/Controller/ExpressTest.php +++ b/dev/tests/integration/testsuite/Magento/Paypal/Controller/ExpressTest.php @@ -51,7 +51,7 @@ class ExpressTest extends \Magento\TestFramework\TestCase\AbstractController $order->getQuoteId() ); /** @var $paypalSession \Magento\Framework\Session\Generic */ - $paypalSession = $this->_objectManager->get('Magento\Framework\Session\Generic'); + $paypalSession = $this->_objectManager->get('Magento\Paypal\Model\Session'); $paypalSession->setExpressCheckoutToken('token'); $this->dispatch('paypal/express/cancel'); diff --git a/dev/tests/integration/testsuite/Magento/Sales/Model/Observer/CleanExpiredOrdersTest.php b/dev/tests/integration/testsuite/Magento/Sales/Model/CronJob/CleanExpiredOrdersTest.php similarity index 91% rename from dev/tests/integration/testsuite/Magento/Sales/Model/Observer/CleanExpiredOrdersTest.php rename to dev/tests/integration/testsuite/Magento/Sales/Model/CronJob/CleanExpiredOrdersTest.php index c175e6a19cb09dd843116e136a006af9bcfa43a0..8923e3d31eb1ac6e7865e630d7dc67f20c48e3c7 100644 --- a/dev/tests/integration/testsuite/Magento/Sales/Model/Observer/CleanExpiredOrdersTest.php +++ b/dev/tests/integration/testsuite/Magento/Sales/Model/CronJob/CleanExpiredOrdersTest.php @@ -3,7 +3,7 @@ * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ -namespace Magento\Sales\Model\Observer; +namespace Magento\Sales\Model\CronJob; use Magento\TestFramework\Helper\Bootstrap; use \Magento\Sales\Model\Order; @@ -18,7 +18,7 @@ class CleanExpiredOrdersTest extends \PHPUnit_Framework_TestCase public function testExecute() { /** @var CleanExpiredOrders $job */ - $job = Bootstrap::getObjectManager()->create('Magento\Sales\Model\Observer\CleanExpiredOrders'); + $job = Bootstrap::getObjectManager()->create('Magento\Sales\Model\CronJob\CleanExpiredOrders'); $job->execute(); /** @var Order $order */ diff --git a/dev/tests/integration/testsuite/Magento/Sales/Model/Observer/Backend/CustomerQuoteTest.php b/dev/tests/integration/testsuite/Magento/Sales/Observer/Backend/CustomerQuoteTest.php similarity index 84% rename from dev/tests/integration/testsuite/Magento/Sales/Model/Observer/Backend/CustomerQuoteTest.php rename to dev/tests/integration/testsuite/Magento/Sales/Observer/Backend/CustomerQuoteTest.php index a0ea4bf40f7d17fe77f8c1f500f297a0f678c383..bbe7730b002620a44166d8c17bea36bfde937d59 100644 --- a/dev/tests/integration/testsuite/Magento/Sales/Model/Observer/Backend/CustomerQuoteTest.php +++ b/dev/tests/integration/testsuite/Magento/Sales/Observer/Backend/CustomerQuoteTest.php @@ -3,8 +3,12 @@ * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ -namespace Magento\Sales\Model\Observer\Backend; +namespace Magento\Sales\Observer\Backend; +use Magento\Customer\Api\CustomerRepositoryInterface; +use Magento\Customer\Api\Data\CustomerInterface; +use Magento\Customer\Model\CustomerRegistry; +use Magento\Quote\Model\Quote; use Magento\TestFramework\Helper\Bootstrap; /** @@ -20,14 +24,14 @@ class CustomerQuoteTest extends \PHPUnit_Framework_TestCase */ public function testCustomerSaveQuoteObserver() { - /** @var \Magento\Customer\Api\Data\CustomerInterface $customer */ - /** @var \Magento\Customer\Api\CustomerRepositoryInterface $repository */ + /** @var CustomerInterface $customer */ + /** @var CustomerRepositoryInterface $repository */ $repository = Bootstrap::getObjectManager()->create('Magento\Customer\Api\CustomerRepositoryInterface'); - /** @var \Magento\Customer\Model\CustomerRegistry $registry */ + /** @var CustomerRegistry $registry */ $registry = Bootstrap::getObjectManager()->create('Magento\Customer\Model\CustomerRegistry'); $customer = $repository->getById($registry->retrieveByEmail('customer@example.com')->getId()); - /** @var \Magento\Quote\Model\Quote $quote */ + /** @var Quote $quote */ $quote = Bootstrap::getObjectManager()->create('Magento\Quote\Model\Quote'); $quote->load('test01', 'reserved_order_id'); $quote->setCustomerIsGuest(false)->setCustomerId($customer->getId()) diff --git a/dev/tests/integration/testsuite/Magento/Store/App/Request/PathInfoProcessorTest.php b/dev/tests/integration/testsuite/Magento/Store/App/Request/PathInfoProcessorTest.php new file mode 100644 index 0000000000000000000000000000000000000000..8470436c8bd3e75a78306af4cd2897c0705ddeac --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Store/App/Request/PathInfoProcessorTest.php @@ -0,0 +1,106 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Store\App\Request; + +use \Magento\TestFramework\Helper\Bootstrap; +use \Magento\Store\Model\ScopeInterface; +use \Magento\Store\Model\Store; + +class PathInfoProcessorTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var \Magento\Store\App\Request\PathInfoProcessor + */ + protected $pathProcessor; + + protected function setUp() + { + $this->pathProcessor = Bootstrap::getObjectManager()->create('Magento\Store\App\Request\PathInfoProcessor'); + } + + /** + * @covers \Magento\Store\App\Request\PathInfoProcessor::process + * @dataProvider notValidStoreCodeDataProvider + */ + public function testProcessNotValidStoreCode($pathInfo) + { + /** @var \Magento\Framework\App\RequestInterface $request */ + $request = Bootstrap::getObjectManager()->create('Magento\Framework\App\RequestInterface'); + $this->assertEquals($pathInfo, $this->pathProcessor->process($request, $pathInfo)); + } + + public function notValidStoreCodeDataProvider() + { + return [ + ['not_valid_store_code_int' => '/100500/m/c/a'], + ['not_valid_store_code_str' => '/test_string/m/c/a'], + ]; + } + + /** + * @covers \Magento\Store\App\Request\PathInfoProcessor::process + * @magentoDataFixture Magento/Store/_files/core_fixturestore.php + */ + public function testProcessValidStoreCodeCase1() + { + /** @var \Magento\Store\Model\Store $store */ + $store = Bootstrap::getObjectManager()->get('Magento\Store\Model\Store'); + $store->load('fixturestore', 'code'); + + /** @var \Magento\Framework\App\RequestInterface $request */ + $request = Bootstrap::getObjectManager()->create('Magento\Framework\App\RequestInterface'); + + /** @var \Magento\Framework\App\Config\ReinitableConfigInterface $config */ + $config = Bootstrap::getObjectManager()->get('\Magento\Framework\App\Config\ReinitableConfigInterface'); + $config->setValue(Store::XML_PATH_STORE_IN_URL, false, ScopeInterface::SCOPE_STORE, $store->getCode()); + $pathInfo = sprintf('/%s/m/c/a', $store->getCode()); + $this->assertEquals($pathInfo, $this->pathProcessor->process($request, $pathInfo)); + } + + /** + * @covers \Magento\Store\App\Request\PathInfoProcessor::process + * @magentoDataFixture Magento/Store/_files/core_fixturestore.php + */ + public function testProcessValidStoreCodeCase2() + { + /** @var \Magento\Store\Model\Store $store */ + $store = Bootstrap::getObjectManager()->get('Magento\Store\Model\Store'); + $store->load('fixturestore', 'code'); + + /** @var \Magento\Framework\App\RequestInterface $request */ + $request = Bootstrap::getObjectManager()->create('Magento\Framework\App\RequestInterface'); + + /** @var \Magento\Framework\App\Config\ReinitableConfigInterface $config */ + $config = Bootstrap::getObjectManager()->get('\Magento\Framework\App\Config\ReinitableConfigInterface'); + $config->setValue(Store::XML_PATH_STORE_IN_URL, true, ScopeInterface::SCOPE_STORE, $store->getCode()); + $pathInfo = sprintf('/%s/m/c/a', $store->getCode()); + $this->assertEquals('/m/c/a', $this->pathProcessor->process($request, $pathInfo)); + } + + /** + * @covers \Magento\Store\App\Request\PathInfoProcessor::process + * @magentoDataFixture Magento/Store/_files/core_fixturestore.php + */ + public function testProcessValidStoreCodeCase3() + { + /** @var \Magento\Store\Model\Store $store */ + $store = Bootstrap::getObjectManager()->get('Magento\Store\Model\Store'); + $store->load('fixturestore', 'code'); + + /** @var \Magento\Framework\App\RequestInterface $request */ + $request = Bootstrap::getObjectManager()->create( + 'Magento\Framework\App\RequestInterface', + ['directFrontNames' => [$store->getCode() => true]] + ); + + /** @var \Magento\Framework\App\Config\ReinitableConfigInterface $config */ + $config = Bootstrap::getObjectManager()->get('\Magento\Framework\App\Config\ReinitableConfigInterface'); + $config->setValue(Store::XML_PATH_STORE_IN_URL, true, ScopeInterface::SCOPE_STORE, $store->getCode()); + $pathInfo = sprintf('/%s/m/c/a', $store->getCode()); + $this->assertEquals($pathInfo, $this->pathProcessor->process($request, $pathInfo)); + $this->assertEquals('noroute', $request->getActionName()); + } +} diff --git a/dev/tests/integration/testsuite/Magento/Store/Model/ResourceModel/Store/CollectionTest.php b/dev/tests/integration/testsuite/Magento/Store/Model/ResourceModel/Store/CollectionTest.php index daf46fa185e6edf2146826d29f6fa7430fd35ae4..a7ccac4bbaf0e251d87ab9d297c4892bd0542681 100644 --- a/dev/tests/integration/testsuite/Magento/Store/Model/ResourceModel/Store/CollectionTest.php +++ b/dev/tests/integration/testsuite/Magento/Store/Model/ResourceModel/Store/CollectionTest.php @@ -88,8 +88,8 @@ class CollectionTest extends \PHPUnit_Framework_TestCase } /** - * @covers \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection::addFieldToSelect - * @covers \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection::removeFieldFromSelect + * @covers \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection::addFieldToSelect + * @covers \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection::removeFieldFromSelect */ public function testAddRemoveFieldToSelect() { @@ -108,7 +108,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase } /** - * @covers \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection::addExpressionFieldToSelect + * @covers \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection::addExpressionFieldToSelect */ public function testAddExpressionFieldToSelect() { @@ -118,7 +118,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase } /** - * @covers \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection::getAllIds + * @covers \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection::getAllIds */ public function testGetAllIds() { @@ -126,7 +126,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase } /** - * @covers \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection::getData + * @covers \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection::getData */ public function testGetData() { @@ -134,7 +134,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase } /** - * @covers \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection::join + * @covers \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection::join */ public function testJoin() { diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/AclConfigFilesTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/AclConfigFilesTest.php index 7863c4201bd73d77dc7ab1ff4bbc1eb3cefb2c12..c998094fc963a3b525515d662743fbea282d8e82 100644 --- a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/AclConfigFilesTest.php +++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/AclConfigFilesTest.php @@ -5,7 +5,6 @@ */ namespace Magento\Test\Integrity\Modular; -use Magento\Framework\App\Filesystem\DirectoryList; class AclConfigFilesTest extends \PHPUnit_Framework_TestCase { diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/DiConfigFilesTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/DiConfigFilesTest.php index 79b69588428780b553ff4bc8513e573aacc7bc81..42b6a74d7e06d84479dcb2fc13326905dedaf2c1 100644 --- a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/DiConfigFilesTest.php +++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/DiConfigFilesTest.php @@ -92,7 +92,7 @@ class DiConfigFilesTest extends \PHPUnit_Framework_TestCase $output = []; foreach ($common as $path => $file) { - $output[$path] = [$file]; + $output[substr($path, strlen(BP))] = [$file]; } return $output; diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/IndexerConfigFilesTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/IndexerConfigFilesTest.php index 5a330a83dbe836640ece9461625fc7b04f26792e..f12917f9c456deeea853cda63ec8005182bec8ee 100644 --- a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/IndexerConfigFilesTest.php +++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/IndexerConfigFilesTest.php @@ -5,7 +5,6 @@ */ namespace Magento\Test\Integrity\Modular; -use Magento\Framework\App\Filesystem\DirectoryList; use Magento\Framework\Filesystem; class IndexerConfigFilesTest extends \PHPUnit_Framework_TestCase @@ -51,13 +50,6 @@ class IndexerConfigFilesTest extends \PHPUnit_Framework_TestCase */ public function indexerConfigFileDataProvider() { - /** @var Filesystem $filesystem */ - $utilityFiles = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get('\Magento\Framework\App\Utility\Files'); - - $utilityFiles->getConfigFiles('indexer.xml'); - - $dataProviderResult = $utilityFiles->getConfigFiles('indexer.xml'); - return $dataProviderResult; + return \Magento\Framework\App\Utility\Files::init()->getConfigFiles('indexer.xml'); } } diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/Theme/XmlFilesTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/Theme/XmlFilesTest.php index ca81ea4973a098eadb1bc87d8bbcb0eca2fa70e1..95a9bb0d8cb7babcddd36aa3413363ee761ac021 100644 --- a/dev/tests/integration/testsuite/Magento/Test/Integrity/Theme/XmlFilesTest.php +++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/Theme/XmlFilesTest.php @@ -36,7 +36,7 @@ class XmlFilesTest extends \PHPUnit_Framework_TestCase ->get('Magento\Framework\Component\DirSearch'); $files = $componentDirSearch->collectFiles(ComponentRegistrar::THEME, 'etc/view.xml'); foreach ($files as $file) { - $result[$file] = [$file]; + $result[substr($file, strlen(BP))] = [$file]; } return $result; } @@ -60,7 +60,7 @@ class XmlFilesTest extends \PHPUnit_Framework_TestCase $componentRegistrar = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() ->get('\Magento\Framework\Component\ComponentRegistrar'); foreach ($componentRegistrar->getPaths(ComponentRegistrar::THEME) as $themeDir) { - $result[$themeDir] = [$themeDir]; + $result[substr($themeDir, strlen(BP))] = [$themeDir]; } return $result; } @@ -102,7 +102,7 @@ class XmlFilesTest extends \PHPUnit_Framework_TestCase ->get('Magento\Framework\Component\DirSearch'); $files = $componentDirSearch->collectFiles(ComponentRegistrar::THEME, 'theme.xml'); foreach ($files as $file) { - $result[$file] = [$file]; + $result[substr($file, strlen(BP))] = [$file]; } return $result; } diff --git a/dev/tests/integration/testsuite/Magento/User/Model/UserTest.php b/dev/tests/integration/testsuite/Magento/User/Model/UserTest.php index a4ce584c44b377cc929ba47f4a2ca9acf4caba92..854a38cd66016e52b973ebce23845471e3392a66 100644 --- a/dev/tests/integration/testsuite/Magento/User/Model/UserTest.php +++ b/dev/tests/integration/testsuite/Magento/User/Model/UserTest.php @@ -166,7 +166,7 @@ class UserTest extends \PHPUnit_Framework_TestCase public function testGetCollection() { - $this->assertInstanceOf('Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection', + $this->assertInstanceOf('Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection', $this->_model->getCollection()); } diff --git a/dev/tests/js/JsTestDriver/jsTestDriverOrder.php b/dev/tests/js/JsTestDriver/jsTestDriverOrder.php index b12aef10f57a3c4eea9993b1fa2092e7c5848e56..6314b1dbd16f5bda8d499c7b4e2a02b2fd85ccbe 100644 --- a/dev/tests/js/JsTestDriver/jsTestDriverOrder.php +++ b/dev/tests/js/JsTestDriver/jsTestDriverOrder.php @@ -21,6 +21,5 @@ return [ '/lib/web/mage/decorate.js', '/lib/web/jquery/jquery.validate.js', '/lib/web/jquery/jquery.metadata.js', - '/lib/web/mage/translate.js', - '/lib/web/mage/requirejs/plugin/id-normalizer.js', + '/lib/web/mage/translate.js' ]; diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/requirejs/plugin/id-normalizer-test.js b/dev/tests/js/JsTestDriver/testsuite/mage/requirejs/plugin/id-normalizer-test.js deleted file mode 100644 index a52466bda124dec6a16b15e2ba7df362abf90408..0000000000000000000000000000000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/requirejs/plugin/id-normalizer-test.js +++ /dev/null @@ -1,42 +0,0 @@ -/** - * Copyright © 2015 Magento. All rights reserved. - * See COPYING.txt for license details. - */ -/*jshint globalstrict: true*/ - -"use strict"; - -/*jshint undef: false, newcap: false*/ -var IdNormalizerTest = TestCase('IdNormalizerTest'); - -IdNormalizerTest.prototype.setUp = function() { - var defineArgs = jsunit.requirejsUtil.getDefineArgsInScript('lib/web/mage/requirejs/plugin/id-normalizer.js'); - assertNotUndefined('There expected to be a define() call', defineArgs); - assertEquals('Wrong number of arguments in the define() call', 1, defineArgs.length); - - this.normalizer = defineArgs[0]; - assertObject(this.normalizer); - assertFunction(this.normalizer.normalize); - assertFunction(this.normalizer.load); -}; - -IdNormalizerTest.prototype.testNormalize = function () { - var actual = this.normalizer.normalize('Magento_Catalog::foo/bar.js'); - assertEquals('Magento_Catalog/foo/bar.js', actual); -}; - -IdNormalizerTest.prototype.testLoad = function () { - // Check that load() is just a proxy - var modulePassed, onloadPassed; - var parentRequire = function (moduleIn, onloadIn) { - modulePassed = moduleIn; - onloadPassed = onloadIn; - }; - var onload = function (){}; - - this.normalizer.load('module', parentRequire, onload); - - assertEquals('module', modulePassed); - assertSame(onload, onloadPassed); -}; - diff --git a/dev/tests/js/jasmine/assets/gallery/config.json b/dev/tests/js/jasmine/assets/gallery/config.json index b3c8b8bc0b38dd3e1669cb933ee8e6812ac1157e..d1d8e94d7f220a0b83321acaeebea6aaa86f9929 100644 --- a/dev/tests/js/jasmine/assets/gallery/config.json +++ b/dev/tests/js/jasmine/assets/gallery/config.json @@ -59,12 +59,17 @@ "arrows": "false", "thumbwidth": "90", "thumbheight": "90", - "ratio": "1" + "ratio": "1", + "allowfullscreen": true + }, + "fullscreen": { + "nav": false }, "breakpoints": { "alias": { "conditions": { - "min-width": "0px" + "min-width": "0px", + "max-width": "1px" }, "options": { "options": { diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/core/layout.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/core/layout.test.js index a39203675c280520e4f5d457537697bca38e7c9a..f2edf7f7065c3efda6c93cd7b903e7fbfabcb3c5 100644 --- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/core/layout.test.js +++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/core/layout.test.js @@ -4,7 +4,7 @@ */ define([ 'underscore', - 'Magento_Ui/js/core/renderer/layout' + 'uiLayout' ], function (_, layout) { 'use strict'; diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/columns/column.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/columns/column.test.js index ce954310178c078b18b213f4c5415e82556b8f2e..3d1e7dcfe0dbe416b13b13bdc796fa5ba99b6290 100644 --- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/columns/column.test.js +++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/columns/column.test.js @@ -24,17 +24,17 @@ define([ describe('sort method', function () { it('apply sorting first time', function () { column.sort(true); - expect(column.sorting()).toBe('asc'); + expect(column.sorting).toBe('asc'); }); it('apply sorting in other direction', function () { column.sort(true).sort(true); - expect(column.sorting()).toBe('desc'); + expect(column.sorting).toBe('desc'); }); it('remove sorting', function () { column.sort(false); - expect(column.sorting()).toBeFalsy(); + expect(column.sorting).toBeFalsy(); }); }); diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/filters/group.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/filters/range.test.js similarity index 95% rename from dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/filters/group.test.js rename to dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/filters/range.test.js index 59e46e213d7c783c7332fe9a408da5e42c49419c..29267c110c52e82574e35789775526fa251bd918 100644 --- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/filters/group.test.js +++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/filters/range.test.js @@ -5,11 +5,11 @@ define([ 'underscore', - 'Magento_Ui/js/grid/filters/group' + 'Magento_Ui/js/grid/filters/range' ], function (_, Group) { 'use strict'; - describe('ui/js/grid/filters/filters', function () { + describe('ui/js/grid/filters/range', function () { var group; beforeEach(function () { diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/paging/paging.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/paging/paging.test.js index 43df680002775664e8cdc4bcd344368ca253f63f..ef72deab470d0456fc9019d2b68b533d049c5132 100644 --- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/paging/paging.test.js +++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/paging/paging.test.js @@ -17,7 +17,7 @@ define([ paging = new Paging({ pageSize: 2 }); - paging.totalRecords(7); + paging.totalRecords = 7; }); describe('Normalize method', function () { @@ -42,73 +42,73 @@ define([ describe('countPages method', function () { it('correct number of pages', function () { paging.countPages(); - expect(paging.pages()).toBe(4); + expect(paging.pages).toBe(4); }); it('if no records', function () { - paging.totalRecords(0); + paging.totalRecords = 0; paging.countPages(); - expect(paging.pages()).toBe(1); + expect(paging.pages).toBe(1); }); }); describe('page manipualations', function () { it('setPage method', function () { paging.setPage(2); - expect(paging.current()).toBe(2); + expect(paging.current).toBe(2); }); it('next', function () { - paging.current(1); + paging.current = 1; paging.next(); - expect(paging.current()).toBe(2); + expect(paging.current).toBe(2); }); it('next out of boundary', function () { - paging.current(4); + paging.current = 4; paging.next(); - expect(paging.current()).toBe(4); + expect(paging.current).toBe(4); }); it('prev', function () { - paging.current(4); + paging.current = 4; paging.prev(); - expect(paging.current()).toBe(3); + expect(paging.current).toBe(3); }); it('prev out of boundary', function () { - paging.current(1); + paging.current = 1; paging.prev(); - expect(paging.current()).toBe(1); + expect(paging.current).toBe(1); }); it('goFirst', function () { paging.goFirst(); - expect(paging.current()).toBe(1); + expect(paging.current).toBe(1); }); it('goLast', function () { paging.goLast(); - expect(paging.current()).toBe(4); + expect(paging.current).toBe(4); }); it('isFirst for 1st page', function () { - paging.current(1); + paging.current = 1; expect(paging.isFirst()).toBeTruthy(); }); it('isFirst for 2nd page', function () { - paging.current(2); + paging.current = 2; expect(paging.isFirst()).toBeFalsy(); }); it('isLast for last page', function () { - paging.current(4); + paging.current = 4; expect(paging.isLast()).toBeTruthy(); }); it('isLast for first page', function () { - paging.current(1); + paging.current = 1; expect(paging.isLast()).toBeFalsy(); }); }); @@ -116,22 +116,22 @@ define([ describe('countPages method', function () { it('correct number of pages', function () { paging.countPages(); - expect(paging.pages()).toBe(4); + expect(paging.pages).toBe(4); }); it('if no records', function () { - paging.totalRecords(0); + paging.totalRecords = 0; paging.countPages(); - expect(paging.pages()).toBe(1); + expect(paging.pages).toBe(1); }); }); describe('onPagesChange method', function () { it('pages amount became less than current', function () { - paging.current(4); - expect(paging.current()).toBe(4); + paging.current = 4; + expect(paging.current).toBe(4); paging.onPagesChange(2); - expect(paging.current()).toBe(2); + expect(paging.current).toBe(2); }); }); @@ -141,7 +141,7 @@ define([ }); it('read from _current', function () { - paging.current(2); + paging.current = 2; expect(paging._current()).toBe(2); }); @@ -149,7 +149,7 @@ define([ spyOn(paging, 'normalize').and.callThrough(); spyOn(paging._current, 'notifySubscribers'); paging._current(4); - expect(paging.current()).toBe(4); + expect(paging.current).toBe(4); expect(paging._current.notifySubscribers).toHaveBeenCalledWith(4); }); }); diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/component/links.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/component/links.test.js index 04b7f0ebe5a7ed09b3b422ccaa2f2cd1349171df..90e17a46a65e1af4be488992e1d788f28b362301 100644 --- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/component/links.test.js +++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/component/links.test.js @@ -3,11 +3,11 @@ * See COPYING.txt for license details. */ define([ - 'Magento_Ui/js/lib/component/links' + 'Magento_Ui/js/lib/core/element/links' ], function (links) { 'use strict'; - describe('Magento_Ui/js/lib/component/links', function () { + describe('Magento_Ui/js/lib/core/element/links', function () { var linksObj, returnedValue; diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/events.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/events.test.js index bc2f08748f45e25f476cd2b0494f988b9f2bf41f..4ae9b2121426e0f82c9bc785a455064ccaadd976 100644 --- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/events.test.js +++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/events.test.js @@ -4,13 +4,13 @@ */ define([ - 'Magento_Ui/js/lib/events' + 'Magento_Ui/js/lib/core/events' ], function (EventBus) { 'use strict'; var EVENT = 'testEvent'; - describe('Magento_Ui/js/lib/events', function () { + describe('Magento_Ui/js/lib/core/events', function () { describe('"on" method', function () { afterEach(function () { EventBus.off(EVENT); diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/registry/registry.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/registry/registry.test.js index 196bdd121dcf32495dbe471af8087bb4349969f7..ac02100dffa90c995e1a10a000576c52c2b165e8 100644 --- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/registry/registry.test.js +++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/registry/registry.test.js @@ -6,7 +6,7 @@ /*eslint max-nested-callbacks: 0*/ define([ - 'Magento_Ui/js/lib/registry/registry' + 'uiRegistry' ], function (registry) { 'use strict'; diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/alert.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/alert.test.js new file mode 100644 index 0000000000000000000000000000000000000000..548d093942f5833332661788add865065f5acd40 --- /dev/null +++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/alert.test.js @@ -0,0 +1,27 @@ +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +define([ + 'jquery', + 'Magento_Ui/js/modal/alert' +], function ($) { + 'use strict'; + + describe('ui/js/modal/alert', function () { + var element = $('<div>some element</div>'), + alert = element.alert({}); + + it('Check for modal definition', function () { + expect(alert).toBeDefined(); + }); + it('Show/hide function check', function () { + expect(element.trigger('openModal')).toBe(element); + expect(element.trigger('closeModal')).toBe(element); + }); + it('Integration: modal created on page', function () { + expect(alert.length).toEqual(1); + }); + }); +}); diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/confirm.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/confirm.test.js new file mode 100644 index 0000000000000000000000000000000000000000..922a14f54f924827829a2f1a77c65053b2da5795 --- /dev/null +++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/confirm.test.js @@ -0,0 +1,27 @@ +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +define([ + 'jquery', + 'Magento_Ui/js/modal/confirm' +], function ($) { + 'use strict'; + + describe('ui/js/modal/confirm', function () { + var element = $('<div>some element</div>'), + confirm = element.confirm({}); + + it('Check for modal definition', function () { + expect(confirm).toBeDefined(); + }); + it('Show/hide function check', function () { + expect(element.trigger('openModal')).toBe(element); + expect(element.trigger('closeModal')).toBe(element); + }); + it('Integration: modal created on page', function () { + expect(confirm.length).toEqual(1); + }); + }); +}); diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/modal.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/modal.test.js index 2b1496d56e270fc471db20303cbea7582f748550..a8f4a13979d06a6ffdc5ebd05425a61cb5762c0a 100644 --- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/modal.test.js +++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/modal.test.js @@ -17,8 +17,11 @@ define([ expect(modal).toBeDefined(); }); it('Show/hide function check', function () { - expect(element.trigger('openDialog')).toBe(element); - expect(element.trigger('closeDialog')).toBe(element); + expect(element.trigger('openModal')).toBe(element); + expect(element.trigger('closeModal')).toBe(element); + }); + it('Integration: modal created on page', function () { + expect($(modal).length).toEqual(1); }); }); }); diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/prompt.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/prompt.test.js new file mode 100644 index 0000000000000000000000000000000000000000..1d61f4c7354049cad1e61c73093ddfd90cce7eb8 --- /dev/null +++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/prompt.test.js @@ -0,0 +1,27 @@ +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +define([ + 'jquery', + 'Magento_Ui/js/modal/prompt' +], function ($) { + 'use strict'; + + describe('ui/js/modal/prompt', function () { + var element = $('<div>some element</div>'), + prompt = element.prompt({}); + + it('Check for modal definition', function () { + expect(prompt).toBeDefined(); + }); + it('Show/hide function check', function () { + expect(element.trigger('openModal')).toBe(element); + expect(element.trigger('closeModal')).toBe(element); + }); + it('Integration: modal created on page', function () { + expect(prompt.length).toEqual(1); + }); + }); +}); diff --git a/dev/tests/js/jasmine/tests/lib/mage/gallery.test.js b/dev/tests/js/jasmine/tests/lib/mage/gallery.test.js index f198fee51b045e6a270758eda15d49e788531b3d..ffcd3abf327c80f299700a1a75b11a3b3abffad6 100644 --- a/dev/tests/js/jasmine/tests/lib/mage/gallery.test.js +++ b/dev/tests/js/jasmine/tests/lib/mage/gallery.test.js @@ -19,6 +19,7 @@ define([ stageSelector = '[data-gallery-role="stage-shaft"]', navSelector = '[data-gallery-role="nav-frame"]', dotSelector = '[data-nav-type="dot"]', + navWrap = '[data-gallery-role="nav-wrap"]', dataToUpdate = [ { img: 'data:image/png;base64,' + @@ -33,7 +34,16 @@ define([ img: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAw' + 'CAAAAC0lEQVR42mP4Xw8AAoABf5/NhYYAAAAASUVORK5CYII=' } - ]; + ], + waitsFor = function (test, fn) { + if (test()) { + fn(); + } else { + setTimeout(function () { + waitsFor(test, fn); + }, 10); + } + }; gallery(magnifier(conf, body), body); @@ -115,5 +125,30 @@ define([ it('breakpoints override configs', function () { expect($('.fotorama__arr').css('display')).toBe('block'); }); + + it('fullscreen enter', function (done) { + expect($(navWrap).css('display') === 'block').toBeTruthy(); + galleryAPI.fotorama.requestFullScreen(); + + waitsFor(function () { + return $(navWrap).css('display') !== 'block'; + }, function () { + expect($(navWrap).css('display') === 'none').toBeTruthy(); + done(); + }); + }); + + it('fullscreen exit', function (done) { + expect($(navWrap).css('display') === 'none').toBeTruthy(); + galleryAPI.fotorama.cancelFullScreen(); + + waitsFor(function () { + return $(navWrap).css('display') !== 'none'; + }, function () { + expect($(navWrap).css('display') === 'block').toBeTruthy(); + done(); + }); + }); + }); }); diff --git a/dev/tests/static/framework/Magento/Sniffs/NamingConventions/ReservedWordsSniff.php b/dev/tests/static/framework/Magento/Sniffs/NamingConventions/ReservedWordsSniff.php index 734170053c93281732ecc05ab5c389ed12ffa7ab..e33309f46d88f44200092017f489f76005ecde26 100644 --- a/dev/tests/static/framework/Magento/Sniffs/NamingConventions/ReservedWordsSniff.php +++ b/dev/tests/static/framework/Magento/Sniffs/NamingConventions/ReservedWordsSniff.php @@ -12,7 +12,6 @@ class ReservedWordsSniff implements PHP_CodeSniffer_Sniff { /** * source: http://php.net/manual/en/reserved.other-reserved-words.php - * disabled(commented) items are not restricted int PHP 7 beta 3, just declared as prohibited * * @var array PHP 7 reserved words for name spaces */ diff --git a/dev/tests/static/testsuite/Magento/Test/Integrity/ObserverImplementationTest.php b/dev/tests/static/testsuite/Magento/Test/Integrity/ObserverImplementationTest.php index ebc9a96b5cc6d1a9d838a982f5ace696935f1072..008cb2e5ad83ec4f8dc0b19e04b143cfcea07ed7 100644 --- a/dev/tests/static/testsuite/Magento/Test/Integrity/ObserverImplementationTest.php +++ b/dev/tests/static/testsuite/Magento/Test/Integrity/ObserverImplementationTest.php @@ -27,10 +27,10 @@ class ObserverImplementationTest extends \PHPUnit_Framework_TestCase */ protected static $blackList = [ // not support of virtual types - 'SalesOrderIndexGridAsyncInsert', - 'SalesInvoiceIndexGridAsyncInsert', - 'SalesShipmentIndexGridAsyncInsert', - 'SalesCreditmemoIndexGridAsyncInsert', + 'SalesOrderIndexGridAsyncInsertObserver', + 'SalesInvoiceIndexGridAsyncInsertObserver', + 'SalesShipmentIndexGridAsyncInsertObserver', + 'SalesCreditmemoIndexGridAsyncInsertObserver', 'SalesOrderIndexGridSyncInsert', 'SalesInvoiceIndexGridSyncInsert', 'SalesShipmentIndexGridSyncInsert', @@ -39,25 +39,10 @@ class ObserverImplementationTest extends \PHPUnit_Framework_TestCase 'SalesInvoiceIndexGridSyncRemove', 'SalesShipmentIndexGridSyncRemove', 'SalesCreditmemoIndexGridSyncRemove', - 'Magento\Sales\Model\Observer\Order\SendEmails', - 'Magento\Sales\Model\Observer\Order\Invoice\SendEmails', - 'Magento\Sales\Model\Observer\Order\Shipment\SendEmails', - 'Magento\Sales\Model\Observer\Order\Creditmemo\SendEmails', - 'Magento\Sales\Model\Observer\AggregateSalesReportShipmentData', - 'Magento\SalesRule\Model\Observer', - 'Magento\Sales\Model\Observer\Backend\CatalogProductQuote', - 'Magento\Sales\Model\Observer\CleanExpiredQuotes', - 'Magento\Sales\Model\Observer\Backend\CatalogPriceRule', - 'Magento\Sales\Model\Observer\Frontend\Quote\AddVatRequestParamsOrderComment', - 'Magento\Sales\Model\Observer\Frontend\Quote\RestoreCustomerGroupId', - 'Magento\Sales\Model\Observer\Order\Creditmemo\IndexGrid', - 'Magento\Sales\Model\Observer\Order\IndexGrid', - 'Magento\Sales\Model\Observer\Order\Invoice\IndexGrid', - 'Magento\Sales\Model\Observer\Order\Shipment\IndexGrid', - 'Magento\Sales\Model\Observer\Frontend\Quote\RestoreCustomerGroupId', - 'Magento\User\Model\Backend\Observer\AuthObserver', - 'Magento\User\Model\Backend\Observer\PasswordObserver', - 'Magento\ProductVideo\Model\Observer', + 'SalesOrderSendEmailsObserver', + 'SalesOrderInvoiceSendEmailsObserver', + 'SalesOrderShipmentSendEmailsObserver', + 'SalesOrderCreditmemoSendEmailsObserver', ]; public static function setUpBeforeClass() @@ -133,12 +118,7 @@ class ObserverImplementationTest extends \PHPUnit_Framework_TestCase } return array_diff( array_unique($observerClasses), - self::$blackList, - // MAGETWO-43598 - [ - 'Magento\Versi' . 'onsCms\Model\Backend\Observer', - 'Magento\Versi' . 'onsCms\Model\Backend\PrepareFormObserver' - ] + self::$blackList ); } } diff --git a/dev/tests/static/testsuite/Magento/Test/Integrity/Phrase/AbstractTestCase.php b/dev/tests/static/testsuite/Magento/Test/Integrity/Phrase/AbstractTestCase.php index fdd1a38c2753d971e4bfa460f7943d413eb10cb0..6d062cc46bc49b086b4e6a4b1594eb2f76a5db61 100644 --- a/dev/tests/static/testsuite/Magento/Test/Integrity/Phrase/AbstractTestCase.php +++ b/dev/tests/static/testsuite/Magento/Test/Integrity/Phrase/AbstractTestCase.php @@ -22,6 +22,15 @@ class AbstractTestCase extends \PHPUnit_Framework_TestCase return "\nPhrase: {$phrase['phrase']} \nFile: {$phrase['file']} \nLine: {$phrase['line']}"; } + /** + * @param array $phrase + * @return string + */ + protected function _createMissedPhraseError($phrase) + { + return "\nMissed Phrase: File: {$phrase['file']} \nLine: {$phrase['line']}"; + } + /** * @return \RegexIterator */ diff --git a/dev/tests/static/testsuite/Magento/Test/Integrity/Phrase/ArgumentsTest.php b/dev/tests/static/testsuite/Magento/Test/Integrity/Phrase/ArgumentsTest.php index cd17f1ec7baf4d90bafcc9eb73cb1004de2e8503..1f7565858b60e10914c4d87a3d47bd583c82717b 100644 --- a/dev/tests/static/testsuite/Magento/Test/Integrity/Phrase/ArgumentsTest.php +++ b/dev/tests/static/testsuite/Magento/Test/Integrity/Phrase/ArgumentsTest.php @@ -44,27 +44,39 @@ class ArgumentsTest extends \Magento\Test\Integrity\Phrase\AbstractTestCase public function testArguments() { - $errors = []; + $incorrectNumberOfArgumentsErrors = []; + $missedPhraseErrors = []; foreach ($this->_getFiles() as $file) { if (in_array($file, $this->blackList)) { continue; } $this->_phraseCollector->parse($file); foreach ($this->_phraseCollector->getPhrases() as $phrase) { + if (empty(trim($phrase['phrase'], "'\"\t\n\r\0\x0B"))) { + $missedPhraseErrors[] = $this->_createMissedPhraseError($phrase); + } if (preg_match_all('/%(\d+)/', $phrase['phrase'], $matches) || $phrase['arguments']) { $placeholdersInPhrase = array_unique($matches[1]); if (count($placeholdersInPhrase) != $phrase['arguments']) { - $errors[] = $this->_createPhraseError($phrase); + $incorrectNumberOfArgumentsErrors[] = $this->_createPhraseError($phrase); } } } } $this->assertEmpty( - $errors, + $missedPhraseErrors, + sprintf( + "\n%d missed phrases were discovered: \n%s", + count($missedPhraseErrors), + implode("\n\n", $missedPhraseErrors) + ) + ); + $this->assertEmpty( + $incorrectNumberOfArgumentsErrors, sprintf( "\n%d usages of inconsistency the number of arguments and placeholders were discovered: \n%s", - count($errors), - implode("\n\n", $errors) + count($incorrectNumberOfArgumentsErrors), + implode("\n\n", $incorrectNumberOfArgumentsErrors) ) ); } diff --git a/dev/tests/static/testsuite/Magento/Test/Js/_files/blacklist/magento.txt b/dev/tests/static/testsuite/Magento/Test/Js/_files/blacklist/magento.txt index 30b6cb91bf29ad8b67664146a90f519880cbf892..02aa8c3d20512a666f0a1d817c1bf30f99e1c0cd 100644 --- a/dev/tests/static/testsuite/Magento/Test/Js/_files/blacklist/magento.txt +++ b/dev/tests/static/testsuite/Magento/Test/Js/_files/blacklist/magento.txt @@ -384,99 +384,37 @@ app/code/Magento/Ui/view/base/web/js/core/renderer/layout.js app/code/Magento/Ui/view/base/web/js/core/renderer/types.js app/code/Magento/Ui/view/base/web/js/form/adapter.js app/code/Magento/Ui/view/base/web/js/form/client.js -app/code/Magento/Ui/view/base/web/js/form/components/area.js app/code/Magento/Ui/view/base/web/js/form/components/collection.js -app/code/Magento/Ui/view/base/web/js/form/components/collection/item.js -app/code/Magento/Ui/view/base/web/js/form/components/fieldset.js -app/code/Magento/Ui/view/base/web/js/form/components/group.js app/code/Magento/Ui/view/base/web/js/form/components/html.js -app/code/Magento/Ui/view/base/web/js/form/components/tab_group.js app/code/Magento/Ui/view/base/web/js/form/components/tab.js app/code/Magento/Ui/view/base/web/js/form/element/abstract.js -app/code/Magento/Ui/view/base/web/js/form/element/boolean.js -app/code/Magento/Ui/view/base/web/js/form/element/date.js app/code/Magento/Ui/view/base/web/js/form/element/helpers/options.js -app/code/Magento/Ui/view/base/web/js/form/element/multiselect.js app/code/Magento/Ui/view/base/web/js/form/element/post-code.js app/code/Magento/Ui/view/base/web/js/form/element/region.js app/code/Magento/Ui/view/base/web/js/form/element/select.js -app/code/Magento/Ui/view/base/web/js/form/element/textarea.js app/code/Magento/Ui/view/base/web/js/form/element/ui-select.js app/code/Magento/Ui/view/base/web/js/form/form.js app/code/Magento/Ui/view/base/web/js/form/provider.js -app/code/Magento/Ui/view/base/web/js/grid/columns/actions.js -app/code/Magento/Ui/view/base/web/js/grid/columns/column.js -app/code/Magento/Ui/view/base/web/js/grid/columns/date.js -app/code/Magento/Ui/view/base/web/js/grid/columns/multiselect.js -app/code/Magento/Ui/view/base/web/js/grid/columns/select.js app/code/Magento/Ui/view/base/web/js/grid/columns/thumbnail.js -app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/bookmarks.js app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/storage.js -app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/view.js -app/code/Magento/Ui/view/base/web/js/grid/controls/columns.js -app/code/Magento/Ui/view/base/web/js/grid/dnd.js -app/code/Magento/Ui/view/base/web/js/grid/editing/bulk.js -app/code/Magento/Ui/view/base/web/js/grid/editing/client.js -app/code/Magento/Ui/view/base/web/js/grid/editing/editor-view.js -app/code/Magento/Ui/view/base/web/js/grid/editing/editor.js -app/code/Magento/Ui/view/base/web/js/grid/editing/record.js app/code/Magento/Ui/view/base/web/js/grid/export.js -app/code/Magento/Ui/view/base/web/js/grid/filters/chips.js -app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js -app/code/Magento/Ui/view/base/web/js/grid/filters/group.js -app/code/Magento/Ui/view/base/web/js/grid/massactions.js -app/code/Magento/Ui/view/base/web/js/grid/paging/paging.js -app/code/Magento/Ui/view/base/web/js/grid/paging/sizes.js -app/code/Magento/Ui/view/base/web/js/grid/provider.js app/code/Magento/Ui/view/base/web/js/grid/resize.js -app/code/Magento/Ui/view/base/web/js/grid/search/search.js app/code/Magento/Ui/view/base/web/js/grid/sticky/sticky.js -app/code/Magento/Ui/view/base/web/js/grid/tree-massactions.js -app/code/Magento/Ui/view/base/web/js/lib/class.js -app/code/Magento/Ui/view/base/web/js/lib/collapsible.js -app/code/Magento/Ui/view/base/web/js/lib/component/core.js -app/code/Magento/Ui/view/base/web/js/lib/component/links.js -app/code/Magento/Ui/view/base/web/js/lib/component/main.js -app/code/Magento/Ui/view/base/web/js/lib/component/manip.js -app/code/Magento/Ui/view/base/web/js/lib/component/provider.js -app/code/Magento/Ui/view/base/web/js/lib/component/traversal.js -app/code/Magento/Ui/view/base/web/js/lib/events.js +app/code/Magento/Ui/view/base/web/js/lib/core/element/links.js app/code/Magento/Ui/view/base/web/js/lib/key-codes.js -app/code/Magento/Ui/view/base/web/js/lib/ko/bind/after-render.js -app/code/Magento/Ui/view/base/web/js/lib/ko/bind/class.js -app/code/Magento/Ui/view/base/web/js/lib/ko/bind/collapsible.js app/code/Magento/Ui/view/base/web/js/lib/ko/bind/datepicker.js app/code/Magento/Ui/view/base/web/js/lib/ko/bind/fadeVisible.js app/code/Magento/Ui/view/base/web/js/lib/ko/bind/i18n.js app/code/Magento/Ui/view/base/web/js/lib/ko/bind/keyboard.js app/code/Magento/Ui/view/base/web/js/lib/ko/bind/mage-init.js app/code/Magento/Ui/view/base/web/js/lib/ko/bind/optgroup.js -app/code/Magento/Ui/view/base/web/js/lib/ko/bind/outer_click.js -app/code/Magento/Ui/view/base/web/js/lib/ko/bind/scope.js -app/code/Magento/Ui/view/base/web/js/lib/ko/bind/stop_propagation.js -app/code/Magento/Ui/view/base/web/js/lib/ko/extender/bound-nodes.js app/code/Magento/Ui/view/base/web/js/lib/ko/extender/observable_array.js -app/code/Magento/Ui/view/base/web/js/lib/ko/initialize.js -app/code/Magento/Ui/view/base/web/js/lib/ko/template/engine.js -app/code/Magento/Ui/view/base/web/js/lib/ko/template/observable_source.js -app/code/Magento/Ui/view/base/web/js/lib/loader.js -app/code/Magento/Ui/view/base/web/js/lib/registry/events.js -app/code/Magento/Ui/view/base/web/js/lib/registry/registry.js -app/code/Magento/Ui/view/base/web/js/lib/registry/storage.js -app/code/Magento/Ui/view/base/web/js/lib/renderer/renderer.js app/code/Magento/Ui/view/base/web/js/lib/spinner.js app/code/Magento/Ui/view/base/web/js/lib/step-wizard.js -app/code/Magento/Ui/view/base/web/js/lib/storage.js app/code/Magento/Ui/view/base/web/js/lib/validation/rules.js app/code/Magento/Ui/view/base/web/js/lib/validation/utils.js app/code/Magento/Ui/view/base/web/js/lib/validation/validator.js -app/code/Magento/Ui/view/base/web/js/lib/view/utils/async.js -app/code/Magento/Ui/view/base/web/js/lib/view/utils/bindings.js -app/code/Magento/Ui/view/base/web/js/lib/view/utils/dom-observer.js app/code/Magento/Ui/view/base/web/js/lib/view/utils/raf.js -app/code/Magento/Ui/view/base/web/js/modal/alert.js -app/code/Magento/Ui/view/base/web/js/modal/confirm.js -app/code/Magento/Ui/view/base/web/js/modal/modal.js app/code/Magento/Ui/view/base/web/js/modal/modalToggle.js app/code/Magento/Ui/view/frontend/web/js/model/messageList.js app/code/Magento/Ui/view/frontend/web/js/model/messages.js @@ -543,7 +481,7 @@ dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/controls/bookmarks/v dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/controls/columns.test.js dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/editing/bulk.test.js dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/filters/filters.test.js -dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/filters/group.test.js +dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/filters/range.test.js dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/paging/paging.test.js dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/resize.test.js dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/search/search.test.js @@ -623,10 +561,7 @@ lib/web/mage/mage.js lib/web/mage/menu.js lib/web/mage/popup-window.js lib/web/mage/redirect-url.js -lib/web/mage/requirejs/mixins.js -lib/web/mage/requirejs/plugin/id-normalizer.js lib/web/mage/requirejs/resolver.js -lib/web/mage/requirejs/static.js lib/web/mage/smart-keyboard-handler.js lib/web/mage/sticky.js lib/web/mage/storage.js @@ -640,13 +575,7 @@ lib/web/mage/translate-inline.js lib/web/mage/translate.js lib/web/mage/url.js lib/web/mage/utils/arrays.js -lib/web/mage/utils/compare.js -lib/web/mage/utils/main.js lib/web/mage/utils/misc.js -lib/web/mage/utils/objects.js -lib/web/mage/utils/strings.js -lib/web/mage/utils/template.js -lib/web/mage/utils/wrapper.js lib/web/mage/validation.js lib/web/mage/validation/validation.js lib/web/mage/view/composite.js @@ -1153,4 +1082,4 @@ vendor/magento/module-wishlist/view/frontend/web/wishlist.js vendor/magento/theme-adminhtml-backend/web/js/theme.js vendor/magento/theme-frontend-blank/web/js/navigation-menu.js vendor/magento/theme-frontend-blank/web/js/responsive.js -vendor/magento/theme-frontend-blank/web/js/theme.js \ No newline at end of file +vendor/magento/theme-frontend-blank/web/js/theme.js diff --git a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_classes.php b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_classes.php index ca08452c4b2c6ac3b9f0603f6a1a9176932da1c6..cf42cd0950a7a806535e76d213079ad68a03a6ee 100755 --- a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_classes.php +++ b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_classes.php @@ -803,23 +803,47 @@ return [ ['Magento\Core\Model\Email\Info', 'Magento\Framework\Mail\MessageInterface'], ['Magento\Core\Model\Email\Sender', 'Magento\Framework\Mail\Template\TransportBuilder'], ['Magento\Core\Model\Email\Template\Mailer', 'Magento\Framework\Mail\Template\TransportBuilder'], - ['Magento\Core\Model\Resource\AbstractResource', 'Magento\Framework\Model\ModelResource\AbstractResource'], - ['Magento\Core\Model\Resource\Db\AbstractDb', 'Magento\Framework\Model\ModelResource\Db\AbstractDb'], - ['Magento\Core\Model\Resource\Db\Profiler', 'Magento\Framework\Model\ModelResource\Db\Profiler'], + ['Magento\Core\Model\Resource\AbstractResource', 'Magento\Framework\Model\ResourceModel\AbstractResource'], + [ + 'Magento\Framework\Model\ModelResource\AbstractResource', + 'Magento\Framework\Model\ResourceModel\AbstractResource' + ], + ['Magento\Core\Model\Resource\Db\AbstractDb', 'Magento\Framework\Model\ResourceModel\Db\AbstractDb'], + ['Magento\Core\Model\Resource\Db\Profiler', 'Magento\Framework\Model\ResourceModel\Db\Profiler'], + ['Magento\Framework\Model\ModelResource\Db\Profiler', 'Magento\Framework\Model\ResourceModel\Db\Profiler'], [ 'Magento\Core\Model\Resource\Entity\AbstractEntity', + 'Magento\Framework\Model\ResourceModel\Entity\AbstractEntity', + ], + [ 'Magento\Framework\Model\ModelResource\Entity\AbstractEntity', + 'Magento\Framework\Model\ResourceModel\Entity\AbstractEntity', ], - ['Magento\Core\Model\Resource\Entity\Table', 'Magento\Framework\Model\ModelResource\Entity\Table'], + ['Magento\Core\Model\Resource\Entity\Table', 'Magento\Framework\Model\ResourceModel\Entity\Table'], + ['Magento\Framework\Model\ModelResource\Entity\Table', 'Magento\Framework\Model\ResourceModel\Entity\Table'], ['Magento\Core\Model\Resource\Flag', 'Magento\Framework\Flag\FlagResource'], - ['Magento\Core\Model\Resource\Iterator', 'Magento\Framework\Model\ModelResource\Iterator'], + ['Magento\Core\Model\Resource\Iterator', 'Magento\Framework\Model\ResourceModel\Iterator'], + ['Magento\Framework\Model\ModelResource\Iterator', 'Magento\Framework\Model\ResourceModel\Iterator'], ['Magento\Core\Model\Resource\Resource', 'Magento\Framework\Module\ModuleResource'], - ['Magento\Core\Model\Resource\Type\AbstractType', 'Magento\Framework\Model\ModelResource\Type\AbstractType'], - ['Magento\Core\Model\Resource\Type\Db', 'Magento\Framework\Model\ModelResource\Type\Db'], - ['Magento\Core\Model\Resource\Type\Db\Pdo\Mysql', 'Magento\Framework\Model\ModelResource\Type\Db\Pdo\Mysql'], + ['Magento\Core\Model\Resource\Type\AbstractType', 'Magento\Framework\Model\ResourceModel\Type\AbstractType'], + [ + 'Magento\Framework\Model\ModelResource\Type\AbstractType', + 'Magento\Framework\Model\ResourceModel\Type\AbstractType' + ], + ['Magento\Core\Model\Resource\Type\Db', 'Magento\Framework\Model\ResourceModel\Type\Db'], + ['Magento\Framework\Model\ModelResource\Type\Db', 'Magento\Framework\Model\ResourceModel\Type\Db'], + ['Magento\Core\Model\Resource\Type\Db\Pdo\Mysql', 'Magento\Framework\Model\ResourceModel\Type\Db\Pdo\Mysql'], + [ + 'Magento\Framework\Model\ModelResource\Type\Db\Pdo\Mysql', + 'Magento\Framework\Model\ResourceModel\Type\Db\Pdo\Mysql' + ], [ 'Magento\Core\Model\Resource\Db\Collection\AbstractCollection', + 'Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection', + ], + [ 'Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection', + 'Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection', ], ['Magento\Email\Model\Info', 'Magento\Framework\Mail\MessageInterface'], ['Magento\Email\Model\Sender', 'Magento\Framework\Mail\Template\TransportBuilder'], @@ -2925,7 +2949,8 @@ return [ 'Magento\Bundle\Api\ProductOptionTypeListInterface', ], ['Magento\Sales\Controller\Adminhtml\Order\InvoiceLoader'], - ['Magento\Sales\Model\ResourceModel\AbstractResource', 'Magento\Framework\Model\ModelResource\Db\AbstractDb'], + ['Magento\Sales\Model\ResourceModel\AbstractResource', 'Magento\Framework\Model\ResourceModel\Db\AbstractDb'], + ['Magento\Framework\Model\ModelResource\Db\AbstractDb', 'Magento\Framework\Model\ResourceModel\Db\AbstractDb'], ['Magento\Backend\Block\System\Config\Switcher'], ['Magento\VersionsCms\Block\Adminhtml\Scope\Switcher'], ['Magento\Backend\Block\Widget\View\Container'], @@ -3921,6 +3946,8 @@ return [ ['Magento\ConfigurableProduct\Block\Adminhtml\Product\Edit\Tab\Super\Config\Grid\Renderer\Inventory'], ['Magento\ConfigurableProduct\Block\Adminhtml\Product\Edit\Tab\Super\Config\Grid\Renderer\Checkbox'], ['Magento\ConfigurableProduct\Block\Adminhtml\Product\Edit\Tab\Super\Config\Grid\Filter\Inventory'], + ['Magento\Catalog\Ui\Component\Listing\Filters'], + ['Magento\Customer\Ui\Component\Listing\Filters'], ['Magento\Catalog\Block\Product\TemplateSelector'], ['Magento\Downloadable\Controller\Adminhtml\Downloadable\Product\Edit\SuggestProductTemplates'], ['Magento\Bundle\Controller\Adminhtml\Bundle\Product\Edit\SuggestProductTemplates'], @@ -3973,4 +4000,106 @@ return [ ['Magento\Framework\App\Resource', 'Magento\Framework\App\ResourceConnection'], ['Magento\Framework\Flag\Resource', 'Magento\Framework\Flag\FlagResource'], ['Magento\Framework\Module\Resource', 'Magento\Framework\Module\ModuleResource'], + ['Magento\OfflineShipping\Model\Observer\SalesRule\ActionsTab', 'Magento\OfflineShipping\Observer\*'], + ['Magento\Theme\Model\Observer', 'Magento\Theme\Observer\*'], + ['Magento\Catalog\Observer\AddCatalogToTopmenuItems', 'Magento\Catalog\Observer\*'], + ['Magento\Catalog\Observer\CatalogCheckIsUsingStaticUrlsAllowed', 'Magento\Catalog\Observer\*'], + [ + 'Magento\LayeredNavigation\Block\Adminhtml\Product\Attribute\Edit\Tab\Front\Observer', + 'Magento\LayeredNavigation\Observer\*' + ], + [ + 'Magento\LayeredNavigation\Block\Adminhtml\Product\Attribute\Grid\Observer', + 'Magento\LayeredNavigation\Observer\*' + ], + ['Magento\Authorizenet\Model\Directpost\Observer', 'Magento\Authorizenet\Observer\*'], + ['Magento\Downloadable\Model\Observer', 'Magento\Downloadable\Observer\*'], + ['Magento\Msrp\Model\Observer\Frontend\Quote\SetCanApplyMsrp', 'Magento\Msrp\Observer\*'], + ['Magento\Customer\Model\Observer\Log', 'Magento\Customer\Observer\*'], + ['Magento\Customer\Model\Observer', 'Magento\Customer\Observer\*'], + ['Magento\Paypal\Model\Observer\RestrictAdminBillingAgreementUsage', 'Magento\Paypal\Observer\*'], + ['Magento\GiftMessage\Model\Observer', 'Magento\GiftMessage\Observer\*'], + ['Magento\Quote\Model\Observer\Webapi\Submit', 'Magento\Quote\Observer\*'], + ['Magento\Quote\Model\Observer\Backend\CustomerQuote', 'Magento\Quote\Observer\*'], + ['Magento\CatalogRule\Observer\ProcessAdminFinalPrice', 'Magento\CatalogRule\Observer\*'], + ['Magento\CatalogRule\Observer\ProcessFrontFinalPrice', 'Magento\CatalogRule\Observer\*'], + ['Magento\CatalogRule\Observer\PrepareCatalogProductCollectionPrices', 'Magento\CatalogRule\Observer\*'], + ['Magento\Review\Model\Observer', 'Magento\Review\Observer\*'], + ['Magento\Reports\Model\Event\Observer', 'Magento\Reports\Observer\*'], + ['Magento\GoogleAnalytics\Model\Observer', 'Magento\GoogleAnalytics\Observer\*'], + ['Magento\Braintree\Model\Observer', 'Magento\Braintree\Observer\*'], + ['Magento\Sales\Model\Observer\Frontend\Quote\RestoreCustomerGroupId', 'Magento\Sales\Observer\*'], + ['Magento\Sales\Model\Observer\Backend\CatalogProductQuote', 'Magento\Sales\Observer\*'], + ['Magento\Sales\Model\Observer\Backend\CatalogPriceRule', 'Magento\Sales\Observer\*'], + ['Magento\ProductVideo\Model\Observer', 'Magento\ProductVideo\Observer\*'], + ['Magento\Checkout\Observer\LoadCustomerQuote', 'Magento\Checkout\Observer\*'], + ['Magento\Checkout\Observer\UnsetAll', 'Magento\Checkout\Observer\*'], + ['Magento\AdminNotification\Model\Observer', 'Magento\AdminNotification\Observer\*'], + ['Magento\Cron\Model\Observer', 'Magento\Cron\Observer\*'], + ['Magento\User\Model\Backend\Observer\AuthObserver', 'Magento\User\Observer\*'], + ['Magento\User\Model\Backend\Observer\PasswordObserver', 'Magento\User\Observer\Backend\*'], + ['Magento\SalesRule\Model\Observer', 'Magento\SalesRule\Observer\*'], + ['Magento\CatalogUrlRewrite\Observer\CategorySaveRewritesHistorySetter', 'Magento\CatalogUrlRewrite\Observer\*'], + ['Magento\CatalogUrlRewrite\Observer\CategoryUrlPathAutogenerator', 'Magento\CatalogUrlRewrite\Observer\*'], + ['Magento\CatalogUrlRewrite\Model\Product\Observer', 'Magento\CatalogUrlRewrite\Observer\*'], + ['Magento\CatalogUrlRewrite\Model\Category\Observer', 'Magento\CatalogUrlRewrite\Observer\*'], + ['Magento\CatalogUrlRewrite\Observer\ProductUrlKeyAutogenerator', 'Magento\CatalogUrlRewrite\Observer\*'], + ['Magento\Weee\Model\Total\Observer\Webapi\Item', 'Magento\Weee\Observer\*'], + ['Magento\Captcha\Model\Observer', 'Magento\Captcha\Observer\*'], + ['Magento\GoogleAdwords\Model\Observer', 'Magento\GoogleAdwords\Observer\*'], + ['Magento\Bundle\Observer\AppendUpsellProducts', 'Magento\Bundle\Observer\*'], + ['Magento\Bundle\Observer\LoadProductOptions', 'Magento\Bundle\Observer\*'], + ['Magento\Bundle\Observer\InitOptionRenderer', 'Magento\Bundle\Observer\*'], + ['Magento\Bundle\Observer\SetAttributeTabBlock', 'Magento\Bundle\Observer\*'], + ['Magento\Config\Model\Config\Backend\Admin\Observer', 'Magento\Config\Observer\*'], + ['Magento\Persistent\Model\Observer\Session', 'Magento\Persistent\Observer\*'], + ['Magento\Persistent\Model\Observer\ApplyPersistentData', 'Magento\Persistent\Observer\*'], + ['Magento\Persistent\Model\Observer\DisableGuestCheckout', 'Magento\Persistent\Observer\*'], + ['Magento\Persistent\Model\Observer\CustomerAuthenticatedEvent', 'Magento\Persistent\Observer\*'], + ['Magento\Persistent\Model\Observer\SetQuotePersistentData', 'Magento\Persistent\Observer\*'], + ['Magento\Persistent\Model\Observer\SetLoadPersistentQuote', 'Magento\Persistent\Observer\*'], + ['Magento\Persistent\Model\Observer\RemovePersistentCookie', 'Magento\Persistent\Observer\*'], + ['Magento\Persistent\Model\Observer\ApplyBlockPersistentData', 'Magento\Persistent\Observer\*'], + ['Magento\Persistent\Model\Observer\UpdateCustomerCookies', 'Magento\Persistent\Observer\*'], + ['Magento\Persistent\Model\Observer\EmulateQuote', 'Magento\Persistent\Observer\*'], + ['Magento\Persistent\Model\Observer\CheckExpirePersistentQuote', 'Magento\Persistent\Observer\*'], + ['Magento\Persistent\Model\Observer\EmulateCustomer', 'Magento\Persistent\Observer\*'], + ['Magento\Persistent\Model\Observer\PreventExpressCheckout', 'Magento\Persistent\Observer\*'], + ['Magento\Persistent\Model\Observer\PreventClearCheckoutSession', 'Magento\Persistent\Observer\*'], + ['Magento\Persistent\Model\Observer\MakePersistentQuoteGuest', 'Magento\Persistent\Observer\*'], + ['Magento\CmsUrlRewrite\Model\Observer', 'Magento\CmsUrlRewrite\Observer\*'], + ['Magento\Cms\Model\Observer', 'Magento\Cms\Observer\*'], + ['Magento\OfflinePayments\Model\Observer', 'Magento\OfflinePayments\Observer\*'], + ['Magento\Quote\Model\Observer\Frontend\Quote\Address\CollectTotals', 'Magento\Quote\Observer\*'], + ['Magento\Backend\Model\Observer', 'Magento\Backend\Observer\*'], + ['Magento\Sales\Model\Observer\Frontend\Quote\AddVatRequestParamsOrderComment', 'Magento\Sales\Observer\*'], + ['Magento\Sales\Model\Observer\Order\IndexGrid', 'Magento\Sales\Observer\*'], + ['Magento\Sales\Model\Observer\Order\Invoice\IndexGrid', 'Magento\Sales\Observer\*'], + ['Magento\Sales\Model\Observer\Order\Shipment\IndexGrid', 'Magento\Sales\Observer\*'], + ['Magento\Sales\Model\Observer\Order\Creditmemo\IndexGrid', 'Magento\Sales\Observer\*'], + ['Magento\Sales\Model\Observer\Order\SendEmails', 'Magento\Sales\Observer\*'], + ['Magento\Sales\Model\Observer\Order\Invoice\SendEmails', 'Magento\Sales\Observer\*'], + ['Magento\Sales\Model\Observer\Order\Shipment\SendEmails', 'Magento\Sales\Observer\*'], + ['Magento\Sales\Model\Observer\Order\Creditmemo\SendEmails', 'Magento\Sales\Observer\*'], + ['Magento\SalesSequence\Model\Observer', 'Magento\SalesSequence\Observer\*'], + ['Magento\Checkout\Observer\SalesQuoteSaveAfter', 'Magento\Checkout\Observer\*'], + ['Magento\CatalogUrlRewrite\Model\Product\Plugin\Import', 'Magento\CatalogUrlRewrite\Observer\*'], + ['Magento\CacheInvalidate\Observer\InvalidateVarnish', 'Magento\CacheInvalidate\Observer\*'], + ['Magento\CacheInvalidate\Observer\FlushAllCache', 'Magento\CacheInvalidate\Observer\*'], + ['Magento\PageCache\Model\Observer\ProcessLayoutRenderElement', 'Magento\PageCache\Observer\*'], + ['Magento\PageCache\Model\Observer\FlushCacheByTags', 'Magento\PageCache\Observer\*'], + ['Magento\PageCache\Model\Observer\InvalidateCacheIfChanged', 'Magento\PageCache\Observer\*'], + ['Magento\PageCache\Model\Observer\FlushAllCache', 'Magento\PageCache\Observer\*'], + ['Magento\PageCache\Model\Observer\InvalidateCache', 'Magento\PageCache\Observer\*'], + ['Magento\PageCache\Model\Observer\RegisterFormKeyFromCookie', 'Magento\PageCache\Observer\*'], + ['Magento\PageCache\Model\Observer\FlushFormKeyOnLogout', 'Magento\PageCache\Observer\*'], + ['Magento\GoogleOptimizer\Model\Observer\Product\Save', 'Magento\GoogleOptimizer\Observer\*'], + ['Magento\GoogleOptimizer\Model\Observer\Product\Delete', 'Magento\GoogleOptimizer\Observer\*'], + ['Magento\GoogleOptimizer\Model\Observer\Category\Save', 'Magento\GoogleOptimizer\Observer\*'], + ['Magento\GoogleOptimizer\Model\Observer\Category\Delete', 'Magento\GoogleOptimizer\Observer\*'], + ['Magento\GoogleOptimizer\Model\Observer\CmsPage\Save', 'Magento\GoogleOptimizer\Observer\*'], + ['Magento\GoogleOptimizer\Model\Observer\CmsPage\Delete', 'Magento\GoogleOptimizer\Observer\*'], + ['Magento\GoogleOptimizer\Model\Observer\Block\Category\Tab', 'Magento\GoogleOptimizer\Observer\*'], + ['Magento\Payment\Model\Observer', 'Magento\Payment\Observer\*'], + ['Magento\Tax\Observer\AggregateSalesReportTaxData', 'Magento\Tax\Model\AggregateSalesReportTaxData'], ]; diff --git a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_constants.php b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_constants.php index 174f0004e29bd6f87c4effb98f73f40fb9026d58..1a0a6503809d5e2717bac49bcf46d39e750a23da 100644 --- a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_constants.php +++ b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_constants.php @@ -19,7 +19,7 @@ return [ ['CACHE_TAG', 'Magento\Framework\AppInterface'], [ 'CACHE_TAG', - 'Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection', + 'Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection', 'Magento_Core_Model_Cache_Type_Collection::CACHE_TAG', ], ['CACHE_TAG', 'Magento\Framework\Translate', 'Magento_Core_Model_Cache_Type_Translate::CACHE_TAG'], @@ -148,11 +148,6 @@ return [ ['XML_CHARSET_NODE', 'Magento\SalesRule\Helper\Coupon'], ['XML_CHARSET_SEPARATOR', 'Magento\SalesRule\Helper\Coupon'], ['XML_NODE_RELATED_CACHE', 'Magento\CatalogRule\Model\Rule'], - [ - 'XML_NODE_ATTRIBUTE_NODES', - 'Magento\Catalog\Model\ResourceModel\Product\Flat\Indexer', - 'XML_NODE_ATTRIBUTE_GROUPS', - ], [ 'XML_PATH_ALLOW_DUPLICATION', 'Magento\Core\Model\Design\PackageInterface', @@ -310,8 +305,6 @@ return [ ['XML_NODE_ADD_FILTERABLE_ATTRIBUTES', 'Magento\Catalog\Helper\Product\Flat'], ['XML_NODE_ADD_CHILD_DATA', 'Magento\Catalog\Helper\Product\Flat'], ['XML_PATH_CONTENT_TEMPLATE_FILTER', 'Magento\Catalog\Helper\Data'], - ['XML_NODE_MAX_INDEX_COUNT', 'Magento\Catalog\Model\ResourceModel\Product\Flat\Indexer'], - ['XML_NODE_ATTRIBUTE_GROUPS', 'Magento\Catalog\Model\ResourceModel\Product\Flat\Indexer'], ['XML_PATH_UNASSIGNABLE_ATTRIBUTES', 'Magento\Catalog\Helper\Product'], ['XML_PATH_ATTRIBUTES_USED_IN_AUTOGENERATION', 'Magento\Catalog\Helper\Product'], ['XML_PATH_PRODUCT_TYPE_SWITCHER_LABEL', 'Magento\Catalog\Helper\Product'], diff --git a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_methods.php b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_methods.php index 00e6b2ad57a8cc6a86f63591790c1c88a9606a09..ca7f4471723dc3df3850a1e2941c1adab9aa08fd 100644 --- a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_methods.php +++ b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_methods.php @@ -866,7 +866,7 @@ return [ ['validateDataArray', 'Magento\Framework\Convert\Container\AbstractContainer'], ['validateFile', 'Magento\Core\Model\Design\Package'], ['validateOrder', 'Magento\Checkout\Model\Type\Onepage'], - ['viewTrackAction', 'Magento\Sales\Controller\Adminhtml\Order\Shipment'], + ['viewTrackAction', 'Magento\Shipping\Controller\Adminhtml\Order\Shipment'], ['_prepareOptionValues', 'Magento\Eav\Block\Adminhtml\Attribute\Edit\Options\AbstractOptions'], ['_getOptionValuesCollection', 'Magento\Eav\Block\Adminhtml\Attribute\Edit\Options\AbstractOptions'], [ @@ -951,7 +951,7 @@ return [ ['_getUsers', 'Magento\User\Block\Role\Grid\User', 'getUsers'], ['_getGridHtml', 'Magento\User\Block\Role\Tab\Users', 'getGridHtml'], ['_getSelectedRoles', 'Magento\User\Block\User\Edit\Tab\Roles', 'getSelectedRoles'], - ['_prepareSelect', 'Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection'], + ['_prepareSelect', 'Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection'], ['_prepareSelect', 'Magento\Framework\Data\Collection\AbstractDb'], ['_createOrderFromAddress', 'Magento\Checkout\Model\Type\AbstractType'], ['_addLoadAttributesSelectFields', 'Magento\Catalog\Model\ResourceModel\AbstractResource'], @@ -1116,12 +1116,12 @@ return [ ], [ 'formatDate', - 'Magento\Framework\Model\ModelResource\AbstractResource', + 'Magento\Framework\Model\ResourceModel\AbstractResource', '\Magento\Framework\Stdlib\DateTime::formatDate', ], [ 'mktime', - 'Magento\Framework\Model\ModelResource\AbstractResource', + 'Magento\Framework\Model\ResourceModel\AbstractResource', '\Magento\Framework\Stdlib\DateTime::toTimestamp', ], ['getPlainTemplateMode', '\Magento\Email\Model\Template\Filter'], @@ -2342,11 +2342,11 @@ return [ ['_getReadAdapter', 'Magento\Framework\DB\Helper\AbstractHelper', 'getConnection'], ['_getWriteAdapter', 'Magento\Framework\DB\Helper\AbstractHelper', 'getConnection'], ['_getConnection', 'Magento\Framework\DB\Helper\AbstractHelper', 'getConnection'], - ['_getReadAdapter', 'Magento\Framework\Model\ModelResource\AbstractResource', 'getConnection'], - ['_getWriteAdapter', 'Magento\Framework\Model\ModelResource\AbstractResource', 'getConnection'], - ['_getReadAdapter', 'Magento\Framework\Model\ModelResource\Db\AbstractDb', 'getConnection'], - ['_getWriteAdapter', 'Magento\Framework\Model\ModelResource\Db\AbstractDb', 'getConnection'], - ['getReadConnection', 'Magento\Framework\Model\ModelResource\Db\AbstractDb', 'getConnection'], + ['_getReadAdapter', 'Magento\Framework\Model\ResourceModel\AbstractResource', 'getConnection'], + ['_getWriteAdapter', 'Magento\Framework\Model\ResourceModel\AbstractResource', 'getConnection'], + ['_getReadAdapter', 'Magento\Framework\Model\ResourceModel\Db\AbstractDb', 'getConnection'], + ['_getWriteAdapter', 'Magento\Framework\Model\ResourceModel\Db\AbstractDb', 'getConnection'], + ['getReadConnection', 'Magento\Framework\Model\ResourceModel\Db\AbstractDb', 'getConnection'], ['getReadAdapter', 'Magento\Catalog\Model\Indexer\Category\Flat\AbstractAction'], ['getWriteAdapter', 'Magento\Catalog\Model\Indexer\Category\Flat\AbstractAction'], ['getReadAdapter', 'Magento\Catalog\Model\Indexer\Category\Product\AbstractAction'], @@ -2393,7 +2393,7 @@ return [ ['salesEventConvertQuoteAddressToOrder', 'Magento\Tax\Model\Observer'], ['aggregateSalesReportTaxData', 'Magento\Tax\Model\Observer', 'Magento\Tax\Observer\AggregateSalesReportTaxData::invoke'], ['quoteCollectTotalsBefore', 'Magento\Tax\Model\Observer', 'Magento\Tax\Observer\QuoteCollectTotalsBefore::invoke'], - ['updateProductOptions', 'Magento\Tax\Model\Observer', 'Magento\Tax\Observer\UpdateProductOptions::invoke'], + ['updateProductOptions', 'Magento\Tax\Model\Observer', 'Magento\Tax\Observer\UpdateProductOptionsObserver::invoke'], ['invalidateVarnish', 'Magento\CacheInvalidate\Model\Observer', 'Magento\CacheInvalidate\Observer\InvalidateVarnish::invoke'], ['flushAllCache', 'Magento\CacheInvalidate\Model\Observer', 'Magento\CacheInvalidate\Observer\FlushAllCache::invoke'], ['sendPurgeRequest', 'Magento\CacheInvalidate\Model\Observer', 'Magento\CacheInvalidate\Model\PurgeCache::sendPurgeRequest'], @@ -2475,4 +2475,14 @@ return [ ['getTypeSwitcherControlLabel', 'Magento\Catalog\Helper\Product'], ['addStockStatusToSelect', 'Magento\CatalogInventory\Helper\Stock'], ['getUrlInstance', 'Magento\Catalog\Model\Product\Url'], + ['getCcOwner', 'Magento\Quote\Api\Data\PaymentInterface'], + ['setCcOwner', 'Magento\Quote\Api\Data\PaymentInterface'], + ['getCcNumber', 'Magento\Quote\Api\Data\PaymentInterface'], + ['setCcNumber', 'Magento\Quote\Api\Data\PaymentInterface'], + ['getCcType', 'Magento\Quote\Api\Data\PaymentInterface'], + ['setCcType', 'Magento\Quote\Api\Data\PaymentInterface'], + ['getCcExpYear', 'Magento\Quote\Api\Data\PaymentInterface'], + ['setCcExpYear', 'Magento\Quote\Api\Data\PaymentInterface'], + ['getCcExpMonth', 'Magento\Quote\Api\Data\PaymentInterface'], + ['setCcExpMonth', 'Magento\Quote\Api\Data\PaymentInterface'], ]; diff --git a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_namespaces.php b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_namespaces.php index 03be375c6552193699c7aaaa49d0e75d4da52d33..2419014c40dc875bd0d539cf87f3479a9500690c 100644 --- a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_namespaces.php +++ b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_namespaces.php @@ -190,6 +190,8 @@ return [ ['Magento\Catalog\Test\Unit\Plugin\Model\Resource', 'Magento\Catalog\Test\Unit\Plugin\Model\ResourceModel'], ['Magento\Framework\Acl\Resource', 'Magento\Framework\Acl\AclResource'], ['Magento\Framework\App\Resource', 'Magento\Framework\App\ResourceConnection'], - ['Magento\Framework\Model\Resource', 'Magento\Framework\Model\ModelResource'], - ['Magento\Framework\Model\Test\Unit\Resource', 'Magento\Framework\Model\Test\Unit\ModelResource'], + ['Magento\Framework\Model\Resource', 'Magento\Framework\Model\ResourceModel'], + ['Magento\Framework\Model\ModelResource', 'Magento\Framework\Model\ResourceModel'], + ['Magento\Framework\Model\Test\Unit\Resource', 'Magento\Framework\Model\Test\Unit\ResourceModel'], + ['Magento\Framework\Model\Test\Unit\ModelResource', 'Magento\Framework\Model\Test\Unit\ResourceModel'], ]; diff --git a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_properties.php b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_properties.php index becf2127e488160bac542fcfc7888d3c5cf3f6c2..43ec07e30fda487f0beff952cfe8b666b149aec3 100644 --- a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_properties.php +++ b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_properties.php @@ -173,13 +173,13 @@ return [ ['_dirModel', 'Magento\Downloadable\Controller\Adminhtml\Downloadable\File'], ['_dirModel', 'Magento\Downloadable\Model\Link'], ['_dirModel', 'Magento\Downloadable\Model\Sample'], - ['_dir', 'Magento\Framework\App\Dir'], + ['_dir', 'Magento\Framework\Filesystem'], ['_baseDir', 'Magento\Backup\Model\Fs\Collection'], ['_filesystem', 'Magento\Backup\Model\Fs\Collection'], ['_dir', 'Magento\Backup\Model\Fs\Collection'], ['_dir', 'Magento\Cms\Model\Wysiwyg\Images\Storage'], ['_dirs', 'Magento\Core\Helper\Theme'], - ['_dirs', 'Magento\Framework\Model\ModelResource\Type\Db\Pdo\Mysql'], + ['_dirs', 'Magento\Framework\Model\ResourceModel\Type\Db\Pdo\Mysql'], ['_filesystem', 'Magento\GiftWrapping\Model\Wrapping'], ['_customer', 'Magento\Backend\Model\Session\Quote'], ['_customerFactory', 'Magento\Backend\Model\Session\Quote'], diff --git a/lib/internal/Magento/Framework/Api/Test/Unit/Code/Generator/EntityChildTestAbstract.php b/lib/internal/Magento/Framework/Api/Test/Unit/Code/Generator/EntityChildTestAbstract.php index 0265b6342ab449fac95a9037e1b2a06d7901e4ee..acbc463380d5292bab9de0851a1328ef4cebe3d3 100644 --- a/lib/internal/Magento/Framework/Api/Test/Unit/Code/Generator/EntityChildTestAbstract.php +++ b/lib/internal/Magento/Framework/Api/Test/Unit/Code/Generator/EntityChildTestAbstract.php @@ -126,7 +126,7 @@ abstract class EntityChildTestAbstract extends \PHPUnit_Framework_TestCase protected function mockDefinedClassesCall() { $this->definedClassesMock->expects($this->at(0)) - ->method('classLoadable') + ->method('isClassLoadable') ->with($this->getSourceClassName()) ->willReturn(true); } diff --git a/lib/internal/Magento/Framework/App/Config/Value.php b/lib/internal/Magento/Framework/App/Config/Value.php index 1065c8f1f19ba9c65b8a8346b2ec5e2d99c7e716..ddfb123d637f099d8215a2e5f698e910de1016a6 100644 --- a/lib/internal/Magento/Framework/App/Config/Value.php +++ b/lib/internal/Magento/Framework/App/Config/Value.php @@ -8,7 +8,7 @@ namespace Magento\Framework\App\Config; /** * Config data model * - * @method \Magento\Framework\Model\ModelResource\Db\AbstractDb getResource() + * @method \Magento\Framework\Model\ResourceModel\Db\AbstractDb getResource() * @method string getScope() * @method \Magento\Framework\App\Config\ValueInterface setScope(string $value) * @method int getScopeId() @@ -46,7 +46,7 @@ class Value extends \Magento\Framework\Model\AbstractModel implements \Magento\F * @param \Magento\Framework\Model\Context $context * @param \Magento\Framework\Registry $registry * @param \Magento\Framework\App\Config\ScopeConfigInterface $config - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -54,7 +54,7 @@ class Value extends \Magento\Framework\Model\AbstractModel implements \Magento\F \Magento\Framework\Model\Context $context, \Magento\Framework\Registry $registry, \Magento\Framework\App\Config\ScopeConfigInterface $config, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/lib/internal/Magento/Framework/App/ResourceConnection.php b/lib/internal/Magento/Framework/App/ResourceConnection.php index 13e106244841a884d72ed67562bd97bdfce696c9..56d220ebb57f48d0b45f8fa60fd40801c83c01e7 100644 --- a/lib/internal/Magento/Framework/App/ResourceConnection.php +++ b/lib/internal/Magento/Framework/App/ResourceConnection.php @@ -9,7 +9,7 @@ namespace Magento\Framework\App; use Magento\Framework\App\DeploymentConfig; use Magento\Framework\App\ResourceConnection\ConfigInterface as ResourceConfigInterface; -use Magento\Framework\Model\ModelResource\Type\Db\ConnectionFactoryInterface; +use Magento\Framework\Model\ResourceModel\Type\Db\ConnectionFactoryInterface; use Magento\Framework\Config\ConfigOptionsListConstants; class ResourceConnection diff --git a/lib/internal/Magento/Framework/App/ResourceConnection/ConnectionFactory.php b/lib/internal/Magento/Framework/App/ResourceConnection/ConnectionFactory.php index 6a9922c138c84eb3c03ac8ded197439f7b753424..7924f4babdac95420d54fdd34cf25d0032ae22cf 100644 --- a/lib/internal/Magento/Framework/App/ResourceConnection/ConnectionFactory.php +++ b/lib/internal/Magento/Framework/App/ResourceConnection/ConnectionFactory.php @@ -7,7 +7,7 @@ */ namespace Magento\Framework\App\ResourceConnection; -use Magento\Framework\Model\ModelResource\Type\Db\ConnectionFactory as ModelConnectionFactory; +use Magento\Framework\Model\ResourceModel\Type\Db\ConnectionFactory as ModelConnectionFactory; use Magento\Framework\DB\Adapter\DdlCache; class ConnectionFactory extends ModelConnectionFactory diff --git a/lib/internal/Magento/Framework/App/Test/Unit/AclResourceTest.php b/lib/internal/Magento/Framework/App/Test/Unit/AclResourceTest.php index c32a284af11d7b8cc2bdd040146ed575e9339ac0..265ca6f2964e4370e733d395f23a2848c4c66666 100644 --- a/lib/internal/Magento/Framework/App/Test/Unit/AclResourceTest.php +++ b/lib/internal/Magento/Framework/App/Test/Unit/AclResourceTest.php @@ -8,7 +8,7 @@ namespace Magento\Framework\App\Test\Unit; use Magento\Framework\App\ResourceConnection; use Magento\Framework\Config\ConfigOptionsListConstants; -use Magento\Framework\Model\ModelResource\Type\Db\ConnectionFactoryInterface; +use Magento\Framework\Model\ResourceModel\Type\Db\ConnectionFactoryInterface; class AclResourceTest extends \PHPUnit_Framework_TestCase { diff --git a/lib/internal/Magento/Framework/App/Utility/Files.php b/lib/internal/Magento/Framework/App/Utility/Files.php index e19dd388fc6d3845cab20e101ef4535086cc59d6..7802320f6fc32b2bf77b106237f35ddde8699f43 100644 --- a/lib/internal/Magento/Framework/App/Utility/Files.php +++ b/lib/internal/Magento/Framework/App/Utility/Files.php @@ -106,7 +106,7 @@ class Files { $result = []; foreach ($files as $file) { - $result[$file] = [$file]; + $result[substr($file, strlen(BP))] = [$file]; } return $result; } diff --git a/lib/internal/Magento/Framework/Autoload/AutoloaderInterface.php b/lib/internal/Magento/Framework/Autoload/AutoloaderInterface.php index 6349cbbafcb566e148ccabc229ab88a85ac813a5..dad4426c96bf8ba03d016abcf36c286fc2252517 100644 --- a/lib/internal/Magento/Framework/Autoload/AutoloaderInterface.php +++ b/lib/internal/Magento/Framework/Autoload/AutoloaderInterface.php @@ -55,4 +55,12 @@ interface AutoloaderInterface * @return bool */ public function loadClass($className); + + /** + * Get filepath of class on system or false if it does not exist + * + * @param string $className + * @return string|bool + */ + public function findFile($className); } diff --git a/lib/internal/Magento/Framework/Autoload/ClassLoaderWrapper.php b/lib/internal/Magento/Framework/Autoload/ClassLoaderWrapper.php index f96162b350052e6c94d716757fdf95e01dabe563..c1f2f5d15a12857e5c6ba0e850a832d6541fc72d 100644 --- a/lib/internal/Magento/Framework/Autoload/ClassLoaderWrapper.php +++ b/lib/internal/Magento/Framework/Autoload/ClassLoaderWrapper.php @@ -28,12 +28,7 @@ class ClassLoaderWrapper implements AutoloaderInterface } /** - * Adds a PSR-4 mapping from a namespace prefix to directories to search in for the corresponding class - * - * @param string $nsPrefix The namespace prefix of the PSR-4 mapping - * @param string|array $paths The path or paths to look in for the given prefix - * @param bool $prepend Whether to append the given path or paths to the paths already associated with the prefix - * @return void + * {@inheritdoc} */ public function addPsr4($nsPrefix, $paths, $prepend = false) { @@ -41,12 +36,7 @@ class ClassLoaderWrapper implements AutoloaderInterface } /** - * Adds a PSR-0 mapping from a namespace prefix to directories to search in for the corresponding class - * - * @param string $nsPrefix The namespace prefix of the PSR-0 mapping - * @param string|array $paths The path or paths to look in for the given prefix - * @param bool $prepend Whether to append the given path or paths to the paths already associated with the prefix - * @return void + * {@inheritdoc} */ public function addPsr0($nsPrefix, $paths, $prepend = false) { @@ -54,11 +44,7 @@ class ClassLoaderWrapper implements AutoloaderInterface } /** - * Creates new PSR-0 mappings from the given prefix to the given set of paths, eliminating previous mappings - * - * @param string $nsPrefix The namespace prefix of the PSR-0 mapping - * @param string|array $paths The path or paths to look in for the given prefix - * @return void + * {@inheritdoc} */ public function setPsr0($nsPrefix, $paths) { @@ -66,11 +52,7 @@ class ClassLoaderWrapper implements AutoloaderInterface } /** - * Creates new PSR-4 mappings from the given prefix to the given set of paths, eliminating previous mappings - * - * @param string $nsPrefix The namespace prefix of the PSR-0 mapping - * @param string|array $paths The path or paths to look in for the given prefix - * @return void + * {@inheritdoc} */ public function setPsr4($nsPrefix, $paths) { @@ -78,13 +60,28 @@ class ClassLoaderWrapper implements AutoloaderInterface } /** - * Attempts to load a class and returns true if successful. - * - * @param string $className - * @return bool + * {@inheritdoc} + * @codeCoverageIgnore */ public function loadClass($className) { return $this->autoloader->loadClass($className) === true; } + + /** + * {@inheritdoc} + * @codeCoverageIgnore + */ + public function findFile($className) + { + /** + * Composer remembers that files don't exist even after they are generated. This clears the entry for + * $className so we can check the filesystem again for class existence. + */ + if ($className[0] === '\\') { + $className = substr($className, 1); + } + $this->autoloader->addClassMap([$className => null]); + return $this->autoloader->findFile($className); + } } diff --git a/lib/internal/Magento/Framework/Backup/Filesystem/Rollback/Fs.php b/lib/internal/Magento/Framework/Backup/Filesystem/Rollback/Fs.php index 16219421a64b104b8cef0fa7a6c8428f62e8df9b..1f85f53090e9453084b30db03f1f4f2626c4ca5b 100644 --- a/lib/internal/Magento/Framework/Backup/Filesystem/Rollback/Fs.php +++ b/lib/internal/Magento/Framework/Backup/Filesystem/Rollback/Fs.php @@ -54,7 +54,7 @@ class Fs extends AbstractRollback new \Magento\Framework\Archive\Gz(); new \Magento\Framework\Archive\Helper\File(''); new \Magento\Framework\Archive\Helper\File\Gz(''); - new \Magento\Framework\Exception\LocalizedException(new \Magento\Framework\Phrase('')); + new \Magento\Framework\Exception\LocalizedException(new \Magento\Framework\Phrase('dummy')); $fsHelper->rm($this->_snapshot->getRootDir(), $this->_snapshot->getIgnorePaths()); $archiver->unpack($snapshotPath, $this->_snapshot->getRootDir()); diff --git a/lib/internal/Magento/Framework/Code/Generator.php b/lib/internal/Magento/Framework/Code/Generator.php index da6d60b14ed9bff46b34410eba6c2c0bb4136926..edd02f6c2049282b6af2fa7f3b8e7d2559492857 100644 --- a/lib/internal/Magento/Framework/Code/Generator.php +++ b/lib/internal/Magento/Framework/Code/Generator.php @@ -74,31 +74,28 @@ class Generator */ public function generateClass($className) { - // check if source class a generated entity - $entity = null; - $entityName = null; + $resultEntityType = null; + $sourceClassName = null; foreach ($this->_generatedEntities as $entityType => $generatorClass) { $entitySuffix = ucfirst($entityType); - // if $className string ends on $entitySuffix substring + // If $className string ends with $entitySuffix substring if (strrpos($className, $entitySuffix) === strlen($className) - strlen($entitySuffix)) { - $entity = $entityType; - $entityName = rtrim( + $resultEntityType = $entityType; + $sourceClassName = rtrim( substr($className, 0, -1 * strlen($entitySuffix)), '\\' ); break; } } - if (!$entity || !$entityName) { - return self::GENERATION_ERROR; - } else if ($this->definedClasses->classLoadable($className)) { - return self::GENERATION_SKIP; - } else if (!isset($this->_generatedEntities[$entity])) { - throw new \InvalidArgumentException('Unknown generation entity.'); + + if ($skipReason = $this->shouldSkipGeneration($resultEntityType, $sourceClassName, $className)) { + return $skipReason; } - $generatorClass = $this->_generatedEntities[$entity]; + + $generatorClass = $this->_generatedEntities[$resultEntityType]; /** @var EntityAbstract $generator */ - $generator = $this->createGeneratorInstance($generatorClass, $entityName, $className); + $generator = $this->createGeneratorInstance($generatorClass, $sourceClassName, $className); if ($generator !== null) { $this->tryToLoadSourceClass($className, $generator); if (!($file = $generator->generate())) { @@ -107,18 +104,23 @@ class Generator new \Magento\Framework\Phrase(implode(' ', $errors)) ); } - $this->includeFile($file); + $this->tryToIncludeFile($file, $className); return self::GENERATION_SUCCESS; } } /** + * Include file only if the class is not already defined in memory + * * @param string $fileName + * @param string $className * @return void */ - public function includeFile($fileName) + public function tryToIncludeFile($fileName, $className) { - include $fileName; + if (!$this->definedClasses->isClassLoadableFromMemory($className)) { + include $fileName; + } } /** @@ -176,7 +178,7 @@ class Generator protected function tryToLoadSourceClass($className, $generator) { $sourceClassName = $generator->getSourceClassName(); - if (!$this->definedClasses->classLoadable($sourceClassName)) { + if (!$this->definedClasses->isClassLoadable($sourceClassName)) { if ($this->generateClass($sourceClassName) !== self::GENERATION_SUCCESS) { throw new \Magento\Framework\Exception\LocalizedException( new \Magento\Framework\Phrase( @@ -187,4 +189,24 @@ class Generator } } } + + /** + * Perform validation surrounding source and result classes and entity type + * + * @param string $resultEntityType + * @param string $sourceClassName + * @param string $resultClass + * @return string|bool + */ + protected function shouldSkipGeneration($resultEntityType, $sourceClassName, $resultClass) + { + if (!$resultEntityType || !$sourceClassName) { + return self::GENERATION_ERROR; + } else if ($this->definedClasses->isClassLoadableFromDisc($resultClass)) { + return self::GENERATION_SKIP; + } else if (!isset($this->_generatedEntities[$resultEntityType])) { + throw new \InvalidArgumentException('Unknown generation entity.'); + } + return false; + } } diff --git a/lib/internal/Magento/Framework/Code/Generator/DefinedClasses.php b/lib/internal/Magento/Framework/Code/Generator/DefinedClasses.php index 20621b72ee3c8c25cae84c0717370bdc09ea21c1..d0babb79f2f562fdefb486ac70f12397dc373af7 100644 --- a/lib/internal/Magento/Framework/Code/Generator/DefinedClasses.php +++ b/lib/internal/Magento/Framework/Code/Generator/DefinedClasses.php @@ -14,40 +14,37 @@ use Magento\Framework\Autoload\AutoloaderRegistry; class DefinedClasses { /** - * Determine if a class can be loaded without using the Code\Generator\Autoloader. + * Determine if a class can be loaded without using Code\Generator\Autoloader. * * @param string $className * @return bool */ - public function classLoadable($className) + public function isClassLoadable($className) { - if ($this->isAlreadyDefined($className)) { - return true; - } - return $this->performAutoload($className); + return $this->isClassLoadableFromMemory($className) || $this->isClassLoadableFromDisc($className); } /** - * Checks whether class is already defined + * Determine if a class exists in memory * * @param string $className * @return bool */ - protected function isAlreadyDefined($className) + public function isClassLoadableFromMemory($className) { return class_exists($className, false) || interface_exists($className, false); } /** - * Performs autoload for given class name + * Determine if a class exists on disc * * @param string $className * @return bool */ - protected function performAutoload($className) + public function isClassLoadableFromDisc($className) { try { - return AutoloaderRegistry::getAutoloader()->loadClass($className); + return (bool)AutoloaderRegistry::getAutoloader()->findFile($className); } catch (\Exception $e) { // Couldn't get access to the autoloader so we need to allow class_exists to call autoloader chain return (class_exists($className) || interface_exists($className)); diff --git a/lib/internal/Magento/Framework/Code/Generator/EntityAbstract.php b/lib/internal/Magento/Framework/Code/Generator/EntityAbstract.php index 82c7a210c0f11e79597e3b7939b7e50730d19077..fee367f49ca8046d5088bdbda5167bbcab90f82f 100644 --- a/lib/internal/Magento/Framework/Code/Generator/EntityAbstract.php +++ b/lib/internal/Magento/Framework/Code/Generator/EntityAbstract.php @@ -249,10 +249,10 @@ abstract class EntityAbstract $resultClassName = $this->_getResultClassName(); $resultDir = $this->_ioObject->getResultFileDirectory($resultClassName); - if (!$this->definedClasses->classLoadable($sourceClassName)) { + if (!$this->definedClasses->isClassLoadable($sourceClassName)) { $this->_addError('Source class ' . $sourceClassName . ' doesn\'t exist.'); return false; - } elseif ($this->definedClasses->classLoadable($resultClassName)) { + } elseif ($this->definedClasses->isClassLoadableFromDisc($resultClassName)) { $this->_addError('Result class ' . $resultClassName . ' already exists.'); return false; } elseif ( diff --git a/lib/internal/Magento/Framework/Code/Test/Unit/Generator/DefinedClassesTest.php b/lib/internal/Magento/Framework/Code/Test/Unit/Generator/DefinedClassesTest.php new file mode 100644 index 0000000000000000000000000000000000000000..e0f13bab0b3733f36d8d3b613f2068cf3ecf5f08 --- /dev/null +++ b/lib/internal/Magento/Framework/Code/Test/Unit/Generator/DefinedClassesTest.php @@ -0,0 +1,74 @@ +<?php +/*** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +// @codingStandardsIgnoreStart +namespace Magento\Framework\Code\Generator { + use Magento\Framework\Code\Test\Unit\Generator\DefinedClassesTest; + + function class_exists($className) + { + return DefinedClassesTest::$definedClassesTestActive + ? $className === DefinedClassesTest::$classInMemory + : \class_exists($className); + } +} + +namespace Magento\Framework\Code\Test\Unit\Generator { + use Magento\Framework\Autoload\AutoloaderInterface; + use Magento\Framework\Autoload\AutoloaderRegistry; + use Magento\Framework\Code\Generator\DefinedClasses; + + // @codingStandardsIgnoreEnd + + class DefinedClassesTest extends \PHPUnit_Framework_TestCase + { + /** @var bool */ + public static $definedClassesTestActive = false; + + public static $classInMemory = 'Class\That\Exists\In\Memory'; + + /** @var DefinedClasses */ + private $model; + + /** @var AutoloaderInterface */ + private $initAutoloader; + + public function setUp() + { + $this->model = new DefinedClasses(); + self::$definedClassesTestActive = true; + $this->initAutoloader = AutoloaderRegistry::getAutoloader(); + } + + public function tearDown() + { + self::$definedClassesTestActive = false; + AutoloaderRegistry::registerAutoloader($this->initAutoloader); + } + + public function testClassLoadableFromMemory() + { + $this->assertTrue($this->model->isClassLoadable(self::$classInMemory)); + } + + public function testClassLoadableFromDisc() + { + $classOnDisc = 'Class\That\Exists\On\Disc'; + /** + * @var AutoloaderInterface | \PHPUnit_Framework_MockObject_MockObject $autoloaderMock + */ + $autoloaderMock = $this->getMock('\Magento\Framework\Autoload\AutoloaderInterface'); + $autoloaderMock->expects($this->once())->method('findFile')->with($classOnDisc)->willReturn(true); + AutoloaderRegistry::registerAutoloader($autoloaderMock); + $this->assertTrue($this->model->isClassLoadable($classOnDisc)); + } + + public function testClassNotLoadable() + { + $this->assertFalse($this->model->isClassLoadable('Class\Does\Not\Exist')); + } + } +} diff --git a/lib/internal/Magento/Framework/Code/Test/Unit/Generator/EntityAbstractTest.php b/lib/internal/Magento/Framework/Code/Test/Unit/Generator/EntityAbstractTest.php index 8ed735e0af5a5309574a42bafa520f9b90019367..cf74e8a67f1573a8eb9ce202c35014f9ca6e263b 100644 --- a/lib/internal/Magento/Framework/Code/Test/Unit/Generator/EntityAbstractTest.php +++ b/lib/internal/Magento/Framework/Code/Test/Unit/Generator/EntityAbstractTest.php @@ -225,13 +225,13 @@ class EntityAbstractTest extends \PHPUnit_Framework_TestCase ) { // Configure DefinedClasses mock $definedClassesMock = $this->getMock('Magento\Framework\Code\Generator\DefinedClasses'); - $definedClassesMock->expects($this->at(0)) - ->method('classLoadable') + $definedClassesMock->expects($this->once()) + ->method('isClassLoadable') ->with(self::SOURCE_CLASS) ->willReturn($sourceClassExists); if ($resultClassExists) { - $definedClassesMock->expects($this->at(1)) - ->method('classLoadable') + $definedClassesMock->expects($this->once()) + ->method('isClassLoadableFromDisc') ->with(self::RESULT_CLASS) ->willReturn($resultClassExists); } diff --git a/lib/internal/Magento/Framework/Code/Test/Unit/GeneratorTest.php b/lib/internal/Magento/Framework/Code/Test/Unit/GeneratorTest.php index e01f4c529c8274aaa48bc8b37b409da7037a4191..88a043753daa73776e941541651e7cc3b237e555 100644 --- a/lib/internal/Magento/Framework/Code/Test/Unit/GeneratorTest.php +++ b/lib/internal/Magento/Framework/Code/Test/Unit/GeneratorTest.php @@ -75,7 +75,9 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase ); $objectManagerMock = $this->getMock('Magento\Framework\ObjectManagerInterface'); $fullClassName = $className . $entityType; - $entityGeneratorMock = $this->getMockBuilder($fullClassName)->disableOriginalConstructor()->getMock(); + $entityGeneratorMock = $this->getMockBuilder('\Magento\Framework\Code\Generator\EntityAbstract') + ->disableOriginalConstructor() + ->getMock(); $objectManagerMock->expects($this->once())->method('create')->willReturn($entityGeneratorMock); $this->model->setObjectManager($objectManagerMock); $this->model->generateClass($fullClassName); @@ -88,7 +90,7 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase { $definedClassesMock = $this->getMock('Magento\Framework\Code\Generator\DefinedClasses'); $definedClassesMock->expects($this->any()) - ->method('classLoadable') + ->method('isClassLoadableFromDisc') ->willReturn(true); $this->model = new \Magento\Framework\Code\Generator( $this->ioObjectMock, @@ -133,7 +135,9 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase $expectedEntities = array_values($this->expectedEntities); $resultClassName = self::SOURCE_CLASS . ucfirst(array_shift($expectedEntities)); $objectManagerMock = $this->getMock('Magento\Framework\ObjectManagerInterface'); - $entityGeneratorMock = $this->getMockBuilder($resultClassName)->disableOriginalConstructor()->getMock(); + $entityGeneratorMock = $this->getMockBuilder('\Magento\Framework\Code\Generator\EntityAbstract') + ->disableOriginalConstructor() + ->getMock(); $objectManagerMock->expects($this->once())->method('create')->willReturn($entityGeneratorMock); $this->model->setObjectManager($objectManagerMock); $this->model->generateClass($resultClassName); diff --git a/lib/internal/Magento/Framework/Composer/ComposerInformation.php b/lib/internal/Magento/Framework/Composer/ComposerInformation.php index 0f9c9d489b2a27769c58b6390e64e692d66a0741..2b216df65c1877771735b8ab04d54a35c0abc160 100755 --- a/lib/internal/Magento/Framework/Composer/ComposerInformation.php +++ b/lib/internal/Magento/Framework/Composer/ComposerInformation.php @@ -275,4 +275,15 @@ class ComposerInformation { return self::$packageTypes; } + + /** + * @param string $name + * @param string $version + * @return array + */ + public function getPackageRequirements($name, $version) + { + $package = $this->composer->getRepositoryManager()->findPackage($name, $version); + return $package->getRequires(); + } } diff --git a/lib/internal/Magento/Framework/Config/View.php b/lib/internal/Magento/Framework/Config/View.php index 00aab9b33e2e3feffe76c3b908c9deb33e628e24..98a9614018816622d915ab5f10522ba88751ee83 100644 --- a/lib/internal/Magento/Framework/Config/View.php +++ b/lib/internal/Magento/Framework/Config/View.php @@ -80,12 +80,7 @@ class View extends \Magento\Framework\Config\AbstractXml switch ($childNode->tagName) { case 'vars': $moduleName = $childNode->getAttribute('module'); - /** @var $varNode \DOMElement */ - foreach ($childNode->getElementsByTagName('var') as $varNode) { - $varName = $varNode->getAttribute('name'); - $varValue = $varNode->nodeValue; - $result[$childNode->tagName][$moduleName][$varName] = $varValue; - } + $result[$childNode->tagName][$moduleName] = $this->parseVarElement($childNode); break; case 'exclude': /** @var $itemNode \DOMElement */ @@ -111,6 +106,27 @@ class View extends \Magento\Framework\Config\AbstractXml return $result; } + /** + * Recursive parser for <var> nodes + * + * @param \DOMElement $node + * @return string|boolean|number|null|[] + */ + protected function parseVarElement(\DOMElement $node) + { + $result = []; + for ($varNode = $node->firstChild; $varNode !== null; $varNode = $varNode->nextSibling) { + if ($varNode instanceof \DOMElement && $varNode->tagName == "var") { + $varName = $varNode->getAttribute('name'); + $result[$varName] = $this->parseVarElement($varNode); + } + } + if (!count($result)) { + $result = $node->nodeValue; + } + return $result; + } + /** * Get a list of variables in scope of specified module * @@ -129,11 +145,24 @@ class View extends \Magento\Framework\Config\AbstractXml * * @param string $module * @param string $var - * @return string|false + * @return string|false|array */ public function getVarValue($module, $var) { - return isset($this->_data['vars'][$module][$var]) ? $this->_data['vars'][$module][$var] : false; + if (!isset($this->_data['vars'][$module])) { + return false; + } + + $value = $this->_data['vars'][$module]; + foreach (explode('/', $var) as $node) { + if (is_array($value) && isset($value[$node])) { + $value = $value[$node]; + } else { + return false; + } + } + + return $value; } /** diff --git a/lib/internal/Magento/Framework/Config/etc/view.xsd b/lib/internal/Magento/Framework/Config/etc/view.xsd index 21a371d863342b874b4bc6a7c4c41d487b2fff57..1ded09402a6b0f999dbd24c2bfefa599bd012d72 100644 --- a/lib/internal/Magento/Framework/Config/etc/view.xsd +++ b/lib/internal/Magento/Framework/Config/etc/view.xsd @@ -12,15 +12,7 @@ <xs:element name="vars" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> - <xs:element name="var" maxOccurs="unbounded"> - <xs:complexType> - <xs:simpleContent> - <xs:extension base="xs:string"> - <xs:attribute name="name" type="xs:string" use="required"/> - </xs:extension> - </xs:simpleContent> - </xs:complexType> - </xs:element> + <xs:element name="var" type="varType" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="module" type="xs:string" use="required"/> </xs:complexType> @@ -38,6 +30,13 @@ <xs:field xpath="@module"/> </xs:unique> </xs:element> + <xs:complexType name="varType" mixed="true"> + <xs:sequence minOccurs="0" maxOccurs="unbounded"> + <xs:element name="var" type="varType"/> + </xs:sequence> + <xs:attribute name="name" type="xs:string" use="required"/> + <xs:attribute name="value" type="xs:string"/> + </xs:complexType> <xs:complexType name="mediaType" mixed="true"> <xs:all /> </xs:complexType> diff --git a/lib/internal/Magento/Framework/DB/AbstractMapper.php b/lib/internal/Magento/Framework/DB/AbstractMapper.php index eb34aa778a066bcf0113cc388891e3ce3fd215fe..630e3ceb0ae3be2cd9ce9ee671cd49abb962569b 100644 --- a/lib/internal/Magento/Framework/DB/AbstractMapper.php +++ b/lib/internal/Magento/Framework/DB/AbstractMapper.php @@ -29,7 +29,7 @@ abstract class AbstractMapper implements MapperInterface /** * Resource instance * - * @var \Magento\Framework\Model\ModelResource\Db\AbstractDb + * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb */ protected $resource; @@ -206,7 +206,7 @@ abstract class AbstractMapper implements MapperInterface /** * Get resource instance * - * @return \Magento\Framework\Model\ModelResource\Db\AbstractDb + * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb */ public function getResource() { diff --git a/lib/internal/Magento/Framework/DB/MapperInterface.php b/lib/internal/Magento/Framework/DB/MapperInterface.php index a8d6a54b918f2d27ee87545e184c349230689054..4bf1e3be23c26cbaae0e54c801248ef9b49a7955 100644 --- a/lib/internal/Magento/Framework/DB/MapperInterface.php +++ b/lib/internal/Magento/Framework/DB/MapperInterface.php @@ -25,7 +25,7 @@ interface MapperInterface /** * Get resource instance * - * @return \Magento\Framework\Model\ModelResource\Db\AbstractDb + * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb */ public function getResource(); diff --git a/lib/internal/Magento/Framework/DB/Query.php b/lib/internal/Magento/Framework/DB/Query.php index 22368c1227bfdcf41dd08a36d80a236784681839..203a5158f644f2765e6ecf40bb38be69576cf8e4 100644 --- a/lib/internal/Magento/Framework/DB/Query.php +++ b/lib/internal/Magento/Framework/DB/Query.php @@ -27,7 +27,7 @@ class Query implements QueryInterface /** * Resource instance * - * @var \Magento\Framework\Model\ModelResource\Db\AbstractDb + * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb */ protected $resource; @@ -78,13 +78,13 @@ class Query implements QueryInterface /** * @param \Magento\Framework\DB\Select $select * @param \Magento\Framework\Api\CriteriaInterface $criteria - * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource + * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy */ public function __construct( \Magento\Framework\DB\Select $select, \Magento\Framework\Api\CriteriaInterface $criteria, - \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource, + \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource, \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy ) { $this->select = $select; @@ -224,7 +224,7 @@ class Query implements QueryInterface /** * Get resource instance * - * @return \Magento\Framework\Model\ModelResource\Db\AbstractDb + * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb */ public function getResource() { diff --git a/lib/internal/Magento/Framework/DB/QueryBuilder.php b/lib/internal/Magento/Framework/DB/QueryBuilder.php index 02eccb25e111c5f68561e369ad8b393671f443f8..c1e25ed0981eba0e1a1c12be4c2f49df75b55283 100644 --- a/lib/internal/Magento/Framework/DB/QueryBuilder.php +++ b/lib/internal/Magento/Framework/DB/QueryBuilder.php @@ -25,7 +25,7 @@ class QueryBuilder /** * Resource instance * - * @var \Magento\Framework\Model\ModelResource\Db\AbstractDb + * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb */ protected $resource; @@ -65,10 +65,10 @@ class QueryBuilder /** * Set Resource * - * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource + * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource * @return void */ - public function setResource(\Magento\Framework\Model\ModelResource\Db\AbstractDb $resource) + public function setResource(\Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource) { $this->resource = $resource; } diff --git a/lib/internal/Magento/Framework/DB/QueryInterface.php b/lib/internal/Magento/Framework/DB/QueryInterface.php index d1806a63466a576168db2df6f18157b6c5dcd5d6..e24290315926bda65d79eb0e57eac5b964d33d56 100644 --- a/lib/internal/Magento/Framework/DB/QueryInterface.php +++ b/lib/internal/Magento/Framework/DB/QueryInterface.php @@ -86,7 +86,7 @@ interface QueryInterface /** * Get resource instance * - * @return \Magento\Framework\Model\ModelResource\Db\AbstractDb + * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb */ public function getResource(); diff --git a/lib/internal/Magento/Framework/DB/Test/Unit/AbstractMapperTest.php b/lib/internal/Magento/Framework/DB/Test/Unit/AbstractMapperTest.php index 102cf2c9e1b8fa0dda01fdad9d89750fce6ce058..deec1825b9ef6000d9aed189b24830d8c6a417f1 100644 --- a/lib/internal/Magento/Framework/DB/Test/Unit/AbstractMapperTest.php +++ b/lib/internal/Magento/Framework/DB/Test/Unit/AbstractMapperTest.php @@ -16,7 +16,7 @@ use Magento\Framework\DB\Select; class AbstractMapperTest extends \PHPUnit_Framework_TestCase { /** - * @var \Magento\Framework\Model\ModelResource\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject */ protected $resourceMock; @@ -63,7 +63,7 @@ class AbstractMapperTest extends \PHPUnit_Framework_TestCase protected function setUp() { $this->resourceMock = $this->getMockForAbstractClass( - 'Magento\Framework\Model\ModelResource\Db\AbstractDb', + 'Magento\Framework\Model\ResourceModel\Db\AbstractDb', [], '', false, diff --git a/lib/internal/Magento/Framework/DB/Test/Unit/QueryTest.php b/lib/internal/Magento/Framework/DB/Test/Unit/QueryTest.php index 13626313c980915a1e149b564ce1969beae2b524..d466786094ba8309672e545c8aa9cb301975b71c 100644 --- a/lib/internal/Magento/Framework/DB/Test/Unit/QueryTest.php +++ b/lib/internal/Magento/Framework/DB/Test/Unit/QueryTest.php @@ -21,7 +21,7 @@ class QueryTest extends \PHPUnit_Framework_TestCase protected $criteriaMock; /** - * @var \Magento\Framework\Model\ModelResource\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject */ protected $resourceMock; @@ -71,7 +71,7 @@ class QueryTest extends \PHPUnit_Framework_TestCase [] ); $this->resourceMock = $this->getMockForAbstractClass( - 'Magento\Framework\Model\ModelResource\Db\AbstractDb', + 'Magento\Framework\Model\ResourceModel\Db\AbstractDb', [], '', false, diff --git a/lib/internal/Magento/Framework/Data/Collection/AbstractDb.php b/lib/internal/Magento/Framework/Data/Collection/AbstractDb.php index 0c602a4a091526127dacc6abe2bbb38cca79d094..339c76f06c25b140c0331bdf4ac1bc3778f8254b 100644 --- a/lib/internal/Magento/Framework/Data/Collection/AbstractDb.php +++ b/lib/internal/Magento/Framework/Data/Collection/AbstractDb.php @@ -117,7 +117,7 @@ abstract class AbstractDb extends \Magento\Framework\Data\Collection /** * Get resource instance. * - * @return \Magento\Framework\Model\ModelResource\Db\AbstractDb + * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb */ abstract public function getResource(); diff --git a/lib/internal/Magento/Framework/Data/Form/Element/Checkboxes.php b/lib/internal/Magento/Framework/Data/Form/Element/Checkboxes.php index 1eb259438a5b2c39b1a9d82fc544ebc4fe828a52..c4f88313fc33915e8c80f76fe9e2b02567e2484a 100644 --- a/lib/internal/Magento/Framework/Data/Form/Element/Checkboxes.php +++ b/lib/internal/Magento/Framework/Data/Form/Element/Checkboxes.php @@ -194,10 +194,10 @@ class Checkboxes extends AbstractElement { $id = $this->getHtmlId() . '_' . $this->_escape($option['value']); - $html = '<div class="field choice"><input id="' . $id . '"'; + $html = '<div class="field choice admin__field admin__field-option"><input id="' . $id . '"'; foreach ($this->getHtmlAttributes() as $attribute) { if ($value = $this->getDataUsingMethod($attribute, $option['value'])) { - $html .= ' ' . $attribute . '="' . $value . '"'; + $html .= ' ' . $attribute . '="' . $value . '" class="admin__control-checkbox"'; } } $html .= ' value="' . @@ -205,9 +205,9 @@ class Checkboxes extends AbstractElement '" />' . ' <label for="' . $id . - '">' . + '" class="admin__field-label"><span>' . $option['label'] . - '</label></div>' . + '</span></label></div>' . "\n"; return $html; } diff --git a/lib/internal/Magento/Framework/Data/Form/Element/Editor.php b/lib/internal/Magento/Framework/Data/Form/Element/Editor.php index a5b5c41168bf0f7867cf3f53a47e8828fa210de6..9b33d71b7ca3bd79ed917ccabd7a53578f57df9f 100644 --- a/lib/internal/Magento/Framework/Data/Form/Element/Editor.php +++ b/lib/internal/Magento/Framework/Data/Form/Element/Editor.php @@ -385,14 +385,14 @@ class Editor extends Textarea protected function _wrapIntoContainer($html) { if (!$this->getConfig('use_container')) { - return $html; + return '<div class="admin__control-wysiwig">' .$html . '</div>'; } $html = '<div id="editor' . $this->getHtmlId() . '"' . ($this->getConfig( 'no_display' ) ? ' style="display:none;"' : '') . ($this->getConfig( 'container_class' - ) ? ' class="' . $this->getConfig( + ) ? ' class="admin__control-wysiwig ' . $this->getConfig( 'container_class' ) . '"' : '') . '>' . $html . '</div>'; diff --git a/lib/internal/Magento/Framework/Data/Form/Element/Note.php b/lib/internal/Magento/Framework/Data/Form/Element/Note.php index be04c5e2bea4300a1680c3088ca129299b77226e..06cad0f195e18a94ca19fb6a75983c6e676f19f0 100644 --- a/lib/internal/Magento/Framework/Data/Form/Element/Note.php +++ b/lib/internal/Magento/Framework/Data/Form/Element/Note.php @@ -39,7 +39,7 @@ class Note extends AbstractElement $html = $this->getBeforeElementHtml() . '<div id="' . $this->getHtmlId() - . '" class="control-value">' + . '" class="control-value admin__field-value">' . $this->getText() . '</div>' . $this->getAfterElementHtml(); diff --git a/lib/internal/Magento/Framework/Data/Test/Unit/Collection/DbCollection.php b/lib/internal/Magento/Framework/Data/Test/Unit/Collection/DbCollection.php index c334bf20d4ddb72ee99a2d6cae10d152d99575e9..144ef6fe20dfcbd000dc41088b85c6f4b43fe244 100644 --- a/lib/internal/Magento/Framework/Data/Test/Unit/Collection/DbCollection.php +++ b/lib/internal/Magento/Framework/Data/Test/Unit/Collection/DbCollection.php @@ -11,17 +11,17 @@ namespace Magento\Framework\Data\Test\Unit\Collection; class DbCollection extends \Magento\Framework\Data\Collection\AbstractDb { /** - * @var \Magento\Framework\Model\ModelResource\Db\AbstractDb + * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb */ private $resource; /** * Set DB resource for testing purposes. * - * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource + * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource * @return $this */ - public function setResource(\Magento\Framework\Model\ModelResource\Db\AbstractDb $resource) + public function setResource(\Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource) { $this->resource = $resource; return $this; @@ -30,7 +30,7 @@ class DbCollection extends \Magento\Framework\Data\Collection\AbstractDb /** * Get resource instance. * - * @return \Magento\Framework\Model\ModelResource\Db\AbstractDb + * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb */ public function getResource() { diff --git a/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/NoteTest.php b/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/NoteTest.php index 23e07bf7fb26c29d437b783bfe41b1d51c72340d..a76a244f1cebc86e3bb10264dead36fe8bdd7a4b 100644 --- a/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/NoteTest.php +++ b/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/NoteTest.php @@ -63,7 +63,7 @@ class NoteTest extends \PHPUnit_Framework_TestCase $this->_model->setValue('Note Text'); $html = $this->_model->getElementHtml(); $this->assertEquals( - "note_before<div id=\"note_id\" class=\"control-value\"></div>note_after", + "note_before<div id=\"note_id\" class=\"control-value admin__field-value\"></div>note_after", $html ); } diff --git a/lib/internal/Magento/Framework/Event/Invoker/InvokerDefault.php b/lib/internal/Magento/Framework/Event/Invoker/InvokerDefault.php index ede5035b9f945c5daaed59661a8afbd23f69b1a0..e6857ab67bbf396511aac0670cf9e36007e08322 100644 --- a/lib/internal/Magento/Framework/Event/Invoker/InvokerDefault.php +++ b/lib/internal/Magento/Framework/Event/Invoker/InvokerDefault.php @@ -58,24 +58,27 @@ class InvokerDefault implements \Magento\Framework\Event\InvokerInterface } else { $object = $this->_observerFactory->get($configuration['instance']); } - $this->_callObserverMethod($object, $configuration['method'], $observer); + $this->_callObserverMethod($object, $observer); } /** - * Performs non-existent observer method calls protection - * - * @param object $object - * @param string $method + * @param \Magento\Framework\Event\ObserverInterface $object * @param Observer $observer * @return $this * @throws \LogicException */ - protected function _callObserverMethod($object, $method, $observer) + protected function _callObserverMethod($object, $observer) { - if (method_exists($object, $method) && is_callable([$object, $method])) { - $object->{$method}($observer); + if ($object instanceof \Magento\Framework\Event\ObserverInterface) { + $object->execute($observer); } elseif ($this->_appState->getMode() == \Magento\Framework\App\State::MODE_DEVELOPER) { - throw new \LogicException('Method "' . $method . '" is not defined in "' . get_class($object) . '"'); + throw new \LogicException( + sprintf( + 'Observer "%s" must implement interface "%s"', + get_class($object), + 'Magento\Framework\Event\ObserverInterface' + ) + ); } return $this; } diff --git a/lib/internal/Magento/Framework/Event/Test/Unit/Config/_files/event_config.php b/lib/internal/Magento/Framework/Event/Test/Unit/Config/_files/event_config.php index 8551d739e833b5ef74770445c831142a95f45ad2..141b0b4b927db70ce66719f71a761bc8f228abce 100644 --- a/lib/internal/Magento/Framework/Event/Test/Unit/Config/_files/event_config.php +++ b/lib/internal/Magento/Framework/Event/Test/Unit/Config/_files/event_config.php @@ -5,13 +5,12 @@ */ return [ 'event_1' => [ - 'observer_1' => ['instance' => 'instance_1', 'method' => 'method_name_1', 'name' => 'observer_1'], - 'observer_5' => ['instance' => 'instance_5', 'method' => 'method_name_5', 'name' => 'observer_5'], + 'observer_1' => ['instance' => 'instance_1', 'name' => 'observer_1'], + 'observer_5' => ['instance' => 'instance_5', 'name' => 'observer_5'], ], 'event_2' => [ 'observer_2' => [ 'instance' => 'instance_2', - 'method' => 'method_name_2', 'disabled' => true, 'shared' => false, 'name' => 'observer_2', diff --git a/lib/internal/Magento/Framework/Event/Test/Unit/Config/_files/event_config.xml b/lib/internal/Magento/Framework/Event/Test/Unit/Config/_files/event_config.xml index 35aaf442c1512d280c42f0fe8f19b00f91adfea6..87dcbc0d45972af1c811ce8daebbfccbd1de3d8a 100644 --- a/lib/internal/Magento/Framework/Event/Test/Unit/Config/_files/event_config.xml +++ b/lib/internal/Magento/Framework/Event/Test/Unit/Config/_files/event_config.xml @@ -7,10 +7,10 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="event_1"> - <observer name="observer_1" instance="instance_1" method="method_name_1" /> - <observer name="observer_5" instance="instance_5" method="method_name_5" disabled="false" shared="true" /> + <observer name="observer_1" instance="instance_1" /> + <observer name="observer_5" instance="instance_5" disabled="false" shared="true" /> </event> <event name="event_2"> - <observer name="observer_2" instance="instance_2" method="method_name_2" disabled="true" shared="false" /> + <observer name="observer_2" instance="instance_2" disabled="true" shared="false" /> </event> </config> \ No newline at end of file diff --git a/lib/internal/Magento/Framework/Event/Test/Unit/Config/_files/invalidEventsXmlArray.php b/lib/internal/Magento/Framework/Event/Test/Unit/Config/_files/invalidEventsXmlArray.php index 0c243dc6ca3afd305f296aca6476c44fbc87bb4a..e74c0ddd8c76df31d7f477a03a07379c5d1a52c0 100644 --- a/lib/internal/Magento/Framework/Event/Test/Unit/Config/_files/invalidEventsXmlArray.php +++ b/lib/internal/Magento/Framework/Event/Test/Unit/Config/_files/invalidEventsXmlArray.php @@ -61,10 +61,7 @@ return [ '<?xml version="1.0"?><config><event name="some_name"><observer ' . 'name="observer_name" method="_wrong name"/></event></config>', [ - "Element 'observer', attribute 'method': [facet 'pattern'] The value '_wrong name' is not accepted by" . - " the pattern '[a-zA-Z]+'.\nLine: 1\n", - "Element 'observer', attribute 'method': '_wrong name' is not a valid value of the atomic type " . - "'methodName'.\nLine: 1\n" + "Element 'observer', attribute 'method': The attribute 'method' is not allowed.\nLine: 1\n" ], ] ]; diff --git a/lib/internal/Magento/Framework/Event/Test/Unit/Config/_files/valid_events.xml b/lib/internal/Magento/Framework/Event/Test/Unit/Config/_files/valid_events.xml index 88d806d805f38a711dd534075da09e23b9526e41..59f2c2a23c5c46f36533ba49f16ceb52bb783a4d 100644 --- a/lib/internal/Magento/Framework/Event/Test/Unit/Config/_files/valid_events.xml +++ b/lib/internal/Magento/Framework/Event/Test/Unit/Config/_files/valid_events.xml @@ -7,9 +7,9 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="authorization_roles_load_after"> - <observer name="observer_name" instance="Some_Test_Value" method="addDataAfterRoleLoad" disabled="false" shared="true"/> + <observer name="observer_name" instance="Some_Test_Value" disabled="false" shared="true"/> </event> <event name="authorization_roles_save_before"> - <observer name="second_name" instance="Some_Test_Value_Two" method="setDataBeforeRoleSave" /> + <observer name="second_name" instance="Some_Test_Value_Two" /> </event> </config> diff --git a/lib/internal/Magento/Framework/Event/Test/Unit/Invoker/InvokerDefaultTest.php b/lib/internal/Magento/Framework/Event/Test/Unit/Invoker/InvokerDefaultTest.php index 92755a558a47772af20bbc3cd9d24396d6acfc7a..848ff601f825b8b469f7b4d5f7685ce673c8ab69 100644 --- a/lib/internal/Magento/Framework/Event/Test/Unit/Invoker/InvokerDefaultTest.php +++ b/lib/internal/Magento/Framework/Event/Test/Unit/Invoker/InvokerDefaultTest.php @@ -43,8 +43,8 @@ class InvokerDefaultTest extends \PHPUnit_Framework_TestCase ); $this->_observerMock = $this->getMock('Magento\Framework\Event\Observer', [], [], '', false); $this->_listenerMock = $this->getMock( - 'Magento_Some_Model_Observer_Some', - ['method_name'], + 'Magento\Framework\Event\Test\Unit\Invoker\ObserverExample', + ['execute'], [], '', false @@ -67,7 +67,7 @@ class InvokerDefaultTest extends \PHPUnit_Framework_TestCase public function testDispatchWithNonSharedInstance() { - $this->_listenerMock->expects($this->once())->method('method_name'); + $this->_listenerMock->expects($this->once())->method('execute'); $this->_observerFactoryMock->expects($this->never())->method('get'); $this->_observerFactoryMock->expects( $this->once() @@ -80,14 +80,14 @@ class InvokerDefaultTest extends \PHPUnit_Framework_TestCase ); $this->_invokerDefault->dispatch( - ['shared' => false, 'instance' => 'class_name', 'method' => 'method_name', 'name' => 'observer'], + ['shared' => false, 'instance' => 'class_name', 'name' => 'observer'], $this->_observerMock ); } public function testDispatchWithSharedInstance() { - $this->_listenerMock->expects($this->once())->method('method_name'); + $this->_listenerMock->expects($this->once())->method('execute'); $this->_observerFactoryMock->expects($this->never())->method('create'); $this->_observerFactoryMock->expects( $this->once() @@ -110,8 +110,9 @@ class InvokerDefaultTest extends \PHPUnit_Framework_TestCase * @dataProvider dataProviderForMethodIsNotDefined * @expectedException \LogicException */ - public function testMethodIsNotDefinedExceptionWithEnabledDeveloperMode($shared) + public function testWrongInterfaceCallWithEnabledDeveloperMode($shared) { + $notObserver = $this->getMock('NotObserver'); $this->_observerFactoryMock->expects( $this->any() )->method( @@ -119,7 +120,7 @@ class InvokerDefaultTest extends \PHPUnit_Framework_TestCase )->with( 'class_name' )->will( - $this->returnValue($this->_listenerMock) + $this->returnValue($notObserver) ); $this->_observerFactoryMock->expects( $this->any() @@ -128,7 +129,7 @@ class InvokerDefaultTest extends \PHPUnit_Framework_TestCase )->with( 'class_name' )->will( - $this->returnValue($this->_listenerMock) + $this->returnValue($notObserver) ); $this->_appStateMock->expects( $this->once() @@ -142,7 +143,6 @@ class InvokerDefaultTest extends \PHPUnit_Framework_TestCase [ 'shared' => $shared, 'instance' => 'class_name', - 'method' => 'unknown_method_name', 'name' => 'observer', ], $this->_observerMock @@ -153,8 +153,9 @@ class InvokerDefaultTest extends \PHPUnit_Framework_TestCase * @param string $shared * @dataProvider dataProviderForMethodIsNotDefined */ - public function testMethodIsNotDefinedWithDisabledDeveloperMode($shared) + public function testWrongInterfaceCallWithDisabledDeveloperMode($shared) { + $notObserver = $this->getMock('NotObserver'); $this->_observerFactoryMock->expects( $this->any() )->method( @@ -162,7 +163,7 @@ class InvokerDefaultTest extends \PHPUnit_Framework_TestCase )->with( 'class_name' )->will( - $this->returnValue($this->_listenerMock) + $this->returnValue($notObserver) ); $this->_observerFactoryMock->expects( $this->any() @@ -171,7 +172,7 @@ class InvokerDefaultTest extends \PHPUnit_Framework_TestCase )->with( 'class_name' )->will( - $this->returnValue($this->_listenerMock) + $this->returnValue($notObserver) ); $this->_appStateMock->expects( $this->once() diff --git a/lib/internal/Magento/Framework/Event/Test/Unit/Invoker/ObserverExample.php b/lib/internal/Magento/Framework/Event/Test/Unit/Invoker/ObserverExample.php new file mode 100644 index 0000000000000000000000000000000000000000..07ec3130da714a6eba23f6dcb65c561db0b703bd --- /dev/null +++ b/lib/internal/Magento/Framework/Event/Test/Unit/Invoker/ObserverExample.php @@ -0,0 +1,21 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Framework\Event\Test\Unit\Invoker; + +use Magento\Framework\Event\Observer; +use Magento\Framework\Event\ObserverInterface; + +class ObserverExample implements ObserverInterface +{ + /** + * @SuppressWarnings(PHPMD.UnusedFormalParameter) + * @param Observer $observer + */ + public function execute(Observer $observer) + { + //do nothing + } +} diff --git a/lib/internal/Magento/Framework/Event/etc/events.xsd b/lib/internal/Magento/Framework/Event/etc/events.xsd index e5ba0aa6b2624762508710084b5c78aa93fd2b9f..aa75798b1080fbbe083a37dcd64dd4d7d6b67273 100644 --- a/lib/internal/Magento/Framework/Event/etc/events.xsd +++ b/lib/internal/Magento/Framework/Event/etc/events.xsd @@ -53,22 +53,10 @@ </xs:annotation> <xs:attribute name="name" type="xs:string" use="required" /> <xs:attribute name="instance" type="xs:string" use="optional" /> - <xs:attribute name="method" type="methodName" use="optional" /> <xs:attribute name="disabled" type="xs:boolean" use="optional" /> <xs:attribute name="shared" type="xs:boolean" use="optional" /> </xs:complexType> - <xs:simpleType name="methodName"> - <xs:annotation> - <xs:documentation> - Method name can contain only English letters. - </xs:documentation> - </xs:annotation> - <xs:restriction base="xs:string"> - <xs:pattern value="[a-zA-Z]+" /> - </xs:restriction> - </xs:simpleType> - <xs:simpleType name="eventName"> <xs:annotation> <xs:documentation> diff --git a/lib/internal/Magento/Framework/Flag/FlagResource.php b/lib/internal/Magento/Framework/Flag/FlagResource.php index 1ec3b61e0c1e7b35f124b7e4dc5de12723f658ab..730fee2e5d28652201bd6bd5311e978a61e21567 100644 --- a/lib/internal/Magento/Framework/Flag/FlagResource.php +++ b/lib/internal/Magento/Framework/Flag/FlagResource.php @@ -8,7 +8,7 @@ namespace Magento\Framework\Flag; /** * Flag Resource model */ -class FlagResource extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +class FlagResource extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Define main table diff --git a/lib/internal/Magento/Framework/HTTP/Client.php b/lib/internal/Magento/Framework/HTTP/Client.php deleted file mode 100644 index c22798849280cfb1baa4e9d0064f66403675af65..0000000000000000000000000000000000000000 --- a/lib/internal/Magento/Framework/HTTP/Client.php +++ /dev/null @@ -1,58 +0,0 @@ -<?php -/** - * Copyright © 2015 Magento. All rights reserved. - * See COPYING.txt for license details. - */ - -/** - * Factory for HTTP client classes - * - * @author Magento Core Team <core@magentocommerce.com> - */ -namespace Magento\Framework\HTTP; - -class Client -{ - /** - * Disallow to instantiate - pvt constructor - */ - private function __construct() - { - } - - /** - * Factory for HTTP client - * @param string/false $frontend 'curl'/'socket' or false for auto-detect - * @return \Magento\Framework\HTTP\ClientInterface - */ - public static function getInstance($frontend = false) - { - if (false === $frontend) { - $frontend = self::detectFrontend(); - } - if (false === $frontend) { - throw new \Exception("Cannot find frontend automatically, set it manually"); - } - - $class = __CLASS__ . "_" . str_replace(' ', '/', ucwords(str_replace('_', ' ', $frontend))); - $obj = new $class(); - return $obj; - } - - /** - * Detects frontend type. - * Priority is given to CURL - * - * @return string/bool - */ - protected static function detectFrontend() - { - if (function_exists("curl_init")) { - return "curl"; - } - if (function_exists("fsockopen")) { - return "socket"; - } - return false; - } -} diff --git a/lib/internal/Magento/Framework/HTTP/ClientFactory.php b/lib/internal/Magento/Framework/HTTP/ClientFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..6ececf68bd17893a1ae1c2d083643d8dac176944 --- /dev/null +++ b/lib/internal/Magento/Framework/HTTP/ClientFactory.php @@ -0,0 +1,54 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Framework\HTTP; + +/** + * Factory for HTTP client classes + * + * @author Magento Core Team <core@magentocommerce.com> + */ +class ClientFactory +{ + /** + * Object Manager instance + * + * @var \Magento\Framework\ObjectManagerInterface + */ + protected $_objectManager = null; + + /** + * Instance name to create + * + * @var string + */ + protected $_instanceName = null; + + /** + * Factory constructor (default creates Curl client) + * + * @param \Magento\Framework\ObjectManagerInterface $objectManager + * @param string $instanceName + */ + public function __construct( + \Magento\Framework\ObjectManagerInterface $objectManager, + $instanceName = 'Magento\Framework\HTTP\Client\Curl' + ) { + $this->_objectManager = $objectManager; + $this->_instanceName = $instanceName; + } + + /** + * Create class instance with specified parameters + * + * @param array $data + * @return \Magento\Framework\Flag + */ + public function create(array $data = []) + { + return $this->_objectManager->create($this->_instanceName, $data); + } +} diff --git a/lib/internal/Magento/Framework/Model/AbstractExtensibleModel.php b/lib/internal/Magento/Framework/Model/AbstractExtensibleModel.php index 8ae263b14678a717a1974c82a7fbd4b9f33a7ffc..24802ef1ac110d72e91c1af0e40c527843dce481 100644 --- a/lib/internal/Magento/Framework/Model/AbstractExtensibleModel.php +++ b/lib/internal/Magento/Framework/Model/AbstractExtensibleModel.php @@ -48,7 +48,7 @@ abstract class AbstractExtensibleModel extends AbstractModel implements * @param \Magento\Framework\Registry $registry * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory * @param AttributeValueFactory $customAttributeFactory - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ @@ -57,7 +57,7 @@ abstract class AbstractExtensibleModel extends AbstractModel implements \Magento\Framework\Registry $registry, \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory, AttributeValueFactory $customAttributeFactory, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { diff --git a/lib/internal/Magento/Framework/Model/AbstractModel.php b/lib/internal/Magento/Framework/Model/AbstractModel.php index 23280395c5f62bfc9493b4f57823a62fd0c9e770..f72c455daf860caec4e77dbf71c901832015dec7 100644 --- a/lib/internal/Magento/Framework/Model/AbstractModel.php +++ b/lib/internal/Magento/Framework/Model/AbstractModel.php @@ -62,14 +62,14 @@ abstract class AbstractModel extends \Magento\Framework\DataObject /** * Resource model instance * - * @var \Magento\Framework\Model\ModelResource\Db\AbstractDb + * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb */ protected $_resource; /** * Resource collection * - * @var \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection + * @var \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection */ protected $_resourceCollection; @@ -163,14 +163,14 @@ abstract class AbstractModel extends \Magento\Framework\DataObject /** * @param \Magento\Framework\Model\Context $context * @param \Magento\Framework\Registry $registry - * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource + * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data */ public function __construct( \Magento\Framework\Model\Context $context, \Magento\Framework\Registry $registry, - \Magento\Framework\Model\ModelResource\AbstractResource $resource = null, + \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { @@ -448,7 +448,7 @@ abstract class AbstractModel extends \Magento\Framework\DataObject * Get resource instance * * @throws \Magento\Framework\Exception\LocalizedException - * @return \Magento\Framework\Model\ModelResource\Db\AbstractDb + * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb */ protected function _getResource() { @@ -476,7 +476,7 @@ abstract class AbstractModel extends \Magento\Framework\DataObject * * @TODO MAGETWO-23541: Incorrect dependencies between Model\AbstractModel and Data\Collection\Db from Framework * @throws \Magento\Framework\Exception\LocalizedException - * @return \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection + * @return \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection */ public function getResourceCollection() { @@ -496,7 +496,7 @@ abstract class AbstractModel extends \Magento\Framework\DataObject * Retrieve collection instance * * @TODO MAGETWO-23541: Incorrect dependencies between Model\AbstractModel and Data\Collection\Db from Framework - * @return \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection + * @return \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection */ public function getCollection() { @@ -849,7 +849,7 @@ abstract class AbstractModel extends \Magento\Framework\DataObject /** * Retrieve model resource * - * @return \Magento\Framework\Model\ModelResource\Db\AbstractDb + * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb */ public function getResource() { diff --git a/lib/internal/Magento/Framework/Model/ModelResource/AbstractResource.php b/lib/internal/Magento/Framework/Model/ResourceModel/AbstractResource.php similarity index 99% rename from lib/internal/Magento/Framework/Model/ModelResource/AbstractResource.php rename to lib/internal/Magento/Framework/Model/ResourceModel/AbstractResource.php index 17cd5e51c23e6581db438e66dd7cad889ed1e751..ccd2131de93d839b1436678611b9919ca9f7b1b5 100644 --- a/lib/internal/Magento/Framework/Model/ModelResource/AbstractResource.php +++ b/lib/internal/Magento/Framework/Model/ResourceModel/AbstractResource.php @@ -6,7 +6,7 @@ // @codingStandardsIgnoreFile -namespace Magento\Framework\Model\ModelResource; +namespace Magento\Framework\Model\ResourceModel; /** * Abstract resource model diff --git a/lib/internal/Magento/Framework/Model/ModelResource/Db/AbstractDb.php b/lib/internal/Magento/Framework/Model/ResourceModel/Db/AbstractDb.php similarity index 98% rename from lib/internal/Magento/Framework/Model/ModelResource/Db/AbstractDb.php rename to lib/internal/Magento/Framework/Model/ResourceModel/Db/AbstractDb.php index d6d202a408c8a85e8c1fef3fed1fa599d6653432..6f25689747e99f16b3cc6502a655cf165f29228e 100644 --- a/lib/internal/Magento/Framework/Model/ModelResource/Db/AbstractDb.php +++ b/lib/internal/Magento/Framework/Model/ResourceModel/Db/AbstractDb.php @@ -4,12 +4,12 @@ * See COPYING.txt for license details. */ -namespace Magento\Framework\Model\ModelResource\Db; +namespace Magento\Framework\Model\ResourceModel\Db; use Magento\Framework\App\ResourceConnection; use Magento\Framework\Exception\AlreadyExistsException; use Magento\Framework\Exception\LocalizedException; -use Magento\Framework\Model\ModelResource\AbstractResource; +use Magento\Framework\Model\ResourceModel\AbstractResource; /** * Abstract resource model class @@ -133,10 +133,10 @@ abstract class AbstractDb extends AbstractResource /** * Class constructor * - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param string $connectionName */ - public function __construct(\Magento\Framework\Model\ModelResource\Db\Context $context, $connectionName = null) + public function __construct(\Magento\Framework\Model\ResourceModel\Db\Context $context, $connectionName = null) { $this->transactionManager = $context->getTransactionManager(); $this->_resources = $context->getResources(); @@ -769,7 +769,9 @@ abstract class AbstractDb extends AbstractResource } $this->getConnection()->insert($this->getMainTable(), $bind); - $object->setId($this->getConnection()->lastInsertId($this->getMainTable())); + if ($this->_isPkAutoIncrement) { + $object->setId($this->getConnection()->lastInsertId($this->getMainTable())); + } if ($this->_useIsObjectNew) { $object->isObjectNew(false); diff --git a/lib/internal/Magento/Framework/Model/ModelResource/Db/Collection/AbstractCollection.php b/lib/internal/Magento/Framework/Model/ResourceModel/Db/Collection/AbstractCollection.php similarity index 97% rename from lib/internal/Magento/Framework/Model/ModelResource/Db/Collection/AbstractCollection.php rename to lib/internal/Magento/Framework/Model/ResourceModel/Db/Collection/AbstractCollection.php index 352861097da76794ff7934f8a1643d13fea959f1..582d6c79f64e0fc40b86f02477b61ceabc81c209 100644 --- a/lib/internal/Magento/Framework/Model/ModelResource/Db/Collection/AbstractCollection.php +++ b/lib/internal/Magento/Framework/Model/ResourceModel/Db/Collection/AbstractCollection.php @@ -6,7 +6,7 @@ // @codingStandardsIgnoreFile -namespace Magento\Framework\Model\ModelResource\Db\Collection; +namespace Magento\Framework\Model\ResourceModel\Db\Collection; use Magento\Framework\App\ResourceConnection\SourceProviderInterface; /** @@ -33,7 +33,7 @@ abstract class AbstractCollection extends \Magento\Framework\Data\Collection\Abs /** * Resource instance * - * @var \Magento\Framework\Model\ModelResource\Db\AbstractDb + * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb */ protected $_resource; @@ -106,7 +106,7 @@ abstract class AbstractCollection extends \Magento\Framework\Data\Collection\Abs * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy * @param \Magento\Framework\Event\ManagerInterface $eventManager * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection - * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource + * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource */ public function __construct( \Magento\Framework\Data\Collection\EntityFactoryInterface $entityFactory, @@ -114,7 +114,7 @@ abstract class AbstractCollection extends \Magento\Framework\Data\Collection\Abs \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, \Magento\Framework\Event\ManagerInterface $eventManager, \Magento\Framework\DB\Adapter\AdapterInterface $connection = null, - \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null + \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null ) { $this->_eventManager = $eventManager; parent::__construct($entityFactory, $logger, $fetchStrategy, $connection); @@ -455,7 +455,7 @@ abstract class AbstractCollection extends \Magento\Framework\Data\Collection\Abs /** * Get resource instance * - * @return \Magento\Framework\Model\ModelResource\Db\AbstractDb + * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb */ public function getResource() { diff --git a/lib/internal/Magento/Framework/Model/ModelResource/Db/Context.php b/lib/internal/Magento/Framework/Model/ResourceModel/Db/Context.php similarity index 96% rename from lib/internal/Magento/Framework/Model/ModelResource/Db/Context.php rename to lib/internal/Magento/Framework/Model/ResourceModel/Db/Context.php index 59fefb8016be75e53037299cac7a85a75da4a523..13877e882e989e667213c71c86a8c4cc8b9f8651 100644 --- a/lib/internal/Magento/Framework/Model/ModelResource/Db/Context.php +++ b/lib/internal/Magento/Framework/Model/ResourceModel/Db/Context.php @@ -4,7 +4,7 @@ * See COPYING.txt for license details. */ -namespace Magento\Framework\Model\ModelResource\Db; +namespace Magento\Framework\Model\ResourceModel\Db; /** * @codeCoverageIgnore diff --git a/lib/internal/Magento/Framework/Model/ModelResource/Db/ObjectRelationProcessor.php b/lib/internal/Magento/Framework/Model/ResourceModel/Db/ObjectRelationProcessor.php similarity index 95% rename from lib/internal/Magento/Framework/Model/ModelResource/Db/ObjectRelationProcessor.php rename to lib/internal/Magento/Framework/Model/ResourceModel/Db/ObjectRelationProcessor.php index 194d00d242906fdd6855b738d6f3565a0e1ded84..89ec37c6bf0f9d0ed9d56f857377cfa507d206cb 100644 --- a/lib/internal/Magento/Framework/Model/ModelResource/Db/ObjectRelationProcessor.php +++ b/lib/internal/Magento/Framework/Model/ResourceModel/Db/ObjectRelationProcessor.php @@ -4,7 +4,7 @@ * See COPYING.txt for license details. */ -namespace Magento\Framework\Model\ModelResource\Db; +namespace Magento\Framework\Model\ResourceModel\Db; use Magento\Framework\DB\Adapter\AdapterInterface as Connection; diff --git a/lib/internal/Magento/Framework/Model/ModelResource/Db/Profiler.php b/lib/internal/Magento/Framework/Model/ResourceModel/Db/Profiler.php similarity index 94% rename from lib/internal/Magento/Framework/Model/ModelResource/Db/Profiler.php rename to lib/internal/Magento/Framework/Model/ResourceModel/Db/Profiler.php index 05655c886f66068624c0c2a7096ec8f6eb279830..0ae0f5ea4c37398311e1aeee2df11d36c465a98f 100644 --- a/lib/internal/Magento/Framework/Model/ModelResource/Db/Profiler.php +++ b/lib/internal/Magento/Framework/Model/ResourceModel/Db/Profiler.php @@ -5,7 +5,7 @@ * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ -namespace Magento\Framework\Model\ModelResource\Db; +namespace Magento\Framework\Model\ResourceModel\Db; class Profiler extends \Magento\Framework\DB\Profiler { @@ -33,7 +33,7 @@ class Profiler extends \Magento\Framework\DB\Profiler protected function _getTimerName($operation) { // default name of connection type - $timerName = \Magento\Framework\Model\ModelResource\Db\Profiler::DEFAULT_CONNECTION_TYPE; + $timerName = \Magento\Framework\Model\ResourceModel\Db\Profiler::DEFAULT_CONNECTION_TYPE; // connection type to database if (!empty($this->_type)) { @@ -48,7 +48,7 @@ class Profiler extends \Magento\Framework\DB\Profiler $timerName .= '_' . $this->_host; } - return \Magento\Framework\Model\ModelResource\Db\Profiler::TIMER_PREFIX . ':' . $timerName; + return \Magento\Framework\Model\ResourceModel\Db\Profiler::TIMER_PREFIX . ':' . $timerName; } /** diff --git a/lib/internal/Magento/Framework/Model/ModelResource/Db/TransactionManager.php b/lib/internal/Magento/Framework/Model/ResourceModel/Db/TransactionManager.php similarity index 96% rename from lib/internal/Magento/Framework/Model/ModelResource/Db/TransactionManager.php rename to lib/internal/Magento/Framework/Model/ResourceModel/Db/TransactionManager.php index 57a636a577b979ab8d5426ab8000e5e3b111e9fe..920eca7e94155779cd7b9784c832ec1ff28c3279 100644 --- a/lib/internal/Magento/Framework/Model/ModelResource/Db/TransactionManager.php +++ b/lib/internal/Magento/Framework/Model/ResourceModel/Db/TransactionManager.php @@ -4,7 +4,7 @@ * See COPYING.txt for license details. */ -namespace Magento\Framework\Model\ModelResource\Db; +namespace Magento\Framework\Model\ResourceModel\Db; use Magento\Framework\DB\Adapter\AdapterInterface as Connection; diff --git a/lib/internal/Magento/Framework/Model/ModelResource/Db/TransactionManagerInterface.php b/lib/internal/Magento/Framework/Model/ResourceModel/Db/TransactionManagerInterface.php similarity index 91% rename from lib/internal/Magento/Framework/Model/ModelResource/Db/TransactionManagerInterface.php rename to lib/internal/Magento/Framework/Model/ResourceModel/Db/TransactionManagerInterface.php index 981edbb64c1bc40cf8369960bdad6fdcb7410559..e4e72c8999a474228bb8cd1562d1e74737e3fcf4 100644 --- a/lib/internal/Magento/Framework/Model/ModelResource/Db/TransactionManagerInterface.php +++ b/lib/internal/Magento/Framework/Model/ResourceModel/Db/TransactionManagerInterface.php @@ -4,7 +4,7 @@ * See COPYING.txt for license details. */ -namespace Magento\Framework\Model\ModelResource\Db; +namespace Magento\Framework\Model\ResourceModel\Db; use Magento\Framework\DB\Adapter\AdapterInterface as Connection; diff --git a/lib/internal/Magento/Framework/Model/ModelResource/Db/VersionControl/AbstractDb.php b/lib/internal/Magento/Framework/Model/ResourceModel/Db/VersionControl/AbstractDb.php similarity index 86% rename from lib/internal/Magento/Framework/Model/ModelResource/Db/VersionControl/AbstractDb.php rename to lib/internal/Magento/Framework/Model/ResourceModel/Db/VersionControl/AbstractDb.php index 8b8e3e8c3558cf059ab18c1d878e8bef3395b06d..b6da084e2b7710736fa5579b5466a67c448c77bd 100644 --- a/lib/internal/Magento/Framework/Model/ModelResource/Db/VersionControl/AbstractDb.php +++ b/lib/internal/Magento/Framework/Model/ResourceModel/Db/VersionControl/AbstractDb.php @@ -3,12 +3,12 @@ * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ -namespace Magento\Framework\Model\ModelResource\Db\VersionControl; +namespace Magento\Framework\Model\ResourceModel\Db\VersionControl; /** * Class AbstractDb with snapshot saving and relation save processing */ -abstract class AbstractDb extends \Magento\Framework\Model\ModelResource\Db\AbstractDb +abstract class AbstractDb extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * @var Snapshot @@ -23,11 +23,11 @@ abstract class AbstractDb extends \Magento\Framework\Model\ModelResource\Db\Abst /** * @param Snapshot $entitySnapshot * @param RelationComposite $entityRelationComposite - * @param \Magento\Framework\Model\ModelResource\Db\Context $context + * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param string $connectionName */ public function __construct( - \Magento\Framework\Model\ModelResource\Db\Context $context, + \Magento\Framework\Model\ResourceModel\Db\Context $context, Snapshot $entitySnapshot, RelationComposite $entityRelationComposite, $connectionName = null diff --git a/lib/internal/Magento/Framework/Model/ModelResource/Db/VersionControl/Collection.php b/lib/internal/Magento/Framework/Model/ResourceModel/Db/VersionControl/Collection.php similarity index 85% rename from lib/internal/Magento/Framework/Model/ModelResource/Db/VersionControl/Collection.php rename to lib/internal/Magento/Framework/Model/ResourceModel/Db/VersionControl/Collection.php index 75804638605b6d7b93143306e6353ea4f339a130..3591c1a2c07b8f52eda656f909808559ab31f165 100644 --- a/lib/internal/Magento/Framework/Model/ModelResource/Db/VersionControl/Collection.php +++ b/lib/internal/Magento/Framework/Model/ResourceModel/Db/VersionControl/Collection.php @@ -3,12 +3,12 @@ * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ -namespace Magento\Framework\Model\ModelResource\Db\VersionControl; +namespace Magento\Framework\Model\ResourceModel\Db\VersionControl; /** * Class Collection */ -abstract class Collection extends \Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection +abstract class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * @var Snapshot @@ -22,7 +22,7 @@ abstract class Collection extends \Magento\Framework\Model\ModelResource\Db\Coll * @param \Magento\Framework\Event\ManagerInterface $eventManager * @param Snapshot $entitySnapshot * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection - * @param \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource + * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource */ public function __construct( \Magento\Framework\Data\Collection\EntityFactoryInterface $entityFactory, @@ -31,7 +31,7 @@ abstract class Collection extends \Magento\Framework\Model\ModelResource\Db\Coll \Magento\Framework\Event\ManagerInterface $eventManager, Snapshot $entitySnapshot, \Magento\Framework\DB\Adapter\AdapterInterface $connection = null, - \Magento\Framework\Model\ModelResource\Db\AbstractDb $resource = null + \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null ) { $this->entitySnapshot = $entitySnapshot; parent::__construct( diff --git a/lib/internal/Magento/Framework/Model/ModelResource/Db/VersionControl/Metadata.php b/lib/internal/Magento/Framework/Model/ResourceModel/Db/VersionControl/Metadata.php similarity index 94% rename from lib/internal/Magento/Framework/Model/ModelResource/Db/VersionControl/Metadata.php rename to lib/internal/Magento/Framework/Model/ResourceModel/Db/VersionControl/Metadata.php index 7dfef23ac5ba2e927db0ac11bfea3a8f143d40c5..bfab1304282e71ed702a22e90b80b1d4b1aac908 100644 --- a/lib/internal/Magento/Framework/Model/ModelResource/Db/VersionControl/Metadata.php +++ b/lib/internal/Magento/Framework/Model/ResourceModel/Db/VersionControl/Metadata.php @@ -3,7 +3,7 @@ * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ -namespace Magento\Framework\Model\ModelResource\Db\VersionControl; +namespace Magento\Framework\Model\ResourceModel\Db\VersionControl; /** * Class Metadata represents a list of entity fields that are applicable for persistence operations diff --git a/lib/internal/Magento/Framework/Model/ModelResource/Db/VersionControl/RelationComposite.php b/lib/internal/Magento/Framework/Model/ResourceModel/Db/VersionControl/RelationComposite.php similarity index 95% rename from lib/internal/Magento/Framework/Model/ModelResource/Db/VersionControl/RelationComposite.php rename to lib/internal/Magento/Framework/Model/ResourceModel/Db/VersionControl/RelationComposite.php index 49d9ff8db1a91f728866c1aa28ebc3f97196bedb..23626faa7bf660eb5ed98f0ae9afc132b2555bd5 100644 --- a/lib/internal/Magento/Framework/Model/ModelResource/Db/VersionControl/RelationComposite.php +++ b/lib/internal/Magento/Framework/Model/ResourceModel/Db/VersionControl/RelationComposite.php @@ -3,7 +3,7 @@ * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ -namespace Magento\Framework\Model\ModelResource\Db\VersionControl; +namespace Magento\Framework\Model\ResourceModel\Db\VersionControl; use Magento\Framework\Model\AbstractModel; use Magento\Framework\Event\ManagerInterface as EventManager; diff --git a/lib/internal/Magento/Framework/Model/ModelResource/Db/VersionControl/RelationInterface.php b/lib/internal/Magento/Framework/Model/ResourceModel/Db/VersionControl/RelationInterface.php similarity index 86% rename from lib/internal/Magento/Framework/Model/ModelResource/Db/VersionControl/RelationInterface.php rename to lib/internal/Magento/Framework/Model/ResourceModel/Db/VersionControl/RelationInterface.php index 636597621ff74f0e79d69f3814f5071885fe29b9..257b9652b316c5268f6d531737692495af624a30 100644 --- a/lib/internal/Magento/Framework/Model/ModelResource/Db/VersionControl/RelationInterface.php +++ b/lib/internal/Magento/Framework/Model/ResourceModel/Db/VersionControl/RelationInterface.php @@ -3,7 +3,7 @@ * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ -namespace Magento\Framework\Model\ModelResource\Db\VersionControl; +namespace Magento\Framework\Model\ResourceModel\Db\VersionControl; /** * Interface RelationInterface diff --git a/lib/internal/Magento/Framework/Model/ModelResource/Db/VersionControl/Snapshot.php b/lib/internal/Magento/Framework/Model/ResourceModel/Db/VersionControl/Snapshot.php similarity index 96% rename from lib/internal/Magento/Framework/Model/ModelResource/Db/VersionControl/Snapshot.php rename to lib/internal/Magento/Framework/Model/ResourceModel/Db/VersionControl/Snapshot.php index 854c1423dc081be725d4cacb71616f0844d89e82..c2de9047c4ed4507b02972b55519d58f95dff31e 100644 --- a/lib/internal/Magento/Framework/Model/ModelResource/Db/VersionControl/Snapshot.php +++ b/lib/internal/Magento/Framework/Model/ResourceModel/Db/VersionControl/Snapshot.php @@ -3,7 +3,7 @@ * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ -namespace Magento\Framework\Model\ModelResource\Db\VersionControl; +namespace Magento\Framework\Model\ResourceModel\Db\VersionControl; /** * Class Snapshot register snapshot of entity data, for tracking changes diff --git a/lib/internal/Magento/Framework/Model/ModelResource/Entity/AbstractEntity.php b/lib/internal/Magento/Framework/Model/ResourceModel/Entity/AbstractEntity.php similarity index 94% rename from lib/internal/Magento/Framework/Model/ModelResource/Entity/AbstractEntity.php rename to lib/internal/Magento/Framework/Model/ResourceModel/Entity/AbstractEntity.php index d725a10274482d0da76244cec173b79205b7fea7..6b323bf323c2861e7d942c9f7ce1f3a7962708dd 100644 --- a/lib/internal/Magento/Framework/Model/ModelResource/Entity/AbstractEntity.php +++ b/lib/internal/Magento/Framework/Model/ResourceModel/Entity/AbstractEntity.php @@ -3,7 +3,7 @@ * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ -namespace Magento\Framework\Model\ModelResource\Entity; +namespace Magento\Framework\Model\ResourceModel\Entity; abstract class AbstractEntity { diff --git a/lib/internal/Magento/Framework/Model/ModelResource/Entity/Table.php b/lib/internal/Magento/Framework/Model/ResourceModel/Entity/Table.php similarity index 73% rename from lib/internal/Magento/Framework/Model/ModelResource/Entity/Table.php rename to lib/internal/Magento/Framework/Model/ResourceModel/Entity/Table.php index 75fe3c8189ad433eba2950d7de8e3be1379943e6..f6eac910f3ea4c595d1ef401be7f30ffc435eee8 100644 --- a/lib/internal/Magento/Framework/Model/ModelResource/Entity/Table.php +++ b/lib/internal/Magento/Framework/Model/ResourceModel/Entity/Table.php @@ -3,13 +3,13 @@ * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ -namespace Magento\Framework\Model\ModelResource\Entity; +namespace Magento\Framework\Model\ResourceModel\Entity; /** * Class describing db table resource entity * */ -class Table extends \Magento\Framework\Model\ModelResource\Entity\AbstractEntity +class Table extends \Magento\Framework\Model\ResourceModel\Entity\AbstractEntity { /** * Get table diff --git a/lib/internal/Magento/Framework/Model/ModelResource/Iterator.php b/lib/internal/Magento/Framework/Model/ResourceModel/Iterator.php similarity index 94% rename from lib/internal/Magento/Framework/Model/ModelResource/Iterator.php rename to lib/internal/Magento/Framework/Model/ResourceModel/Iterator.php index 63de2861a2bed38aef79778d762719890b83e945..c165dec4e7a5fdaee58a7a966974edbb6c2f0f54 100644 --- a/lib/internal/Magento/Framework/Model/ModelResource/Iterator.php +++ b/lib/internal/Magento/Framework/Model/ResourceModel/Iterator.php @@ -7,7 +7,7 @@ /** * Active record implementation */ -namespace Magento\Framework\Model\ModelResource; +namespace Magento\Framework\Model\ResourceModel; use Magento\Framework\DB\Adapter\AdapterInterface; use Magento\Framework\Exception\LocalizedException; @@ -22,7 +22,7 @@ class Iterator extends \Magento\Framework\DataObject * @param array|string $callbacks * @param array $args * @param AdapterInterface $connection - * @return \Magento\Framework\Model\ModelResource\Iterator + * @return \Magento\Framework\Model\ResourceModel\Iterator */ public function walk($query, array $callbacks, array $args = [], $connection = null) { diff --git a/lib/internal/Magento/Framework/Model/ModelResource/Type/AbstractType.php b/lib/internal/Magento/Framework/Model/ResourceModel/Type/AbstractType.php similarity index 83% rename from lib/internal/Magento/Framework/Model/ModelResource/Type/AbstractType.php rename to lib/internal/Magento/Framework/Model/ResourceModel/Type/AbstractType.php index 6a219bf6608900405bbef66abba991b9378ad214..172434f5d56b24b910c3838f9055f9a758d0a365 100644 --- a/lib/internal/Magento/Framework/Model/ModelResource/Type/AbstractType.php +++ b/lib/internal/Magento/Framework/Model/ResourceModel/Type/AbstractType.php @@ -3,7 +3,7 @@ * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ -namespace Magento\Framework\Model\ModelResource\Type; +namespace Magento\Framework\Model\ResourceModel\Type; abstract class AbstractType { @@ -19,7 +19,7 @@ abstract class AbstractType * * @var String */ - protected $_entityClass = 'Magento\Framework\Model\ModelResource\Entity\AbstractEntity'; + protected $_entityClass = 'Magento\Framework\Model\ResourceModel\Entity\AbstractEntity'; /** * Retrieve entity type diff --git a/lib/internal/Magento/Framework/Model/ModelResource/Type/Db.php b/lib/internal/Magento/Framework/Model/ResourceModel/Type/Db.php similarity index 50% rename from lib/internal/Magento/Framework/Model/ModelResource/Type/Db.php rename to lib/internal/Magento/Framework/Model/ResourceModel/Type/Db.php index 9c07c36575d65d55c3e38ffcc9617be88a4d34b3..db4737b9923c34cdab98b5022e7585227565af73 100644 --- a/lib/internal/Magento/Framework/Model/ModelResource/Type/Db.php +++ b/lib/internal/Magento/Framework/Model/ResourceModel/Type/Db.php @@ -3,15 +3,15 @@ * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ -namespace Magento\Framework\Model\ModelResource\Type; +namespace Magento\Framework\Model\ResourceModel\Type; -abstract class Db extends \Magento\Framework\Model\ModelResource\Type\AbstractType +abstract class Db extends \Magento\Framework\Model\ResourceModel\Type\AbstractType { /** * Constructor */ public function __construct() { - $this->_entityClass = 'Magento\Framework\Model\ModelResource\Entity\Table'; + $this->_entityClass = 'Magento\Framework\Model\ResourceModel\Entity\Table'; } } diff --git a/lib/internal/Magento/Framework/Model/ModelResource/Type/Db/ConnectionFactory.php b/lib/internal/Magento/Framework/Model/ResourceModel/Type/Db/ConnectionFactory.php similarity index 95% rename from lib/internal/Magento/Framework/Model/ModelResource/Type/Db/ConnectionFactory.php rename to lib/internal/Magento/Framework/Model/ResourceModel/Type/Db/ConnectionFactory.php index 886d1fdbdaaa3316b186e03950860874851de024..ed253a64539aa46fbfbbc8a0c7e6ead601283ecc 100644 --- a/lib/internal/Magento/Framework/Model/ModelResource/Type/Db/ConnectionFactory.php +++ b/lib/internal/Magento/Framework/Model/ResourceModel/Type/Db/ConnectionFactory.php @@ -5,7 +5,7 @@ * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ -namespace Magento\Framework\Model\ModelResource\Type\Db; +namespace Magento\Framework\Model\ResourceModel\Type\Db; use Magento\Framework\ObjectManagerInterface; diff --git a/lib/internal/Magento/Framework/Model/ModelResource/Type/Db/ConnectionFactoryInterface.php b/lib/internal/Magento/Framework/Model/ResourceModel/Type/Db/ConnectionFactoryInterface.php similarity index 88% rename from lib/internal/Magento/Framework/Model/ModelResource/Type/Db/ConnectionFactoryInterface.php rename to lib/internal/Magento/Framework/Model/ResourceModel/Type/Db/ConnectionFactoryInterface.php index ce5cbb166d27c9fe1f440e98bca390ff3484fd1f..02a9dd0bce60d44a9ab71ea694671bc6aa12f718 100644 --- a/lib/internal/Magento/Framework/Model/ModelResource/Type/Db/ConnectionFactoryInterface.php +++ b/lib/internal/Magento/Framework/Model/ResourceModel/Type/Db/ConnectionFactoryInterface.php @@ -5,7 +5,7 @@ * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ -namespace Magento\Framework\Model\ModelResource\Type\Db; +namespace Magento\Framework\Model\ResourceModel\Type\Db; interface ConnectionFactoryInterface { diff --git a/lib/internal/Magento/Framework/Model/ModelResource/Type/Db/Pdo/Mysql.php b/lib/internal/Magento/Framework/Model/ResourceModel/Type/Db/Pdo/Mysql.php similarity index 95% rename from lib/internal/Magento/Framework/Model/ModelResource/Type/Db/Pdo/Mysql.php rename to lib/internal/Magento/Framework/Model/ResourceModel/Type/Db/Pdo/Mysql.php index 5ed1847c4df1370b1889b1057917470f7438b7ee..e28f3109687dba9787db2326d6ec8d3c2e66f5e8 100644 --- a/lib/internal/Magento/Framework/Model/ModelResource/Type/Db/Pdo/Mysql.php +++ b/lib/internal/Magento/Framework/Model/ResourceModel/Type/Db/Pdo/Mysql.php @@ -6,13 +6,13 @@ // @codingStandardsIgnoreFile -namespace Magento\Framework\Model\ModelResource\Type\Db\Pdo; +namespace Magento\Framework\Model\ResourceModel\Type\Db\Pdo; use Magento\Framework\App\ResourceConnection\ConnectionAdapterInterface; use Magento\Framework\DB; use Magento\Framework\Stdlib; -class Mysql extends \Magento\Framework\Model\ModelResource\Type\Db implements ConnectionAdapterInterface +class Mysql extends \Magento\Framework\Model\ResourceModel\Type\Db implements ConnectionAdapterInterface { /** * @var Stdlib\StringUtils diff --git a/lib/internal/Magento/Framework/Model/Test/Unit/AbstractExtensibleModelTest.php b/lib/internal/Magento/Framework/Model/Test/Unit/AbstractExtensibleModelTest.php index 753c995c8c2cc94688a448fde9449ea1c918fa57..84959d0952390266da61aa045244bb262df76ef3 100644 --- a/lib/internal/Magento/Framework/Model/Test/Unit/AbstractExtensibleModelTest.php +++ b/lib/internal/Magento/Framework/Model/Test/Unit/AbstractExtensibleModelTest.php @@ -29,7 +29,7 @@ class AbstractExtensibleModelTest extends \PHPUnit_Framework_TestCase protected $registryMock; /** - * @var \Magento\Framework\Model\ModelResource\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject */ protected $resourceMock; @@ -72,7 +72,7 @@ class AbstractExtensibleModelTest extends \PHPUnit_Framework_TestCase ); $this->registryMock = $this->getMock('Magento\Framework\Registry', [], [], '', false); $this->resourceMock = $this->getMock( - 'Magento\Framework\Model\ModelResource\Db\AbstractDb', + 'Magento\Framework\Model\ResourceModel\Db\AbstractDb', [ '_construct', 'getConnection', diff --git a/lib/internal/Magento/Framework/Model/Test/Unit/AbstractModelTest.php b/lib/internal/Magento/Framework/Model/Test/Unit/AbstractModelTest.php index 0ca67c81c32fb1864e22ffb22dca41e7d83092f6..e0674f8a882a8913c577303c4930e4b61f3e2d29 100644 --- a/lib/internal/Magento/Framework/Model/Test/Unit/AbstractModelTest.php +++ b/lib/internal/Magento/Framework/Model/Test/Unit/AbstractModelTest.php @@ -25,7 +25,7 @@ class AbstractModelTest extends \PHPUnit_Framework_TestCase protected $registryMock; /** - * @var \Magento\Framework\Model\ModelResource\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject */ protected $resourceMock; @@ -62,7 +62,7 @@ class AbstractModelTest extends \PHPUnit_Framework_TestCase ); $this->registryMock = $this->getMock('Magento\Framework\Registry', [], [], '', false); $this->resourceMock = $this->getMock( - 'Magento\Framework\Model\ModelResource\Db\AbstractDb', + 'Magento\Framework\Model\ResourceModel\Db\AbstractDb', [ '_construct', 'getConnection', diff --git a/lib/internal/Magento/Framework/Model/Test/Unit/ModelResource/Db/AbstractDbTest.php b/lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Db/AbstractDbTest.php similarity index 79% rename from lib/internal/Magento/Framework/Model/Test/Unit/ModelResource/Db/AbstractDbTest.php rename to lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Db/AbstractDbTest.php index 480bf65ee6fa1195f5609003ce3f4ee6dff842f9..b6ec3d9a68f27188fb9fb38e421eb772bf541afc 100644 --- a/lib/internal/Magento/Framework/Model/Test/Unit/ModelResource/Db/AbstractDbTest.php +++ b/lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Db/AbstractDbTest.php @@ -6,12 +6,12 @@ // @codingStandardsIgnoreFile -namespace Magento\Framework\Model\Test\Unit\ModelResource\Db; +namespace Magento\Framework\Model\Test\Unit\ResourceModel\Db; class AbstractDbTest extends \PHPUnit_Framework_TestCase { /** - * @var \Magento\Framework\Model\ModelResource\Db\AbstractDb + * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb */ protected $_model; @@ -41,16 +41,16 @@ class AbstractDbTest extends \PHPUnit_Framework_TestCase ); $this->relationProcessorMock = $this->getMock( - '\Magento\Framework\Model\ModelResource\Db\ObjectRelationProcessor', + '\Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor', [], [], '', false ); $this->transactionManagerMock = $this->getMock( - '\Magento\Framework\Model\ModelResource\Db\TransactionManagerInterface' + '\Magento\Framework\Model\ResourceModel\Db\TransactionManagerInterface' ); - $contextMock = $this->getMock('\Magento\Framework\Model\ModelResource\Db\Context', [], [], '', false); + $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false); $contextMock->expects($this->once())->method('getResources')->willReturn($this->_resourcesMock); $contextMock->expects($this->once()) ->method('getObjectRelationProcessor') @@ -60,7 +60,7 @@ class AbstractDbTest extends \PHPUnit_Framework_TestCase ->willReturn($this->transactionManagerMock); $this->_model = $this->getMockForAbstractClass( - 'Magento\Framework\Model\ModelResource\Db\AbstractDb', + 'Magento\Framework\Model\ResourceModel\Db\AbstractDb', [$contextMock], '', true, @@ -113,7 +113,7 @@ class AbstractDbTest extends \PHPUnit_Framework_TestCase public function testAddUniqueFieldArray() { $this->assertInstanceOf( - '\Magento\Framework\Model\ModelResource\Db\AbstractDb', + '\Magento\Framework\Model\ResourceModel\Db\AbstractDb', $this->_model->addUniqueField(['someField']) ); } @@ -131,7 +131,7 @@ class AbstractDbTest extends \PHPUnit_Framework_TestCase { $data = 'MainTableName'; $idFieldNameProperty = new \ReflectionProperty( - 'Magento\Framework\Model\ModelResource\Db\AbstractDb', '_idFieldName' + 'Magento\Framework\Model\ResourceModel\Db\AbstractDb', '_idFieldName' ); $idFieldNameProperty->setAccessible(true); $idFieldNameProperty->setValue($this->_model, $data); @@ -154,7 +154,7 @@ class AbstractDbTest extends \PHPUnit_Framework_TestCase */ public function testGetMainTable($tableName, $expectedResult) { - $mainTableProperty = new \ReflectionProperty('Magento\Framework\Model\ModelResource\Db\AbstractDb', '_mainTable'); + $mainTableProperty = new \ReflectionProperty('Magento\Framework\Model\ResourceModel\Db\AbstractDb', '_mainTable'); $mainTableProperty->setAccessible(true); $mainTableProperty->setValue($this->_model, $tableName); $this->_resourcesMock->expects($this->once()) @@ -188,7 +188,7 @@ class AbstractDbTest extends \PHPUnit_Framework_TestCase $this->_resourcesMock->expects($this->once())->method('getTableName')->with($data)->will( $this->returnValue('tableName') ); - $tablesProperty = new \ReflectionProperty('Magento\Framework\Model\ModelResource\Db\AbstractDb', '_tables'); + $tablesProperty = new \ReflectionProperty('Magento\Framework\Model\ResourceModel\Db\AbstractDb', '_tables'); $tablesProperty->setAccessible(true); $tablesProperty->setValue($this->_model, [$data]); $this->assertEquals($data, $this->_model->getTable($data)); @@ -232,7 +232,7 @@ class AbstractDbTest extends \PHPUnit_Framework_TestCase public function testResetUniqueField() { - $uniqueFields = new \ReflectionProperty('Magento\Framework\Model\ModelResource\Db\AbstractDb', '_uniqueFields'); + $uniqueFields = new \ReflectionProperty('Magento\Framework\Model\ResourceModel\Db\AbstractDb', '_uniqueFields'); $uniqueFields->setAccessible(true); $uniqueFields->setValue($this->_model, ['uniqueField1', 'uniqueField2']); $this->_model->resetUniqueField(); @@ -242,7 +242,7 @@ class AbstractDbTest extends \PHPUnit_Framework_TestCase public function testGetUniqueFields() { $uniqueFieldsReflection = new \ReflectionProperty( - 'Magento\Framework\Model\ModelResource\Db\AbstractDb', + 'Magento\Framework\Model\ResourceModel\Db\AbstractDb', '_uniqueFields' ); $uniqueFieldsReflection->setAccessible(true); @@ -270,12 +270,12 @@ class AbstractDbTest extends \PHPUnit_Framework_TestCase ); $value = 'some_value'; - $idFieldName = new \ReflectionProperty('Magento\Framework\Model\ModelResource\Db\AbstractDb', '_idFieldName'); + $idFieldName = new \ReflectionProperty('Magento\Framework\Model\ResourceModel\Db\AbstractDb', '_idFieldName'); $idFieldName->setAccessible(true); $idFieldName->setValue($this->_model, 'field_value'); $this->assertInstanceOf( - 'Magento\Framework\Model\ModelResource\Db\AbstractDb', + 'Magento\Framework\Model\ResourceModel\Db\AbstractDb', $this->_model->load($abstractModelMock, $value, $idFieldName) ); } @@ -323,13 +323,13 @@ class AbstractDbTest extends \PHPUnit_Framework_TestCase $this->returnValue('tableName') ); $mainTableReflection = new \ReflectionProperty( - 'Magento\Framework\Model\ModelResource\Db\AbstractDb', + 'Magento\Framework\Model\ResourceModel\Db\AbstractDb', '_mainTable' ); $mainTableReflection->setAccessible(true); $mainTableReflection->setValue($this->_model, 'tableName'); $idFieldNameReflection = new \ReflectionProperty( - 'Magento\Framework\Model\ModelResource\Db\AbstractDb', + 'Magento\Framework\Model\ResourceModel\Db\AbstractDb', '_idFieldName' ); $idFieldNameReflection->setAccessible(true); @@ -340,7 +340,7 @@ class AbstractDbTest extends \PHPUnit_Framework_TestCase $abstractModelMock->expects($this->once())->method('afterDelete'); $abstractModelMock->expects($this->once())->method('afterDeleteCommit'); $this->assertInstanceOf( - 'Magento\Framework\Model\ModelResource\Db\AbstractDb', + 'Magento\Framework\Model\ResourceModel\Db\AbstractDb', $this->_model->delete($abstractModelMock) ); } @@ -384,7 +384,7 @@ class AbstractDbTest extends \PHPUnit_Framework_TestCase true, ['__wakeup', 'getOrigData', 'getData'] ); - $mainTableProperty = new \ReflectionProperty('Magento\Framework\Model\ModelResource\Db\AbstractDb', '_mainTable'); + $mainTableProperty = new \ReflectionProperty('Magento\Framework\Model\ResourceModel\Db\AbstractDb', '_mainTable'); $mainTableProperty->setAccessible(true); $mainTableProperty->setValue($this->_model, 'table'); @@ -417,7 +417,7 @@ class AbstractDbTest extends \PHPUnit_Framework_TestCase ); $registryMock = $this->getMock('\Magento\Framework\Registry', [], [], '', false); $resourceMock = $this->getMock( - 'Magento\Framework\Model\ModelResource\Db\AbstractDb', + 'Magento\Framework\Model\ResourceModel\Db\AbstractDb', [ '_construct', 'getConnection', @@ -448,13 +448,13 @@ class AbstractDbTest extends \PHPUnit_Framework_TestCase $this->returnValue('tableName') ); $mainTableReflection = new \ReflectionProperty( - 'Magento\Framework\Model\ModelResource\Db\AbstractDb', + 'Magento\Framework\Model\ResourceModel\Db\AbstractDb', '_mainTable' ); $mainTableReflection->setAccessible(true); $mainTableReflection->setValue($this->_model, 'tableName'); $idFieldNameReflection = new \ReflectionProperty( - 'Magento\Framework\Model\ModelResource\Db\AbstractDb', + 'Magento\Framework\Model\ResourceModel\Db\AbstractDb', '_idFieldName' ); $idFieldNameReflection->setAccessible(true); @@ -487,4 +487,72 @@ class AbstractDbTest extends \PHPUnit_Framework_TestCase $this->_model->save($abstractModelMock); } + + /** + * Test that we only set/override id on object if PK autoincrement is enabled + * @param bool $pkIncrement + * @dataProvider saveNewObjectDataProvider + * @SuppressWarnings(PHPMD.NPathComplexity) + */ + public function testSaveNewObject($pkIncrement) + { + /** + * Mock SUT so as not to test extraneous logic + */ + $model = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\Db\AbstractDb') + ->disableOriginalConstructor() + ->setMethods(['_prepareDataForSave', 'getIdFieldName', 'getConnection', 'getMainTable']) + ->getMockForAbstractClass(); + /** + * Only testing the logic in a protected method and property, must use reflection to avoid dealing with large + * amounts of unrelated logic in save function + * + * make saveNewObject and _isPkAutoIncrement public + */ + $reflectionMethod = new \ReflectionMethod($model, 'saveNewObject'); + $reflectionMethod->setAccessible(true); + $reflectionProperty = new \ReflectionProperty($model, '_isPkAutoIncrement'); + $reflectionProperty->setAccessible(true); + $reflectionProperty->setValue($model, $pkIncrement); + + // Mocked behavior + $connectionMock = $this->getMockBuilder('\Magento\Framework\DB\Adapter\AdapterInterface') + ->disableOriginalConstructor() + ->setMethods(['lastInsertId']) + ->getMockForAbstractClass(); + $getConnectionInvokedCount = $pkIncrement ? 2 : 1; + $model->expects($this->exactly($getConnectionInvokedCount)) + ->method('getConnection') + ->willReturn($connectionMock); + + $idFieldName = 'id_field_name'; + $model->expects($this->once())->method('_prepareDataForSave')->willReturn([$idFieldName => 'id',]); + + + // Test expectations + // Only get object's id field name if not PK autoincrement + $getIdFieldNameInvokedCount = $pkIncrement ? 1 : 0; + $model->expects($this->exactly($getIdFieldNameInvokedCount)) + ->method('getIdFieldName') + ->willReturn($idFieldName); + + // Only set object id if not PK autoincrement + $setIdInvokedCount = $pkIncrement ? 1 : 0; + $inputObject = $this->getMockBuilder('\Magento\Framework\Model\AbstractModel') + ->disableOriginalConstructor() + ->getMock(); + $inputObject->expects($this->exactly($setIdInvokedCount))->method('setId'); + + // Only call lastInsertId if not PK autoincrement + $lastInsertIdInvokedCount = $pkIncrement ? 1 : 0; + $connectionMock->expects($this->exactly($lastInsertIdInvokedCount))->method('lastInsertId'); + + $reflectionMethod->invokeArgs($model, [$inputObject]); + } + + public function saveNewObjectDataProvider() + { + return [[true], [false]]; + } + } diff --git a/lib/internal/Magento/Framework/Model/Test/Unit/ModelResource/Db/Collection/AbstractCollectionTest.php b/lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Db/Collection/AbstractCollectionTest.php similarity index 97% rename from lib/internal/Magento/Framework/Model/Test/Unit/ModelResource/Db/Collection/AbstractCollectionTest.php rename to lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Db/Collection/AbstractCollectionTest.php index e64b46417dfd9f43a46189f5c6fb7f3831048a6e..8e9abd11fef865cd8f2bf9187284423df4fd8fcf 100644 --- a/lib/internal/Magento/Framework/Model/Test/Unit/ModelResource/Db/Collection/AbstractCollectionTest.php +++ b/lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Db/Collection/AbstractCollectionTest.php @@ -6,10 +6,10 @@ // @codingStandardsIgnoreFile -namespace Magento\Framework\Model\Test\Unit\ModelResource\Db\Collection; +namespace Magento\Framework\Model\Test\Unit\ResourceModel\Db\Collection; use Magento\Framework\DB\Select; -use Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection; +use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection; use Magento\Framework\DataObject as MagentoObject; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper; @@ -38,7 +38,7 @@ class AbstractCollectionTest extends \PHPUnit_Framework_TestCase /** @var \Magento\Framework\Event\ManagerInterface|\PHPUnit_Framework_MockObject_MockObject */ protected $managerMock; - /** @var \Magento\Framework\Model\ModelResource\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject */ + /** @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject */ protected $resourceMock; /** @var \Magento\Framework\DB\Adapter\Pdo\Mysql|\PHPUnit_Framework_MockObject_MockObject */ @@ -103,14 +103,14 @@ class AbstractCollectionTest extends \PHPUnit_Framework_TestCase protected function getUut() { return $this->objectManagerHelper->getObject( - 'Magento\Framework\Model\Test\Unit\ModelResource\Db\Collection\Uut', + 'Magento\Framework\Model\Test\Unit\ResourceModel\Db\Collection\Uut', [ 'entityFactory' => $this->entityFactoryMock, 'logger' => $this->loggerMock, 'fetchStrategy' => $this->fetchStrategyMock, 'eventManager' => $this->managerMock, 'connection' => $this->connectionMock, - // Magento\Framework\Flag\FlagResource extends Magento\Framework\Model\ModelResource\Db\AbstractDb + // Magento\Framework\Flag\FlagResource extends Magento\Framework\Model\ResourceModel\Db\AbstractDb 'resource' => $this->resourceMock, ] ); diff --git a/lib/internal/Magento/Framework/Model/Test/Unit/ModelResource/Db/VersionControl/MetadataTest.php b/lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Db/VersionControl/MetadataTest.php similarity index 91% rename from lib/internal/Magento/Framework/Model/Test/Unit/ModelResource/Db/VersionControl/MetadataTest.php rename to lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Db/VersionControl/MetadataTest.php index cb8768fbf06cece0b6d02710dcaf0c1b38f5505e..014909543bc5668a9ca8c4e920024d48a3a55878 100644 --- a/lib/internal/Magento/Framework/Model/Test/Unit/ModelResource/Db/VersionControl/MetadataTest.php +++ b/lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Db/VersionControl/MetadataTest.php @@ -3,7 +3,7 @@ * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ -namespace Magento\Framework\Model\Test\Unit\ModelResource\Db\VersionControl; +namespace Magento\Framework\Model\Test\Unit\ResourceModel\Db\VersionControl; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; @@ -13,7 +13,7 @@ use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; class MetadataTest extends \PHPUnit_Framework_TestCase { /** - * @var \Magento\Framework\Model\ModelResource\Db\VersionControl\Metadata + * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\Metadata */ protected $entityMetadata; @@ -23,7 +23,7 @@ class MetadataTest extends \PHPUnit_Framework_TestCase protected $model; /** - * @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Framework\Model\ModelResource\Db\AbstractDb + * @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Framework\Model\ResourceModel\Db\AbstractDb */ protected $resource; @@ -64,7 +64,7 @@ class MetadataTest extends \PHPUnit_Framework_TestCase $this->model->expects($this->any())->method('getResource')->willReturn($this->resource); $this->resource->expects($this->any())->method('getConnection')->willReturn($this->connection); $this->entityMetadata = $objectManager->getObject( - 'Magento\Framework\Model\ModelResource\Db\VersionControl\Metadata' + 'Magento\Framework\Model\ResourceModel\Db\VersionControl\Metadata' ); } diff --git a/lib/internal/Magento/Framework/Model/Test/Unit/ModelResource/Db/VersionControl/RelationCompositeTest.php b/lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Db/VersionControl/RelationCompositeTest.php similarity index 88% rename from lib/internal/Magento/Framework/Model/Test/Unit/ModelResource/Db/VersionControl/RelationCompositeTest.php rename to lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Db/VersionControl/RelationCompositeTest.php index e099a2d0ceecc97c0949ba4eaf9ad7e055b84d54..428e9bef37de4254cc911430ade3c7e72d7e4bb7 100644 --- a/lib/internal/Magento/Framework/Model/Test/Unit/ModelResource/Db/VersionControl/RelationCompositeTest.php +++ b/lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Db/VersionControl/RelationCompositeTest.php @@ -4,7 +4,7 @@ * See COPYING.txt for license details. */ -namespace Magento\Framework\Model\Test\Unit\ModelResource\Db\VersionControl; +namespace Magento\Framework\Model\Test\Unit\ResourceModel\Db\VersionControl; /** * Class RelationCompositeTest @@ -12,7 +12,7 @@ namespace Magento\Framework\Model\Test\Unit\ModelResource\Db\VersionControl; class RelationCompositeTest extends \PHPUnit_Framework_TestCase { /** - * @var \Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite + * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite */ protected $entityRelationComposite; @@ -22,7 +22,7 @@ class RelationCompositeTest extends \PHPUnit_Framework_TestCase protected $modelMock; /** - * @var \Magento\Framework\Model\ModelResource\Db\VersionControl\RelationInterface + * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationInterface */ protected $relationProcessorMock; @@ -48,10 +48,10 @@ class RelationCompositeTest extends \PHPUnit_Framework_TestCase ->disableOriginalConstructor() ->getMockForAbstractClass(); $this->relationProcessorMock = $this->getMockBuilder( - 'Magento\Framework\Model\ModelResource\Db\VersionControl\RelationInterface' + 'Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationInterface' )->disableOriginalConstructor()->getMockForAbstractClass(); - $this->entityRelationComposite = new \Magento\Framework\Model\ModelResource\Db\VersionControl\RelationComposite( + $this->entityRelationComposite = new \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite( $this->eventManagerMock, [ 'default' => $this->relationProcessorMock diff --git a/lib/internal/Magento/Framework/Model/Test/Unit/ModelResource/Db/VersionControl/SnapshotTest.php b/lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Db/VersionControl/SnapshotTest.php similarity index 90% rename from lib/internal/Magento/Framework/Model/Test/Unit/ModelResource/Db/VersionControl/SnapshotTest.php rename to lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Db/VersionControl/SnapshotTest.php index 36dd2997d93ad462cf628806b1c5c0bac5691182..a228106db6487ff9cff8acff3afa0ed5017dabcf 100644 --- a/lib/internal/Magento/Framework/Model/Test/Unit/ModelResource/Db/VersionControl/SnapshotTest.php +++ b/lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Db/VersionControl/SnapshotTest.php @@ -3,7 +3,7 @@ * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ -namespace Magento\Framework\Model\Test\Unit\ModelResource\Db\VersionControl; +namespace Magento\Framework\Model\Test\Unit\ResourceModel\Db\VersionControl; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; @@ -13,12 +13,12 @@ use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; class SnapshotTest extends \PHPUnit_Framework_TestCase { /** - * @var \Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot + * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot */ protected $entitySnapshot; /** - * @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Framework\Model\ModelResource\Db\VersionControl\Metadata + * @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Framework\Model\ResourceModel\Db\VersionControl\Metadata */ protected $entityMetadata; @@ -42,7 +42,7 @@ class SnapshotTest extends \PHPUnit_Framework_TestCase ); $this->entityMetadata = $this->getMock( - 'Magento\Framework\Model\ModelResource\Db\VersionControl\Metadata', + 'Magento\Framework\Model\ResourceModel\Db\VersionControl\Metadata', ['getFields'], [], '', @@ -50,7 +50,7 @@ class SnapshotTest extends \PHPUnit_Framework_TestCase ); $this->entitySnapshot = $objectManager->getObject( - 'Magento\Framework\Model\ModelResource\Db\VersionControl\Snapshot', + 'Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot', ['metadata' => $this->entityMetadata] ); } diff --git a/lib/internal/Magento/Framework/Model/Test/Unit/ModelResource/Type/Db/ConnectionFactoryTest.php b/lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Type/Db/ConnectionFactoryTest.php similarity index 93% rename from lib/internal/Magento/Framework/Model/Test/Unit/ModelResource/Type/Db/ConnectionFactoryTest.php rename to lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Type/Db/ConnectionFactoryTest.php index 8b3ee72e722896c213f7d3e50c675eba716f75e9..011530e544ec5bd5ccff941954deb3d1469a9e83 100644 --- a/lib/internal/Magento/Framework/Model/Test/Unit/ModelResource/Type/Db/ConnectionFactoryTest.php +++ b/lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Type/Db/ConnectionFactoryTest.php @@ -3,11 +3,11 @@ * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ -namespace Magento\Framework\Model\Test\Unit\ModelResource\Type\Db; +namespace Magento\Framework\Model\Test\Unit\ResourceModel\Type\Db; use Magento\Framework\App\ResourceConnection\ConnectionAdapterInterface; use Magento\Framework\DB\LoggerInterface; -use Magento\Framework\Model\ModelResource\Type\Db\ConnectionFactory; +use Magento\Framework\Model\ResourceModel\Type\Db\ConnectionFactory; use Magento\Framework\ObjectManagerInterface; class ConnectionFactoryTest extends \PHPUnit_Framework_TestCase diff --git a/lib/internal/Magento/Framework/Model/Test/Unit/ModelResource/Type/Db/Pdo/MysqlTest.php b/lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Type/Db/Pdo/MysqlTest.php similarity index 96% rename from lib/internal/Magento/Framework/Model/Test/Unit/ModelResource/Type/Db/Pdo/MysqlTest.php rename to lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Type/Db/Pdo/MysqlTest.php index bab2946213e5656bf433695fd6446958b0306c58..05c7a39503104ea6b694bc2338fc536fea762f6f 100644 --- a/lib/internal/Magento/Framework/Model/Test/Unit/ModelResource/Type/Db/Pdo/MysqlTest.php +++ b/lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Type/Db/Pdo/MysqlTest.php @@ -4,9 +4,9 @@ * See COPYING.txt for license details. */ -namespace Magento\Framework\Model\Test\Unit\ModelResource\Type\Db\Pdo; +namespace Magento\Framework\Model\Test\Unit\ResourceModel\Type\Db\Pdo; -use \Magento\Framework\Model\ModelResource\Type\Db\Pdo\Mysql; +use \Magento\Framework\Model\ResourceModel\Type\Db\Pdo\Mysql; class MysqlTest extends \PHPUnit_Framework_TestCase { diff --git a/lib/internal/Magento/Framework/Module/ModuleResource.php b/lib/internal/Magento/Framework/Module/ModuleResource.php index bbba5b3307368f2169ad258da61438cf4a45ab4d..10b49c469e5948ff78d18a4a500425a98750a948 100644 --- a/lib/internal/Magento/Framework/Module/ModuleResource.php +++ b/lib/internal/Magento/Framework/Module/ModuleResource.php @@ -11,7 +11,7 @@ namespace Magento\Framework\Module; /** * Resource Model */ -class ModuleResource extends \Magento\Framework\Model\ModelResource\Db\AbstractDb implements \Magento\Framework\Module\ResourceInterface +class ModuleResource extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb implements \Magento\Framework\Module\ResourceInterface { /** * Database versions diff --git a/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/ConverterTest.php b/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/ConverterTest.php index c03b20e274c6ce5eb9fc11a7129153a94320b38a..10bafa24672ad8ed72d942d6de81262d8f2434e8 100644 --- a/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/ConverterTest.php +++ b/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/ConverterTest.php @@ -77,7 +77,7 @@ class ConverterTest extends \PHPUnit_Framework_TestCase //Mocking _validateData call $this->definedClassesMock->expects($this->at(0)) - ->method('classLoadable') + ->method('isClassLoadable') ->will($this->returnValue(true)); $this->ioObjectMock->expects($this->once()) diff --git a/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/RepositoryTest.php b/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/RepositoryTest.php index 08c9586b45de328a218ea0685d9ba32972b50e1f..1be208085ab052389b20c1bc1980818724cac2c8 100644 --- a/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/RepositoryTest.php +++ b/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/RepositoryTest.php @@ -41,7 +41,7 @@ class RepositoryTest extends EntityChildTestAbstract protected function mockDefinedClassesCall() { $this->definedClassesMock->expects($this->at(0)) - ->method('classLoadable') + ->method('isClassLoadable') ->with($this->getSourceClassName() . 'Interface') ->willReturn(true); } diff --git a/lib/internal/Magento/Framework/Setup/SampleData/Executor.php b/lib/internal/Magento/Framework/Setup/SampleData/Executor.php index 2a71963fb661450b68445bc9b2913894a2067eda..4f2d966099d964e8fdcf644095549632ee2fc10e 100644 --- a/lib/internal/Magento/Framework/Setup/SampleData/Executor.php +++ b/lib/internal/Magento/Framework/Setup/SampleData/Executor.php @@ -7,16 +7,34 @@ namespace Magento\Framework\Setup\SampleData; class Executor { + /** + * @var State + */ + private $state; + + /** + * @var \Psr\Log\LoggerInterface + */ + private $logger; + + /** + * @var \Magento\Framework\App\State + */ + private $appState; + /** * @param \Psr\Log\LoggerInterface $logger - * @param \Magento\Framework\Setup\SampleData\State $state + * @param State $state + * @param \Magento\Framework\App\State $appState */ public function __construct( \Psr\Log\LoggerInterface $logger, - \Magento\Framework\Setup\SampleData\State $state + \Magento\Framework\Setup\SampleData\State $state, + \Magento\Framework\App\State $appState ) { $this->logger = $logger; $this->state = $state; + $this->appState = $appState; } /** @@ -29,7 +47,7 @@ class Executor public function exec(InstallerInterface $installer) { try { - $installer->install(); + $this->appState->emulateAreaCode('setup', [$installer, 'install']); $this->state->setInstalled(); } catch (\Exception $e) { $this->state->setError(); diff --git a/lib/internal/Magento/Framework/Test/Unit/FlagTest.php b/lib/internal/Magento/Framework/Test/Unit/FlagTest.php index da7593745b8262a165821780731eaa64b59a9ed1..4cf45055b9f4326702a5efc881d0aa95ec6e4dc0 100644 --- a/lib/internal/Magento/Framework/Test/Unit/FlagTest.php +++ b/lib/internal/Magento/Framework/Test/Unit/FlagTest.php @@ -55,7 +55,7 @@ class FlagTest extends \PHPUnit_Framework_TestCase ->method('getConnection') ->will($this->returnValue($connection)); - $dbContextMock = $this->getMock('\Magento\Framework\Model\ModelResource\Db\Context', [], [], '', false); + $dbContextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false); $dbContextMock->expects($this->once())->method('getResources')->willReturn($appResource); $resource = $this->getMock( '\Magento\Framework\Flag\FlagResource', diff --git a/lib/internal/Magento/Framework/Test/Unit/TranslateTest.php b/lib/internal/Magento/Framework/Test/Unit/TranslateTest.php index a6eb38b152e1451061ba59f9943b14ede1092075..9d027237244bbf016d272f9ba45dc58906ecaa70 100644 --- a/lib/internal/Magento/Framework/Test/Unit/TranslateTest.php +++ b/lib/internal/Magento/Framework/Test/Unit/TranslateTest.php @@ -68,7 +68,15 @@ class TranslateTest extends \PHPUnit_Framework_TestCase $this->resource = $this->getMock('\Magento\Framework\Translate\ResourceInterface', [], [], '', false); $this->locale = $this->getMock('\Magento\Framework\Locale\ResolverInterface', [], [], '', false); $this->appState = $this->getMock('\Magento\Framework\App\State', [], [], '', false); - $this->request = $this->getMock('\Magento\Framework\App\RequestInterface', [], [], '', false); + $this->request = $this->getMockForAbstractClass( + '\Magento\Framework\App\RequestInterface', + [], + '', + false, + false, + true, + ['getParam', 'getControllerModule'] + ); $this->csvParser = $this->getMock('\Magento\Framework\File\Csv', [], [], '', false); $this->packDictionary = $this->getMock('\Magento\Framework\App\Language\Dictionary', [], [], '', false); $this->directory = $this->getMock('\Magento\Framework\Filesystem\Directory\ReadInterface', [], [], '', false); diff --git a/lib/internal/Magento/Framework/TestFramework/Unit/Helper/ObjectManager.php b/lib/internal/Magento/Framework/TestFramework/Unit/Helper/ObjectManager.php index e1904afd558d3b4bc42f9f077834091ce9afd008..aecb780b1087bd5eb4389eff9c0a2c8bb7139b70 100644 --- a/lib/internal/Magento/Framework/TestFramework/Unit/Helper/ObjectManager.php +++ b/lib/internal/Magento/Framework/TestFramework/Unit/Helper/ObjectManager.php @@ -17,7 +17,7 @@ class ObjectManager * @var array */ protected $_specialCases = [ - 'Magento\Framework\Model\ModelResource\AbstractResource' => '_getResourceModelMock', + 'Magento\Framework\Model\ResourceModel\AbstractResource' => '_getResourceModelMock', 'Magento\Framework\TranslateInterface' => '_getTranslatorMock', ]; diff --git a/lib/internal/Magento/Framework/Translate.php b/lib/internal/Magento/Framework/Translate.php index 2a3341bd5e21b936c97f5624de97c0196a73fc41..d88f4686ee9e4f4fb3375580273b9d73708c1de8 100644 --- a/lib/internal/Magento/Framework/Translate.php +++ b/lib/internal/Magento/Framework/Translate.php @@ -204,6 +204,9 @@ class Translate implements \Magento\Framework\TranslateInterface if (!isset($this->_config['theme'])) { $this->_config['theme'] = $this->_viewDesign->getDesignTheme()->getId(); } + if (!isset($this->_config['module'])) { + $this->_config['module'] = $this->getControllerModuleName(); + } return $this; } @@ -232,6 +235,15 @@ class Translate implements \Magento\Framework\TranslateInterface return null; } + /** + * Retrieve name of the current module + * @return mixed + */ + protected function getControllerModuleName() + { + return $this->request->getControllerModule(); + } + /** * Load data from module translation files * @@ -239,7 +251,23 @@ class Translate implements \Magento\Framework\TranslateInterface */ protected function _loadModuleTranslation() { - foreach ($this->_moduleList->getNames() as $module) { + $currentModule = $this->getControllerModuleName(); + $allModulesExceptCurrent = array_diff($this->_moduleList->getNames(), [$currentModule]); + + $this->loadModuleTranslationByModulesList($allModulesExceptCurrent); + $this->loadModuleTranslationByModulesList([$currentModule]); + return $this; + } + + /** + * Load data from module translation files by list of modules + * + * @param array $modules + * @return $this + */ + protected function loadModuleTranslationByModulesList(array $modules) + { + foreach ($modules as $module) { $moduleFilePath = $this->_getModuleTranslationFile($module, $this->getLocale()); $this->_addData($this->_getFileData($moduleFilePath)); } @@ -428,6 +456,9 @@ class Translate implements \Magento\Framework\TranslateInterface if (isset($this->_config['theme'])) { $this->_cacheId .= '_' . $this->_config['theme']; } + if (isset($this->_config['module'])) { + $this->_cacheId .= '_' . $this->_config['module']; + } } return $this->_cacheId; } diff --git a/lib/internal/Magento/Framework/Ui/etc/ui_components.xsd b/lib/internal/Magento/Framework/Ui/etc/ui_components.xsd index 3790dec48e07bbcb9d6661d3ce09551e4cc75f19..f57cee5918faf2e1492be91f8c4107c82b619da7 100644 --- a/lib/internal/Magento/Framework/Ui/etc/ui_components.xsd +++ b/lib/internal/Magento/Framework/Ui/etc/ui_components.xsd @@ -114,6 +114,25 @@ <xs:extension base="input"/> </xs:complexContent> </xs:complexType> + <xs:complexType name="component"> + <xs:complexContent> + <xs:extension base="ui_element"> + <xs:choice minOccurs="0" maxOccurs="unbounded"> + <xs:group ref="configurable"/> + </xs:choice> + </xs:extension> + </xs:complexContent> + </xs:complexType> + <xs:complexType name="actionsColumn"> + <xs:complexContent> + <xs:extension base="column"/> + </xs:complexContent> + </xs:complexType> + <xs:complexType name="selectionsColumn"> + <xs:complexContent> + <xs:extension base="column"/> + </xs:complexContent> + </xs:complexType> <xs:complexType name="container"> <xs:complexContent> <xs:extension base="ui_element"> diff --git a/lib/internal/Magento/Framework/Ui/etc/ui_configuration.xsd b/lib/internal/Magento/Framework/Ui/etc/ui_configuration.xsd index 2cf581c0e9bb621808dab7569ef9bab3e99cc42d..9cdf10564944662f5ee6cafa29c88c7c3ee28917 100644 --- a/lib/internal/Magento/Framework/Ui/etc/ui_configuration.xsd +++ b/lib/internal/Magento/Framework/Ui/etc/ui_configuration.xsd @@ -34,6 +34,9 @@ <xs:element type="argumentType" name="argument"/> <xs:element type="bookmark" name="bookmark"/> <xs:element name="filterSearch" type="filterSearch" /> + <xs:element name="component" type="component" /> + <xs:element name="actionsColumn" type="actionsColumn" /> + <xs:element name="selectionsColumn" type="selectionsColumn" /> <xs:element type="exportButton" name="exportButton"/> </xs:choice> </xs:extension> @@ -80,6 +83,8 @@ <xs:extension base="columns"> <xs:choice minOccurs="0" maxOccurs="unbounded"> <xs:element name="column" type="column" /> + <xs:element name="actionsColumn" type="actionsColumn" /> + <xs:element name="selectionsColumn" type="selectionsColumn" /> </xs:choice> </xs:extension> </xs:complexContent> diff --git a/lib/internal/Magento/Framework/Ui/etc/ui_definition.xsd b/lib/internal/Magento/Framework/Ui/etc/ui_definition.xsd index 75b710a0e8bf406a3d649a5ad6c4be26ff253ef0..78cd48d5f43a23f8cf7cac6ed860108fa330fe3b 100644 --- a/lib/internal/Magento/Framework/Ui/etc/ui_definition.xsd +++ b/lib/internal/Magento/Framework/Ui/etc/ui_definition.xsd @@ -48,11 +48,15 @@ <xs:element type="dataTypeMedia" name="image"/> <xs:element type="dataTypeDate" name="date"/> <xs:element type="dataTypeEmail" name="email"/> + <xs:element type="dataTypeMedia" name="file"/> <xs:element type="nav" name="nav"/> <xs:element type="actions" name="actions"/> <xs:element type="bookmark" name="bookmark"/> <xs:element type="exportButton" name="exportButton"/> <xs:element type="action" name="action"/> + <xs:element name="component" type="component" /> + <xs:element name="actionsColumn" type="actionsColumn" /> + <xs:element name="selectionsColumn" type="selectionsColumn" /> </xs:all> </xs:complexType> <!-- Custom configuration --> diff --git a/lib/internal/Magento/Framework/View/Element/UiComponent/Context.php b/lib/internal/Magento/Framework/View/Element/UiComponent/Context.php index 1dd81a187c7508f516dbd37f9d77ec239eb6812e..3ea8c49a43d6180decaa0a42ee34f06d2c256566 100644 --- a/lib/internal/Magento/Framework/View/Element/UiComponent/Context.php +++ b/lib/internal/Magento/Framework/View/Element/UiComponent/Context.php @@ -7,6 +7,7 @@ namespace Magento\Framework\View\Element\UiComponent; use Magento\Framework\UrlInterface; use Magento\Framework\App\RequestInterface; +use Magento\Framework\View\Element\UiComponent\Processor; use Magento\Framework\View\Element\UiComponentInterface; use Magento\Framework\View\Element\UiComponent\Control\ActionPoolFactory; use Magento\Framework\View\Element\UiComponent\Control\ActionPoolInterface; @@ -84,6 +85,11 @@ class Context implements ContextInterface */ protected $urlBuilder; + /** + * @var Processor + */ + protected $processor; + /** * @param PageLayoutInterface $pageLayout * @param RequestInterface $request @@ -91,8 +97,9 @@ class Context implements ContextInterface * @param ActionPoolFactory $actionPoolFactory * @param ContentTypeFactory $contentTypeFactory * @param UrlInterface $urlBuilder + * @param Processor $processor * @param DataProviderInterface|null $dataProvider - * @param string $namespace + * @param null $namespace */ public function __construct( PageLayoutInterface $pageLayout, @@ -101,6 +108,7 @@ class Context implements ContextInterface ActionPoolFactory $actionPoolFactory, ContentTypeFactory $contentTypeFactory, UrlInterface $urlBuilder, + Processor $processor, DataProviderInterface $dataProvider = null, $namespace = null ) { @@ -112,7 +120,7 @@ class Context implements ContextInterface $this->actionPool = $actionPoolFactory->create(['context' => $this]); $this->contentTypeFactory = $contentTypeFactory; $this->urlBuilder = $urlBuilder; - + $this->processor = $processor; $this->setAcceptType(); } @@ -362,4 +370,12 @@ class Context implements ContextInterface } $data = $component->prepareDataSource($data); } + + /** + * @inheritDoc + */ + public function getProcessor() + { + return $this->processor; + } } diff --git a/lib/internal/Magento/Framework/View/Element/UiComponent/ContextInterface.php b/lib/internal/Magento/Framework/View/Element/UiComponent/ContextInterface.php index 55ed8e0d0657d2a7dc784bdf33f34782d8afe3e9..bd89985dc14905ebdfbec190796dcbd80075fd8f 100644 --- a/lib/internal/Magento/Framework/View/Element/UiComponent/ContextInterface.php +++ b/lib/internal/Magento/Framework/View/Element/UiComponent/ContextInterface.php @@ -5,6 +5,7 @@ */ namespace Magento\Framework\View\Element\UiComponent; +use Magento\Framework\View\Element\UiComponent\Processor; use Magento\Framework\View\Element\UiComponentInterface; use Magento\Framework\View\Element\UiComponent\ContentType\ContentTypeInterface; use Magento\Framework\View\Element\UiComponent\DataProvider\DataProviderInterface; @@ -136,4 +137,11 @@ interface ContextInterface * @return string */ public function getUrl($route = '', $params = []); + + /** + * Get component processor + * + * @return Processor + */ + public function getProcessor(); } diff --git a/lib/internal/Magento/Framework/View/Element/UiComponent/DataProvider/CollectionFactory.php b/lib/internal/Magento/Framework/View/Element/UiComponent/DataProvider/CollectionFactory.php index bc0b10094d9fecb459650ccab8eca1d544eecca5..5adce4658a7d01fc8604d046e0d544352552bfe0 100644 --- a/lib/internal/Magento/Framework/View/Element/UiComponent/DataProvider/CollectionFactory.php +++ b/lib/internal/Magento/Framework/View/Element/UiComponent/DataProvider/CollectionFactory.php @@ -6,7 +6,7 @@ namespace Magento\Framework\View\Element\UiComponent\DataProvider; -use Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection; +use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection; use Magento\Framework\ObjectManagerInterface; /** diff --git a/lib/internal/Magento/Framework/View/Element/UiComponent/DataProvider/DataProviderInterface.php b/lib/internal/Magento/Framework/View/Element/UiComponent/DataProvider/DataProviderInterface.php index 456b6f137b1c71f6a33f6657c1b31c66578d4f16..b2e3894c00b56c185076a58da850d31b3e7c7816 100644 --- a/lib/internal/Magento/Framework/View/Element/UiComponent/DataProvider/DataProviderInterface.php +++ b/lib/internal/Magento/Framework/View/Element/UiComponent/DataProvider/DataProviderInterface.php @@ -5,7 +5,7 @@ */ namespace Magento\Framework\View\Element\UiComponent\DataProvider; -use Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection; +use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection; /** * Interface DataProviderInterface diff --git a/lib/internal/Magento/Framework/View/Element/UiComponent/DataProvider/FulltextFilter.php b/lib/internal/Magento/Framework/View/Element/UiComponent/DataProvider/FulltextFilter.php index 09b29cad8712985a9163d44fe3d28384e6c2a403..f53fbf5d1f4725ffda7c8ac27e8aa300d84362a0 100644 --- a/lib/internal/Magento/Framework/View/Element/UiComponent/DataProvider/FulltextFilter.php +++ b/lib/internal/Magento/Framework/View/Element/UiComponent/DataProvider/FulltextFilter.php @@ -7,7 +7,7 @@ namespace Magento\Framework\View\Element\UiComponent\DataProvider; use Magento\Framework\Data\Collection\AbstractDb as DbCollection; -use Magento\Framework\Model\ModelResource\Db\AbstractDb as DbResource; +use Magento\Framework\Model\ResourceModel\Db\AbstractDb as DbResource; use Magento\Framework\Api\Filter; /** diff --git a/lib/internal/Magento/Framework/View/Element/UiComponent/DataProvider/SearchResult.php b/lib/internal/Magento/Framework/View/Element/UiComponent/DataProvider/SearchResult.php index ab9038ca12861f24a0cd01e207a9de7e2f743afb..4dd0dab9f343e54621ef52d5e370a371d2062b7e 100644 --- a/lib/internal/Magento/Framework/View/Element/UiComponent/DataProvider/SearchResult.php +++ b/lib/internal/Magento/Framework/View/Element/UiComponent/DataProvider/SearchResult.php @@ -7,7 +7,7 @@ namespace Magento\Framework\View\Element\UiComponent\DataProvider; use Magento\Framework\Api; -use Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection; +use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection; use Magento\Framework\Event\ManagerInterface as EventManager; use Magento\Framework\Data\Collection\Db\FetchStrategyInterface as FetchStrategy; use Magento\Framework\Data\Collection\EntityFactoryInterface as EntityFactory; diff --git a/lib/internal/Magento/Framework/View/Element/UiComponent/ObserverInterface.php b/lib/internal/Magento/Framework/View/Element/UiComponent/ObserverInterface.php new file mode 100644 index 0000000000000000000000000000000000000000..b9cbce56acb0f35dfe9d63ce0c1f5bb8c818dc66 --- /dev/null +++ b/lib/internal/Magento/Framework/View/Element/UiComponent/ObserverInterface.php @@ -0,0 +1,22 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Framework\View\Element\UiComponent; + +use Magento\Framework\View\Element\UiComponentInterface; + +/** + * Interface ObserverInterface + */ +interface ObserverInterface +{ + /** + * Update component according to $component + * + * @param UiComponentInterface $component + * @return void + */ + public function update(UiComponentInterface $component); +} diff --git a/lib/internal/Magento/Framework/View/Element/UiComponent/PoolInterface.php b/lib/internal/Magento/Framework/View/Element/UiComponent/PoolInterface.php new file mode 100644 index 0000000000000000000000000000000000000000..c265025925d8e30689571a2c2937b9ecb9b3801c --- /dev/null +++ b/lib/internal/Magento/Framework/View/Element/UiComponent/PoolInterface.php @@ -0,0 +1,29 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Framework\View\Element\UiComponent; + +use Magento\Framework\View\Element\UiComponentInterface; + +/** + * Interface PoolInterface + */ +interface PoolInterface +{ + /** + * Register component at pool + * + * @param UiComponentInterface $component + * @return void + */ + public function register(UiComponentInterface $component); + + /** + * Retrieve components pool + * + * @return UiComponentInterface[] + */ + public function getComponents(); +} diff --git a/lib/internal/Magento/Framework/View/Element/UiComponent/Processor.php b/lib/internal/Magento/Framework/View/Element/UiComponent/Processor.php new file mode 100644 index 0000000000000000000000000000000000000000..4e7bb9d9932b0815394b77b0ef0ec3f82ef81422 --- /dev/null +++ b/lib/internal/Magento/Framework/View/Element/UiComponent/Processor.php @@ -0,0 +1,106 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Framework\View\Element\UiComponent; + +use Magento\Framework\View\Element\UiComponentInterface; + +/** + * Class Processor + */ +class Processor implements PoolInterface, SubjectInterface +{ + /** + * @var UiComponentInterface[] + */ + protected $components = []; + + /** + * Array of observers + * + * [ + * 'component_type1' => ObserverInterface[], + * 'component_type2' => ObserverInterface[], + * ] + * + * @var array + */ + protected $observers = []; + + + /** + * @inheritDoc + */ + public function register(UiComponentInterface $component) + { + $this->components[] = $component; + } + + /** + * @inheritDoc + */ + public function getComponents() + { + return $this->components; + } + + /** + * @inheritDoc + */ + public function attach($type, ObserverInterface $observer) + { + $this->observers[$type][] = $observer; + } + + /** + * @inheritDoc + */ + public function detach($type, ObserverInterface $observer) + { + if (!isset($this->observers[$type])) { + return; + } + + $key = array_search($observer, $this->observers[$type], true); + if ($key !== false) { + unset($this->observers[$type][$key]); + } + } + + /** + * @inheritDoc + */ + public function notify($type) + { + $componentType = $this->normalizeType($type); + if (!isset($this->observers[$componentType])) { + return; + } + + /** @var UiComponentInterface $component */ + foreach ($this->getComponents() as $component) { + if ($component->getComponentName() != $type) { + continue; + } + + /** @var ObserverInterface $observer */ + foreach ($this->observers[$componentType] as $observer) { + $observer->update($component); + } + } + } + + /** + * Normalize type to component type + * + * @param string $type + * @return string + */ + protected function normalizeType($type) + { + $componentType = (strpos($type, '.') !== false) ? substr($type, 0, strpos($type, '.')) : $type; + return $componentType; + } +} diff --git a/lib/internal/Magento/Framework/View/Element/UiComponent/SubjectInterface.php b/lib/internal/Magento/Framework/View/Element/UiComponent/SubjectInterface.php new file mode 100644 index 0000000000000000000000000000000000000000..6b16644405389a649d0bb78df719ec4f7b5ffffa --- /dev/null +++ b/lib/internal/Magento/Framework/View/Element/UiComponent/SubjectInterface.php @@ -0,0 +1,35 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Framework\View\Element\UiComponent; + +/** + * Interface SubjectInterface + */ +interface SubjectInterface +{ + /** + * Attach an observer by type + * @param string $type + * @param ObserverInterface $observer + * @return void + */ + public function attach($type, ObserverInterface $observer); + + /** + * Detach an observer by type + * @param string $type + * @param ObserverInterface $observer + * @return void + */ + public function detach($type, ObserverInterface $observer); + + /** + * Notify an observer(s) by type + * @param string $type + * @return void + */ + public function notify($type); +} diff --git a/lib/internal/Magento/Framework/View/Layout/GeneratorPool.php b/lib/internal/Magento/Framework/View/Layout/GeneratorPool.php index f0beae9e7a5f94051c2c76935d98b7327d1522ea..a327e4b41398903f061431eb815cabf938bc6f59 100644 --- a/lib/internal/Magento/Framework/View/Layout/GeneratorPool.php +++ b/lib/internal/Magento/Framework/View/Layout/GeneratorPool.php @@ -115,6 +115,9 @@ class GeneratorPool $this->helper->scheduleElement($scheduledStructure, $structure, key($scheduledStructure->getStructure())); } $scheduledStructure->flushPaths(); + while (false === $scheduledStructure->isListToSortEmpty()) { + $this->reorderElements($scheduledStructure, $structure, key($scheduledStructure->getListToSort())); + } foreach ($scheduledStructure->getListToMove() as $elementToMove) { $this->moveElementInStructure($scheduledStructure, $structure, $elementToMove); } @@ -132,6 +135,47 @@ class GeneratorPool return $this; } + /** + * Reorder a child of a specified element + * + * @param ScheduledStructure $scheduledStructure, + * @param Data\Structure $structure + * @param string $elementName + * @return void + */ + protected function reorderElements( + ScheduledStructure $scheduledStructure, + Data\Structure $structure, + $elementName + ) { + $element = $scheduledStructure->getElementToSort($elementName); + $scheduledStructure->unsetElementToSort($element[ScheduledStructure::ELEMENT_NAME]); + + if (isset($element[ScheduledStructure::ELEMENT_OFFSET_OR_SIBLING])) { + $siblingElement = $scheduledStructure->getElementToSort( + $element[ScheduledStructure::ELEMENT_OFFSET_OR_SIBLING] + ); + + if ( + isset($siblingElement[ScheduledStructure::ELEMENT_NAME]) + && $structure->hasElement($siblingElement[ScheduledStructure::ELEMENT_NAME]) + ) { + $this->reorderElements( + $scheduledStructure, + $structure, + $siblingElement[ScheduledStructure::ELEMENT_NAME] + ); + } + } + + $structure->reorderChildElement( + $element[ScheduledStructure::ELEMENT_PARENT_NAME], + $element[ScheduledStructure::ELEMENT_NAME], + $element[ScheduledStructure::ELEMENT_OFFSET_OR_SIBLING], + $element[ScheduledStructure::ELEMENT_IS_AFTER] + ); + } + /** * Remove scheduled element * diff --git a/lib/internal/Magento/Framework/View/Layout/ScheduledStructure.php b/lib/internal/Magento/Framework/View/Layout/ScheduledStructure.php index 90ebb4ba60dd2055c9d5917895e60823b1dd35ef..716fd0362ea7e9a0785fb9bf70886369ea976315 100644 --- a/lib/internal/Magento/Framework/View/Layout/ScheduledStructure.php +++ b/lib/internal/Magento/Framework/View/Layout/ScheduledStructure.php @@ -10,6 +10,15 @@ namespace Magento\Framework\View\Layout; */ class ScheduledStructure { + /**#@+ + * Keys for array of elements to sort + */ + const ELEMENT_NAME = 'elementName'; + const ELEMENT_PARENT_NAME = 'parentName'; + const ELEMENT_OFFSET_OR_SIBLING = 'offsetOrSibling'; + const ELEMENT_IS_AFTER = 'isAfter'; + /**#@-*/ + /** * Information about structural elements, scheduled for creation * @@ -66,6 +75,13 @@ class ScheduledStructure */ protected $brokenParent = []; + /** + * Elements that need to sort + * + * @var array + */ + protected $elementsToSort = []; + /** * @param array $data * @@ -82,6 +98,68 @@ class ScheduledStructure $this->scheduledPaths = isset($data['scheduledPaths']) ? $data['scheduledPaths'] : []; } + /** + * Set elements to sort + * + * @param string $parentName + * @param string $elementName + * @param string|int|null $offsetOrSibling + * @param bool $isAfter + * @return void + */ + public function setElementToSortList($parentName, $elementName, $offsetOrSibling, $isAfter = true) + { + $this->elementsToSort[$elementName] = [ + self::ELEMENT_NAME => $elementName, + self::ELEMENT_PARENT_NAME => $parentName, + self::ELEMENT_OFFSET_OR_SIBLING => $offsetOrSibling, + self::ELEMENT_IS_AFTER => $isAfter + ]; + } + + /** + * Check if elements list of sorting is empty + * + * @return bool + */ + public function isListToSortEmpty() + { + return empty($this->elementsToSort); + } + + /** + * Unset specified element from list of sorting + * + * @param string $elementName + * @return void + */ + public function unsetElementToSort($elementName) + { + unset($this->elementsToSort[$elementName]); + } + + /** + * Get element to sort by name + * + * @param string $elementName + * @param array $default + * @return array + */ + public function getElementToSort($elementName, array $default = []) + { + return isset($this->elementsToSort[$elementName]) ? $this->elementsToSort[$elementName] : $default; + } + + /** + * Get elements to sort + * + * @return array + */ + public function getListToSort() + { + return $this->elementsToSort; + } + /** * Get elements to move * diff --git a/lib/internal/Magento/Framework/View/Layout/ScheduledStructure/Helper.php b/lib/internal/Magento/Framework/View/Layout/ScheduledStructure/Helper.php index 21a1fe765ca6aede50233e8674a3c7524999feae..aaa2e5fe1ecdd33140ff323f20a8906d6c78040b 100644 --- a/lib/internal/Magento/Framework/View/Layout/ScheduledStructure/Helper.php +++ b/lib/internal/Magento/Framework/View/Layout/ScheduledStructure/Helper.php @@ -203,13 +203,10 @@ class Helper /** * Some elements provide info "after" or "before" which sibling they are supposed to go - * Make sure to populate these siblings as well and order them correctly + * Add element into list of sorting */ if ($siblingName) { - if ($scheduledStructure->hasStructureElement($siblingName)) { - $this->scheduleElement($scheduledStructure, $structure, $siblingName); - } - $structure->reorderChildElement($parentName, $name, $siblingName, $isAfter); + $scheduledStructure->setElementToSortList($parentName, $name, $siblingName, $isAfter); } } diff --git a/lib/internal/Magento/Framework/View/Layout/etc/layout_generic.xsd b/lib/internal/Magento/Framework/View/Layout/etc/layout_generic.xsd index a584c5403d9af780b8f791a060d962798be86195..b6ea0390d953df89321b78215de0828368bdf24d 100755 --- a/lib/internal/Magento/Framework/View/Layout/etc/layout_generic.xsd +++ b/lib/internal/Magento/Framework/View/Layout/etc/layout_generic.xsd @@ -16,6 +16,7 @@ <xs:element ref="referenceBlock" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="update" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="move" minOccurs="0" maxOccurs="unbounded"/> + <xs:element ref="uiComponent" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> diff --git a/lib/internal/Magento/Framework/View/Page/Title.php b/lib/internal/Magento/Framework/View/Page/Title.php index 05540c3607b3f04ba3dd295cbb1da1b7d364e5ae..f420bd34ded141a27f397f9a5aa53791a3ab329e 100644 --- a/lib/internal/Magento/Framework/View/Page/Title.php +++ b/lib/internal/Magento/Framework/View/Page/Title.php @@ -77,11 +77,26 @@ class Title } /** + * Same as getShort(), but return title without prefix and suffix + * @return mixed + */ + public function getShortHeading() + { + $title = $this->build(false); + return reset($title); + } + + /** + * @param bool $withConfigValues * @return array */ - protected function build() + protected function build($withConfigValues = true) { - return array_merge($this->prependedValues, [$this->addConfigValues($this->textValue)], $this->appendedValues); + return array_merge( + $this->prependedValues, + [$withConfigValues ? $this->addConfigValues($this->textValue) : $this->textValue], + $this->appendedValues + ); } /** diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Element/UiComponent/ProcessorTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Element/UiComponent/ProcessorTest.php new file mode 100644 index 0000000000000000000000000000000000000000..c10d6fe61c3aa76af239c1afb77f87f12c9d3bff --- /dev/null +++ b/lib/internal/Magento/Framework/View/Test/Unit/Element/UiComponent/ProcessorTest.php @@ -0,0 +1,78 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +/** + * Test for view Messages model + */ +namespace Magento\Framework\View\Test\Unit\Element\UiComponent; + +use Magento\Framework\View\Element\UiComponent\Processor; +use Magento\Framework\View\Element\UiComponentInterface; +use Magento\Framework\View\Element\UiComponent\ObserverInterface; + +class ProcessorTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var UiComponentInterface|\PHPUnit_Framework_MockObject_MockObject + */ + protected $component; + + /** + * @var ObserverInterface|\PHPUnit_Framework_MockObject_MockObject + */ + protected $observer; + + /** + * @var Processor + */ + protected $processor; + + protected function setUp() + { + $this->component = $this->getMockBuilder('Magento\Framework\View\Element\UiComponentInterface') + ->getMockForAbstractClass(); + $this->observer = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\ObserverInterface') + ->getMockForAbstractClass(); + $this->processor = new Processor(); + } + + public function testRegisterGetComponents() + { + $this->assertCount(0, $this->processor->getComponents()); + $this->processor->register($this->component); + $this->assertCount(1, $this->processor->getComponents()); + } + + public function testAttachAndNotify() + { + $type = 'test_type'; + $this->component->expects($this->any()) + ->method('getComponentName') + ->willReturn($type); + $this->observer->expects($this->any()) + ->method('update') + ->with($this->component); + /** @var UiComponentInterface $component2 */ + $component2 = $this->getMockBuilder('Magento\Framework\View\Element\UiComponentInterface') + ->getMockForAbstractClass(); + $component2->expects($this->any()) + ->method('getComponentName') + ->willReturn('other_type'); + + $this->processor->register($this->component); + $this->processor->register($component2); + $this->processor->attach($type, $this->observer); + $this->processor->notify($type); + } + + public function testDetach() + { + $this->processor->detach('unexists_type', $this->observer); + $this->processor->attach('some_type', $this->observer); + $this->processor->notify('unexists_type'); + $this->processor->detach('some_type', $this->observer); + } +} diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Layout/GeneratorPoolTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Layout/GeneratorPoolTest.php index 154ff37e00f0a408aa602dd7cfcac1eaf42c07d6..4ba1c06008b6a14d2e271baa7f2e19ced0b9f21e 100644 --- a/lib/internal/Magento/Framework/View/Test/Unit/Layout/GeneratorPoolTest.php +++ b/lib/internal/Magento/Framework/View/Test/Unit/Layout/GeneratorPoolTest.php @@ -11,21 +11,22 @@ namespace Magento\Framework\View\Test\Unit\Layout; use \Magento\Framework\View\Layout\GeneratorPool; use \Magento\Framework\View\Layout\ScheduledStructure; +use \Magento\Framework\View\Layout\Data\Structure as DataStructure; class GeneratorPoolTest extends \PHPUnit_Framework_TestCase { /** - * @var \PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\View\Layout\ScheduledStructure\Helper|\PHPUnit_Framework_MockObject_MockObject */ protected $helperMock; /** - * @var \PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\View\Layout\Reader\Context|\PHPUnit_Framework_MockObject_MockObject */ protected $readerContextMock; /** - * @var \PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\View\Layout\Generator\Context|\PHPUnit_Framework_MockObject_MockObject */ protected $generatorContextMock; @@ -35,7 +36,7 @@ class GeneratorPoolTest extends \PHPUnit_Framework_TestCase protected $scheduledStructure; /** - * @var \PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\View\Layout\Data\Structure|\PHPUnit_Framework_MockObject_MockObject */ protected $structureMock; @@ -57,7 +58,7 @@ class GeneratorPoolTest extends \PHPUnit_Framework_TestCase $this->readerContextMock->expects($this->any())->method('getScheduledStructure') ->willReturn($this->scheduledStructure); - // Data\Structure + // DataStructure $this->generatorContextMock = $this->getMockBuilder('Magento\Framework\View\Layout\Generator\Context') ->disableOriginalConstructor() ->getMock(); @@ -72,8 +73,8 @@ class GeneratorPoolTest extends \PHPUnit_Framework_TestCase ->disableOriginalConstructor() ->getMock(); - $helper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this); - $this->model = $helper->getObject( + $helperObjectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this); + $this->model = $helperObjectManager->getObject( 'Magento\Framework\View\Layout\GeneratorPool', [ 'helper' => $this->helperMock, @@ -109,14 +110,19 @@ class GeneratorPoolTest extends \PHPUnit_Framework_TestCase $this->scheduledStructure->setStructureElement($structureElement, []); } - $moveMap = []; + $reorderMap = []; + foreach ($schedule['sort'] as $elementName => $sort) { + list($parentName, $sibling, $isAfter) = $sort; + $this->scheduledStructure->setElementToSortList($parentName, $elementName, $sibling, $isAfter); + $reorderMap[] = [$parentName, $elementName, $sibling, $isAfter]; + } foreach ($schedule['move'] as $elementName => $move) { $this->scheduledStructure->setElementToMove($elementName, $move); list($destination, $sibling, $isAfter) = $move; - $moveMap[] = [$destination, $elementName, $sibling, $isAfter]; + $reorderMap[] = [$destination, $elementName, $sibling, $isAfter]; } $invocation = $this->structureMock->expects($this->any())->method('reorderChildElement'); - call_user_func_array([$invocation, 'withConsecutive'], $moveMap); + call_user_func_array([$invocation, 'withConsecutive'], $reorderMap); foreach ($schedule['remove'] as $remove) { $this->scheduledStructure->setElementToRemoveList($remove); @@ -125,8 +131,10 @@ class GeneratorPoolTest extends \PHPUnit_Framework_TestCase $this->helperMock->expects($this->atLeastOnce())->method('scheduleElement') ->with($this->scheduledStructure, $this->structureMock, $this->anything()) ->willReturnCallback(function ($scheduledStructure, $structure, $elementName) use ($schedule) { - /** @var $scheduledStructure ScheduledStructure */ - /** @var $structure Data\Structure */ + /** + * @var $scheduledStructure ScheduledStructure + * @var $structure DataStructure + */ $this->assertContains($elementName, $schedule['structure']); $scheduledStructure->unsetStructureElement($elementName); $scheduledStructure->setElement($elementName, []); @@ -152,14 +160,18 @@ class GeneratorPoolTest extends \PHPUnit_Framework_TestCase 'second.element', 'third.element', 'remove.element', + 'sort.element', ], 'move' => [ 'third.element' => ['second.element', 'sibling', false, 'alias'], ], 'remove' => ['remove.element'], + 'sort' => [ + 'sort.element' => ['second.element', 'sibling', false, 'alias'], + ], ], 'expectedScheduledElements' => [ - 'first.element' => [], 'second.element' => [], 'third.element' => [], + 'first.element' => [], 'second.element' => [], 'third.element' => [], 'sort.element' => [] ], ], ]; diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Layout/Reader/BlockTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Layout/Reader/BlockTest.php index b1fe7bd1ddb622ad0c06eb46f0fe720160a15771..9070db3fd1241f36f00afa66b58420a7c2533b5f 100755 --- a/lib/internal/Magento/Framework/View/Test/Unit/Layout/Reader/BlockTest.php +++ b/lib/internal/Magento/Framework/View/Test/Unit/Layout/Reader/BlockTest.php @@ -11,11 +11,6 @@ namespace Magento\Framework\View\Test\Unit\Layout\Reader; use Magento\Framework\View\Layout\Reader\Block; -/** - * Class BlockTest - * - * @covers Block - */ class BlockTest extends \PHPUnit_Framework_TestCase { /** diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Layout/ScheduledStructure/HelperTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Layout/ScheduledStructure/HelperTest.php index a6198409487a37df9183ce84f46b27340c10e747..4aeff78304d3191d5e6e1ac9569a5955d2a87785 100644 --- a/lib/internal/Magento/Framework/View/Test/Unit/Layout/ScheduledStructure/HelperTest.php +++ b/lib/internal/Magento/Framework/View/Test/Unit/Layout/ScheduledStructure/HelperTest.php @@ -17,7 +17,7 @@ class HelperTest extends \PHPUnit_Framework_TestCase /** * @var \Magento\Framework\View\Layout\ScheduledStructure|\PHPUnit_Framework_MockObject_MockObject */ - protected $scheduledStructure; + protected $scheduledStructureMock; /** * @var \Magento\Framework\View\Layout\Data\Structure|\PHPUnit_Framework_MockObject_MockObject @@ -25,13 +25,16 @@ class HelperTest extends \PHPUnit_Framework_TestCase protected $dataStructure; /** - * @var Helper + * @var \Magento\Framework\View\Layout\ScheduledStructure\Helper */ protected $helper; + /** + * @return void + */ public function setUp() { - $this->scheduledStructure = $this->getMockBuilder('Magento\Framework\View\Layout\ScheduledStructure') + $this->scheduledStructureMock = $this->getMockBuilder('Magento\Framework\View\Layout\ScheduledStructure') ->disableOriginalConstructor() ->getMock(); @@ -48,6 +51,7 @@ class HelperTest extends \PHPUnit_Framework_TestCase * @param string $actualNodeName * @param int $unsetPathElementCount * @param int $unsetStructureElementCount + * @return void * * @dataProvider scheduleStructureDataProvider */ @@ -64,25 +68,26 @@ class HelperTest extends \PHPUnit_Framework_TestCase $testPath = 'test_path'; $potentialChild = 'potential_child'; - $this->scheduledStructure->expects($this->once())->method('hasPath') + $this->scheduledStructureMock->expects($this->once())->method('hasPath') ->with($parentNodeName) ->will($this->returnValue(true)); - $this->scheduledStructure->expects($this->any())->method('hasStructureElement') + $this->scheduledStructureMock->expects($this->any())->method('hasStructureElement') ->with($actualNodeName) ->will($this->returnValue(true)); - $this->scheduledStructure->expects($this->once())->method('setPathElement') + $this->scheduledStructureMock->expects($this->once())->method('setPathElement') ->with($actualNodeName, $testPath . '/' . $actualNodeName) ->will($this->returnValue(true)); - $this->scheduledStructure->expects($this->once())->method('setStructureElement') + $this->scheduledStructureMock->expects($this->once())->method('setStructureElement') ->with($actualNodeName, [$block, $currentNodeAs, $parentNodeName, $after, true]); - $this->scheduledStructure->expects($this->once())->method('getPath') + $this->scheduledStructureMock->expects($this->once())->method('getPath') ->with($parentNodeName) ->will($this->returnValue('test_path')); - $this->scheduledStructure->expects($this->once())->method('getPaths') + $this->scheduledStructureMock->expects($this->once())->method('getPaths') ->will($this->returnValue([$potentialChild => $testPath . '/' . $currentNodeName . '/'])); - $this->scheduledStructure->expects($this->exactly($unsetPathElementCount))->method('unsetPathElement') + $this->scheduledStructureMock->expects($this->exactly($unsetPathElementCount))->method('unsetPathElement') ->with($potentialChild); - $this->scheduledStructure->expects($this->exactly($unsetStructureElementCount))->method('unsetStructureElement') + $this->scheduledStructureMock->expects($this->exactly($unsetStructureElementCount)) + ->method('unsetStructureElement') ->with($potentialChild); $currentNode = new \Magento\Framework\View\Layout\Element( @@ -90,7 +95,7 @@ class HelperTest extends \PHPUnit_Framework_TestCase ); $parentNode = new \Magento\Framework\View\Layout\Element('<' . $block . ' name="' . $parentNodeName . '"/>'); - $result = $this->helper->scheduleStructure($this->scheduledStructure, $currentNode, $parentNode); + $result = $this->helper->scheduleStructure($this->scheduledStructureMock, $currentNode, $parentNode); $this->assertEquals($actualNodeName, $result); } @@ -105,53 +110,57 @@ class HelperTest extends \PHPUnit_Framework_TestCase ]; } + /** + * @return void + */ public function testScheduleNonExistentElement() { $key = 'key'; - $this->scheduledStructure->expects($this->once())->method('getStructureElement')->with($key) + $this->scheduledStructureMock->expects($this->once())->method('getStructureElement')->with($key) ->willReturn([]); - $this->scheduledStructure->expects($this->once())->method('unsetPathElement')->with($key); - $this->scheduledStructure->expects($this->once())->method('unsetStructureElement')->with($key); + $this->scheduledStructureMock->expects($this->once())->method('unsetPathElement')->with($key); + $this->scheduledStructureMock->expects($this->once())->method('unsetStructureElement')->with($key); - $this->helper->scheduleElement($this->scheduledStructure, $this->dataStructure, $key); + $this->helper->scheduleElement($this->scheduledStructureMock, $this->dataStructure, $key); } /** * @param bool $hasParent * @param int $setAsChild * @param int $toRemoveList + * @param string $siblingName + * @param bool $isAfter + * @param int $toSortList + * @return void * * @dataProvider scheduleElementDataProvider */ - public function testScheduleElement($hasParent, $setAsChild, $toRemoveList) + public function testScheduleElement($hasParent, $setAsChild, $toRemoveList, $siblingName, $isAfter, $toSortList) { $key = 'key'; $parentName = 'parent'; - $siblingName = 'sibling'; $alias = 'alias'; $block = 'block'; $data = ['data']; - $this->scheduledStructure->expects($this->any()) + $this->scheduledStructureMock->expects($this->any()) ->method('getStructureElement') - ->willReturnMap( + ->willReturnMap([ [ + $key, + null, [ - $key, - null, - [ - Layout\ScheduledStructure\Helper::SCHEDULED_STRUCTURE_INDEX_TYPE => $block, - Layout\ScheduledStructure\Helper::SCHEDULED_STRUCTURE_INDEX_ALIAS => $alias, - Layout\ScheduledStructure\Helper::SCHEDULED_STRUCTURE_INDEX_PARENT_NAME => $parentName, - Layout\ScheduledStructure\Helper::SCHEDULED_STRUCTURE_INDEX_SIBLING_NAME => $siblingName, - Layout\ScheduledStructure\Helper::SCHEDULED_STRUCTURE_INDEX_IS_AFTER => true, - ], + Layout\ScheduledStructure\Helper::SCHEDULED_STRUCTURE_INDEX_TYPE => $block, + Layout\ScheduledStructure\Helper::SCHEDULED_STRUCTURE_INDEX_ALIAS => $alias, + Layout\ScheduledStructure\Helper::SCHEDULED_STRUCTURE_INDEX_PARENT_NAME => $parentName, + Layout\ScheduledStructure\Helper::SCHEDULED_STRUCTURE_INDEX_SIBLING_NAME => $siblingName, + Layout\ScheduledStructure\Helper::SCHEDULED_STRUCTURE_INDEX_IS_AFTER => $isAfter, ], - [$parentName, null, []], - ] - ); - $this->scheduledStructure->expects($this->any()) + ], + [$parentName, null, []], + ]); + $this->scheduledStructureMock->expects($this->any()) ->method('getStructureElementData') ->willReturnMap( [ @@ -159,8 +168,8 @@ class HelperTest extends \PHPUnit_Framework_TestCase [$parentName, null, $data], ] ); - $this->scheduledStructure->expects($this->any())->method('hasStructureElement')->willReturn(true); - $this->scheduledStructure->expects($this->once())->method('setElement')->with($key, [$block, $data]); + $this->scheduledStructureMock->expects($this->any())->method('hasStructureElement')->willReturn(true); + $this->scheduledStructureMock->expects($this->once())->method('setElement')->with($key, [$block, $data]); $this->dataStructure->expects($this->once())->method('createElement')->with($key, ['type' => $block]); $this->dataStructure->expects($this->once())->method('hasElement')->with($parentName)->willReturn($hasParent); @@ -169,11 +178,14 @@ class HelperTest extends \PHPUnit_Framework_TestCase ->with($key, $parentName, $alias) ->willReturn(true); - $this->scheduledStructure->expects($this->exactly($toRemoveList)) + $this->scheduledStructureMock->expects($this->exactly($toRemoveList)) ->method('setElementToBrokenParentList') ->with($key); + $this->scheduledStructureMock->expects($this->exactly($toSortList)) + ->method('setElementToSortList') + ->with($parentName, $key, $siblingName, $isAfter); - $this->helper->scheduleElement($this->scheduledStructure, $this->dataStructure, $key); + $this->helper->scheduleElement($this->scheduledStructureMock, $this->dataStructure, $key); } /** @@ -182,8 +194,22 @@ class HelperTest extends \PHPUnit_Framework_TestCase public function scheduleElementDataProvider() { return [ - ['hasParent' => true, 'setAsChild' => 1, 'toRemoveList' => 0], - ['hasParent' => false, 'setAsChild' => 0, 'toRemoveList' => 1], + [ + 'hasParent' => true, + 'setAsChild' => 1, + 'toRemoveList' => 0, + 'siblingName' => 'sibling', + 'isAfter' => false, + 'toSortList' => 1, + ], + [ + 'hasParent' => false, + 'setAsChild' => 0, + 'toRemoveList' => 1, + 'siblingName' => null, + 'isAfter' => false, + 'toSortList' => 0, + ] ]; } } diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Layout/ScheduledStructureTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Layout/ScheduledStructureTest.php index 98d8d6a8b19932c99b6ed88c4ad1ab34bce0a96f..5f9c1d1094816f2966378f0ea5860af52ca4f17e 100644 --- a/lib/internal/Magento/Framework/View/Test/Unit/Layout/ScheduledStructureTest.php +++ b/lib/internal/Magento/Framework/View/Test/Unit/Layout/ScheduledStructureTest.php @@ -5,13 +5,15 @@ */ namespace Magento\Framework\View\Test\Unit\Layout; +use \Magento\Framework\View\Layout\ScheduledStructure; + /** * Test class for \Magento\Framework\View\Layout\ScheduledStructure */ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase { /** - * @var \Magento\Framework\View\Layout\ScheduledStructure + * @var ScheduledStructure */ protected $model; @@ -20,6 +22,9 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase */ protected $scheduledData = []; + /** + * @return void + */ protected function setUp() { $this->scheduledData = [ @@ -62,11 +67,16 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase 'path4' => 'path 4', ], ]; - $this->model = new \Magento\Framework\View\Layout\ScheduledStructure($this->scheduledData); + + $helperObjectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this); + $this->model = $helperObjectManager->getObject( + 'Magento\Framework\View\Layout\ScheduledStructure', + ['data' => $this->scheduledData] + ); } /** - * @covers \Magento\Framework\View\Layout\ScheduledStructure::getListToMove + * @return void */ public function testGetListToMove() { @@ -78,7 +88,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase } /** - * @covers \Magento\Framework\View\Layout\ScheduledStructure::getListToRemove + * @return void */ public function testGetListToRemove() { @@ -96,7 +106,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase } /** - * @covers \Magento\Framework\View\Layout\ScheduledStructure::getElements + * @return void */ public function testGetElements() { @@ -104,7 +114,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase } /** - * @covers \Magento\Framework\View\Layout\ScheduledStructure::getElement + * @return void */ public function testGetElement() { @@ -116,7 +126,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase } /** - * @covers \Magento\Framework\View\Layout\ScheduledStructure::isElementsEmpty + * @return void */ public function testIsElementsEmpty() { @@ -126,7 +136,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase } /** - * @covers \Magento\Framework\View\Layout\ScheduledStructure::setElement + * @return void */ public function testSetElement() { @@ -144,7 +154,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase } /** - * @covers \Magento\Framework\View\Layout\ScheduledStructure::hasElement + * @return void */ public function testHasElement() { @@ -153,7 +163,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase } /** - * @covers \Magento\Framework\View\Layout\ScheduledStructure::unsetElement + * @return void */ public function testUnsetElement() { @@ -163,7 +173,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase } /** - * @covers \Magento\Framework\View\Layout\ScheduledStructure::getElementToMove + * @return void */ public function testGetElementToMove() { @@ -175,6 +185,9 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase $this->assertEquals($default, $this->model->getElementToMove('not_existing_element', $default)); } + /** + * @return void + */ public function getIfconfigElement() { $this->assertEquals( @@ -186,7 +199,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase } /** - * @covers \Magento\Framework\View\Layout\ScheduledStructure::setElementToMove + * @return void */ public function testSetElementToMove() { @@ -204,7 +217,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase } /** - * @covers \Magento\Framework\View\Layout\ScheduledStructure::unsetElementFromListToRemove + * @return void */ public function testUnsetElementFromListToRemove() { @@ -214,7 +227,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase } /** - * @covers \Magento\Framework\View\Layout\ScheduledStructure::setElementToRemoveList + * @return void */ public function testSetElementToRemoveList() { @@ -223,6 +236,9 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase $this->assertContains('element1', $this->model->getListToRemove()); } + /** + * @return void + */ public function testUnsetElementFromIfconfigList() { $this->assertContains('element4', $this->model->getIfconfigList()); @@ -230,6 +246,9 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase $this->assertNotContains('element4', $this->model->getIfconfigList()); } + /** + * @return void + */ public function testSetElementToIfconfigList() { $this->assertNotContains('element5', $this->model->getIfconfigList()); @@ -238,7 +257,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase } /** - * @covers \Magento\Framework\View\Layout\ScheduledStructure::getStructure + * @return void */ public function testGetStructure() { @@ -246,7 +265,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase } /** - * @covers \Magento\Framework\View\Layout\ScheduledStructure::getStructureElement + * @return void */ public function testGetStructureElement() { @@ -258,7 +277,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase } /** - * @covers \Magento\Framework\View\Layout\ScheduledStructure::isStructureEmpty + * @return void */ public function testIsStructureEmpty() { @@ -268,7 +287,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase } /** - * @covers \Magento\Framework\View\Layout\ScheduledStructure::hasStructureElement + * @return void */ public function testHasStructureElement() { @@ -277,7 +296,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase } /** - * @covers \Magento\Framework\View\Layout\ScheduledStructure::setStructureElement + * @return void */ public function testSetStructureElement() { @@ -295,7 +314,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase } /** - * @covers \Magento\Framework\View\Layout\ScheduledStructure::unsetStructureElement + * @return void */ public function testUnsetStructureElement() { @@ -305,7 +324,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase } /** - * @covers \Magento\Framework\View\Layout\ScheduledStructure::getPaths + * @return void */ public function testGetPaths() { @@ -313,7 +332,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase } /** - * @covers \Magento\Framework\View\Layout\ScheduledStructure::getPath + * @return void */ public function testGetPath() { @@ -323,7 +342,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase } /** - * @covers \Magento\Framework\View\Layout\ScheduledStructure::hasPath + * @return void */ public function testHasPath() { @@ -332,7 +351,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase } /** - * @covers \Magento\Framework\View\Layout\ScheduledStructure::setPathElement + * @return void */ public function testSetPathElement() { @@ -350,7 +369,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase } /** - * @covers \Magento\Framework\View\Layout\ScheduledStructure::unsetPathElement + * @return void */ public function testUnsetPathElement() { @@ -360,7 +379,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase } /** - * @covers \Magento\Framework\View\Layout\ScheduledStructure::flushPaths + * @return void */ public function testFlushPaths() { @@ -370,7 +389,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase } /** - * @covers \Magento\Framework\View\Layout\ScheduledStructure::flushScheduledStructure + * @return void */ public function testFlushScheduledStructure() { @@ -386,8 +405,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase } /** - * covers \Magento\Framework\View\Layout\ScheduledStructure::setElementToBrokenParentList - * covers \Magento\Framework\View\Layout\ScheduledStructure::unsetElementFromBrokenParentList + * @return void */ public function testSetElementToBrokenParentList() { @@ -402,4 +420,76 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase $this->model->unsetElementFromBrokenParentList($element); $this->assertEquals($expectedToRemove, $this->model->getListToRemove()); } + + /** + * @return void + */ + public function testSetElementToSortList() + { + list($parentName, $name, $sibling, $isAfter, $element) = $this->getDataSort(); + $elementsList = [$name => $element]; + $this->assertArrayNotHasKey($name, $this->model->getListToSort()); + $this->model->setElementToSortList($parentName, $name, $sibling, $isAfter); + $this->assertEquals($elementsList, $this->model->getListToSort()); + } + + /** + * @return void + */ + public function testGetElementToSortEmpty() + { + $this->assertEmpty($this->model->getElementToSort('test')); + } + + /** + * @return void + */ + public function testGetElementToSort() + { + list($parentName, $name, $sibling, $isAfter, $element) = $this->getDataSort(); + $this->model->setElementToSortList($parentName, $name, $sibling, $isAfter); + $this->assertEquals($element, $this->model->getElementToSort($name)); + } + + /** + * @return void + */ + public function testUnsetElementToSort() + { + list($parentName, $name, $sibling, $isAfter) = $this->getDataSort(); + $this->model->setElementToSortList($parentName, $name, $sibling, $isAfter); + $this->assertArrayHasKey($name, $this->model->getListToSort()); + $this->model->unsetElementToSort($name); + $this->assertArrayNotHasKey($name, $this->model->getListToSort()); + } + + /** + * @return void + */ + public function testIsListToSortEmpty() + { + list($parentName, $name, $sibling, $isAfter) = $this->getDataSort(); + $this->assertTrue($this->model->isListToSortEmpty()); + $this->model->setElementToSortList($parentName, $name, $sibling, $isAfter); + $this->assertFalse($this->model->isListToSortEmpty()); + } + + /** + * @return array + */ + protected function getDataSort() + { + return [ + 'parent name', + 'element name', + 'sibling', + false, + [ + ScheduledStructure::ELEMENT_NAME => 'element name', + ScheduledStructure::ELEMENT_PARENT_NAME => 'parent name', + ScheduledStructure::ELEMENT_OFFSET_OR_SIBLING => 'sibling', + ScheduledStructure::ELEMENT_IS_AFTER => false + ] + ]; + } } diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Page/TitleTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Page/TitleTest.php index ee9e035252dce4fc6d1728b11e6272ca5433df49..cea9a66f29ece0507771d05fe12e14eda16550a0 100644 --- a/lib/internal/Magento/Framework/View/Test/Unit/Page/TitleTest.php +++ b/lib/internal/Magento/Framework/View/Test/Unit/Page/TitleTest.php @@ -23,6 +23,9 @@ class TitleTest extends \PHPUnit_Framework_TestCase */ protected $scopeConfigMock; + /** + * @return void + */ public function setUp() { $this->scopeConfigMock = $this->getMockBuilder('Magento\Framework\App\Config\ScopeConfigInterface') @@ -36,6 +39,9 @@ class TitleTest extends \PHPUnit_Framework_TestCase ); } + /** + * @return void + */ public function testSet() { $value = 'test_value'; @@ -43,6 +49,9 @@ class TitleTest extends \PHPUnit_Framework_TestCase $this->assertEquals($value, $this->title->get()); } + /** + * @return void + */ public function testUnset() { $value = 'test'; @@ -52,6 +61,9 @@ class TitleTest extends \PHPUnit_Framework_TestCase $this->assertEmpty($this->title->get()); } + /** + * @return void + */ public function testGet() { $value = 'test'; @@ -61,16 +73,19 @@ class TitleTest extends \PHPUnit_Framework_TestCase $this->scopeConfigMock->expects($this->any()) ->method('getValue') - ->will($this->returnValueMap( + ->willReturnMap( [ ['design/head/title_prefix', ScopeInterface::SCOPE_STORE, null, $prefix], ['design/head/title_suffix', ScopeInterface::SCOPE_STORE, null, $suffix], ] - )); + ); $this->title->set($value); $this->assertEquals($expected, $this->title->get()); } + /** + * @return void + */ public function testGetShort() { $value = 'some_title'; @@ -81,6 +96,46 @@ class TitleTest extends \PHPUnit_Framework_TestCase $this->assertEquals($value, $this->title->getShort()); } + /** + * @return void + */ + public function testGetShortWithSuffixAndPrefix() + { + $value = 'some_title'; + $prefix = 'prefix'; + $suffix = 'suffix'; + $expected = $prefix . ' ' . $value . ' ' . $suffix; + $this->title->set($value); + + $this->scopeConfigMock->expects($this->any()) + ->method('getValue') + ->willReturnMap( + [ + ['design/head/title_prefix', ScopeInterface::SCOPE_STORE, null, $prefix], + ['design/head/title_suffix', ScopeInterface::SCOPE_STORE, null, $suffix], + ] + ); + + $this->assertEquals($expected, $this->title->getShort()); + } + + /** + * @return void + */ + public function testGetShortHeading() + { + $value = 'some_title'; + $this->title->set($value); + + $this->scopeConfigMock->expects($this->never()) + ->method('getValue'); + + $this->assertEquals($value, $this->title->getShortHeading()); + } + + /** + * @return void + */ public function testGetDefault() { $defaultTitle = 'default title'; @@ -90,16 +145,19 @@ class TitleTest extends \PHPUnit_Framework_TestCase $this->scopeConfigMock->expects($this->any()) ->method('getValue') - ->will($this->returnValueMap( + ->willReturnMap( [ ['design/head/title_prefix', ScopeInterface::SCOPE_STORE, null, $prefix], ['design/head/title_suffix', ScopeInterface::SCOPE_STORE, null, $suffix], ['design/head/default_title', ScopeInterface::SCOPE_STORE, null, $defaultTitle], ] - )); + ); $this->assertEquals($expected, $this->title->getDefault()); } + /** + * @return void + */ public function testAppendPrepend() { $value = 'title'; diff --git a/lib/web/css/source/components/_modals.less b/lib/web/css/source/components/_modals.less index 005b0ff36c95e641b57f6757e2386bd30171d933..7bf5699bbfb405f06e3d38ef6bae693c6a97d94c 100644 --- a/lib/web/css/source/components/_modals.less +++ b/lib/web/css/source/components/_modals.less @@ -201,7 +201,7 @@ body { .lib-vendor-prefix-flex-shrink(0); } .modal-header { - padding-bottom: @modal-popup__padding; + padding-bottom: @modal-popup__padding / 2.5; padding-top: @modal-popup__padding; } .modal-footer { @@ -212,36 +212,6 @@ body { .modal-footer-actions { text-align: right; } - &.confirm { - .modal-inner-wrap { - left: 50%; - margin-left: -(@modal-popup-confirm__width/2); - width: @modal-popup-confirm__width; - } - .modal-footer { - text-align: right; - } - } - &._image-box { - .modal-inner-wrap { - margin: 5rem auto; - max-width: @modal-popup-image-box__max-width; - position: static; - } - .thumbnail-preview { - padding-bottom: @indent__l; - text-align: center; - .thumbnail-preview-image-block { - border: 1px solid @modal-popup-image-box__border-color; - margin: 0 auto @indent__base; - max-width: @modal-popup-image-box-preview__max-width; - padding: @indent__base; - } - .thumbnail-preview-image { - max-height: @modal-popup-image-box-preview-image__max-height; - } - } - } } // diff --git a/lib/web/css/source/lib/variables/_popups.less b/lib/web/css/source/lib/variables/_popups.less index bd574bd093003036538169eb3fbfd7a9afac9c5f..7769ae923a90c66bfbd64a9c2c2951e5089c2130 100644 --- a/lib/web/css/source/lib/variables/_popups.less +++ b/lib/web/css/source/lib/variables/_popups.less @@ -7,7 +7,7 @@ // Popup variables // _____________________________________________ -@popup__width: auto; +@popup__width: 100%; @popup__height: auto; @popup__padding: 22px; @popup__background: @color-white; diff --git a/lib/web/fotorama/fotorama.js b/lib/web/fotorama/fotorama.js index 9d74f253917694f7403270141293df73d07d0a27..445fe7d30c52ce4d576a1aafa426b75276bb9e0d 100644 --- a/lib/web/fotorama/fotorama.js +++ b/lib/web/fotorama/fotorama.js @@ -5,7 +5,7 @@ fotoramaVersion = '4.6.4'; (function (window, document, location, $, undefined) { "use strict"; var _fotoramaClass = 'fotorama', - _fullscreenClass = 'fullscreen', + _fullscreenClass = 'fotorama__fullscreen', wrapClass = _fotoramaClass + '__wrap', wrapCss2Class = wrapClass + '--css2', @@ -37,6 +37,9 @@ fotoramaVersion = '4.6.4'; navClass = _fotoramaClass + '__nav', navWrapClass = navClass + '-wrap', navShaftClass = navClass + '__shaft', + navShaftVerticalClass = navWrapClass + '--vertical', + navShaftListClass = navWrapClass + '--list', + navShafthorizontalClass = navWrapClass + '--horizontal', navDotsClass = navClass + '--dots', navThumbsClass = navClass + '--thumbs', navFrameClass = navClass + '__frame', @@ -49,6 +52,8 @@ fotoramaVersion = '4.6.4'; shadowsClass = shadowClass + 's', shadowsLeftClass = shadowsClass + '--left', shadowsRightClass = shadowsClass + '--right', + shadowsTopClass = shadowsClass + '--top', + shadowsBottomClass = shadowsClass + '--bottom', activeClass = _fotoramaClass + '__active', selectClass = _fotoramaClass + '__select', @@ -70,6 +75,8 @@ fotoramaVersion = '4.6.4'; imgFullClass = imgClass + '--full', thumbClass = _fotoramaClass + '__thumb', + thumbArrLeft = thumbClass + '__arr--left', + thumbArrRight = thumbClass + '__arr--right', thumbBorderClass = thumbClass + '-border', htmlClass = _fotoramaClass + '__html', @@ -81,7 +88,7 @@ fotoramaVersion = '4.6.4'; spinnerClass = _fotoramaClass + '__spinner', - horizontalImageClass = _fotoramaClass + '_horisontal_ratio', + horizontalImageClass = _fotoramaClass + '_horizontal_ratio', verticalImageClass = _fotoramaClass + '_vertical_ratio'; var JQUERY_VERSION = $ && $.fn.jquery.split('.'); @@ -90,7 +97,7 @@ fotoramaVersion = '4.6.4'; || (JQUERY_VERSION[0] == 1 && JQUERY_VERSION[1] < 8)) { throw 'Fotorama requires jQuery 1.8 or later and will not run without it.'; } -// My Underscore :-) + var _ = {}; /* Modernizr 2.8.3 (Custom Build) | MIT & BSD * Build: http://modernizr.com/download/#-csstransforms3d-csstransitions-touch-prefixed @@ -483,7 +490,7 @@ fotoramaVersion = '4.6.4'; , n for (n in prop) el[n] = prop[n] - return el; + return el } /** @@ -859,6 +866,7 @@ fotoramaVersion = '4.6.4'; } return encodedFuncName; } + var $WINDOW = $(window), $DOCUMENT = $(document), $HTML, @@ -899,6 +907,12 @@ fotoramaVersion = '4.6.4'; MAX_WIDTH = 1200, + /** + * Number of thumbnails in slide. Calculated only on setOptions and resize. + * @type {number} + */ + thumbsPerSlide = 1, + OPTIONS = { /** @@ -978,7 +992,7 @@ fotoramaVersion = '4.6.4'; arrows: true, click: true, - swipe: true, + swipe: false, trackpad: false, shuffle: false, @@ -987,7 +1001,23 @@ fotoramaVersion = '4.6.4'; shadows: true, spinner: null, - showcaption: true + showcaption: true, + + /** + * Set type of thumbnail navigation + */ + navdir: 'horizontal', + + /** + * Set configuration to show or hide arrows in thumb navigation + */ + navarrows: true, + + /** + * Set type of navigation. Can be thumbs or slides + */ + navtype: 'thumbs' + }, KEYBOARD_OPTIONS = { @@ -999,6 +1029,7 @@ fotoramaVersion = '4.6.4'; home: false, end: false }; + function noop() { } @@ -1006,24 +1037,39 @@ fotoramaVersion = '4.6.4'; return Math.max(isNaN(min) ? -Infinity : min, Math.min(isNaN(max) ? Infinity : max, value)); } - function readTransform(css) { - return css.match(/ma/) && css.match(/-?\d+(?!d)/g)[css.match(/3d/) ? 12 : 4]; + function readTransform(css, dir) { + return css.match(/ma/) && css.match(/-?\d+(?!d)/g)[css.match(/3d/) ? + (dir === 'vertical' ? 13 : 12) : (dir === 'vertical' ? 5 : 4) + ] } - function readPosition($el) { + function readPosition($el, dir) { if (CSS3) { - return +readTransform($el.css('transform')); + return +readTransform($el.css('transform'), dir); } else { - return +$el.css('left').replace('px', ''); + return +$el.css(dir === 'vertical' ? 'top' : 'left').replace('px', ''); } } - function getTranslate(pos/*, _001*/) { + function getTranslate(pos, direction) { var obj = {}; + if (CSS3) { - obj.transform = 'translate3d(' + (pos/* + (_001 ? 0.001 : 0)*/) + 'px,0,0)'; // 0.001 to remove Retina artifacts + + switch (direction) { + case 'vertical': + obj.transform = 'translate3d(0, ' + (pos) + 'px,0)'; + break; + case 'list': + break; + default : + obj.transform = 'translate3d(' + (pos) + 'px,0,0)'; + break; + } } else { - obj.left = pos; + direction === 'vertical' ? + obj.top = pos : + obj.left = pos; } return obj; } @@ -1104,7 +1150,8 @@ fotoramaVersion = '4.6.4'; } - function stop($el, left/*, _001*/) { + function stop($el, pos/*, _001*/) { + var dir = $el.navdir || 'horizontal'; if ($el.length) { var elData = $el.data(); if (CSS3) { @@ -1114,12 +1161,12 @@ fotoramaVersion = '4.6.4'; } else { $el.stop(); } - var lockedLeft = getNumber(left, function () { - return readPosition($el); + var lockedPos = getNumber(pos, function () { + return readPosition($el, dir); }); - $el.css(getTranslate(lockedLeft/*, _001*/));//.width(); // `.width()` for reflow - return lockedLeft; + $el.css(getTranslate(lockedPos, dir/*, _001*/));//.width(); // `.width()` for reflow + return lockedPos; } } @@ -1195,7 +1242,10 @@ fotoramaVersion = '4.6.4'; dataType: 'jsonp', success: function (json) { dataFrame.thumbsReady = true; - updateData(data, {img: json[0].thumbnail_large, thumb: json[0].thumbnail_small}, dataFrame.i, fotorama); + updateData(data, { + img: json[0].thumbnail_large, + thumb: json[0].thumbnail_small + }, dataFrame.i, fotorama); } }); } else { @@ -1354,8 +1404,11 @@ fotoramaVersion = '4.6.4'; } } - function findShadowEdge(pos, min, max) { - return min === max ? false : pos <= min ? 'left' : pos >= max ? 'right' : 'left right'; + function findShadowEdge(pos, min, max, dir) { + return min === max ? false : + dir === 'vertical' ? + (pos <= min ? 'top' : pos >= max ? 'bottom' : 'top bottom') : + (pos <= min ? 'left' : pos >= max ? 'right' : 'left right'); } function smartClick($el, fn, _options) { @@ -1378,7 +1431,6 @@ fotoramaVersion = '4.6.4'; onMove: _options.onMove || noop, onTouchEnd: _options.onTouchEnd || noop, onEnd: function (result) { - ////console.log('smartClick → result.moved', result.moved); if (result.moved) return; fn.call(this, startEvent); } @@ -1468,6 +1520,56 @@ fotoramaVersion = '4.6.4'; el.addEventListener ? el.addEventListener(e, fn, !!bool) : el.attachEvent('on' + e, fn); } + /** + * + * @param position guess position for navShaft + * @param restriction object contains min and max values for position + * @returns {*} filtered value of position + */ + function validateRestrictions(position, restriction) { + if (position > restriction.max) { + position = restriction.max; + } else { + if (position < restriction.min) { + position = restriction.min; + } + } + return position; + } + + function validateSlidePos(opt, navShaftTouchTail, guessIndex, offsetNav, $guessNavFrame, $navWrap, dir) { + var position, + size, + wrapSize; + if (dir === 'horizontal') { + size = opt.thumbwidth; + wrapSize = $navWrap.width(); + } else { + size = opt.thumbheight; + wrapSize = $navWrap.height(); + } + if ( (size + opt.margin) * (guessIndex + 1) >= (wrapSize - offsetNav) ) { + if (dir === 'horizontal') { + position = -$guessNavFrame.position().left; + } else { + position = -$guessNavFrame.position().top; + } + } else { + if ((size + opt.margin) * (guessIndex) <= Math.abs(offsetNav)) { + if (dir === 'horizontal') { + position = -$guessNavFrame.position().left + wrapSize - (size + opt.margin); + } else { + position = -$guessNavFrame.position().top + wrapSize - (size + opt.margin); + } + } else { + position = offsetNav; + } + } + position = validateRestrictions(position, navShaftTouchTail); + + return position || 0; + } + function elIsDisabled(el) { return !!el.getAttribute('disabled'); } @@ -1562,6 +1664,7 @@ fotoramaVersion = '4.6.4'; }; }(UTIL || {}, jQuery)); + function slide($el, options) { var elData = $el.data(), elPos = Math.round(options.pos), @@ -1574,27 +1677,18 @@ fotoramaVersion = '4.6.4'; if (typeof options.overPos !== 'undefined' && options.overPos !== options.pos) { elPos = options.overPos; - onEndFn = function () { - slide($el, $.extend({}, options, { - overPos: options.pos, - time: Math.max(TRANSITION_DURATION, options.time / 2) - })); - }; } - ////////console.time('var translate = $.extend'); - var translate = $.extend(getTranslate(elPos/*, options._001*/), options.width && {width: options.width}); - ////////console.timeEnd('var translate = $.extend'); + var translate = $.extend(getTranslate(elPos, options.direction), options.width && {width: options.width}, options.height && {height: options.height}); if (elData && elData.sliding) { elData.sliding = true; } if (CSS3) { $el.css($.extend(getDuration(options.time), translate)); + if (options.time > 10) { - ////////console.time('afterTransition'); afterTransition($el, 'transform', onEndFn, options.time); - ////////console.timeEnd('afterTransition'); } else { onEndFn(); } @@ -1643,10 +1737,12 @@ fotoramaVersion = '4.6.4'; (_$el1 && crossfadeFLAG) || _$el2 || onEndFn(); } + var lastEvent, moveEventType, preventEvent, - preventEventTimeout; + preventEventTimeout, + dragDomEl; function extendEvent(e) { var touch = (e.touches || [])[0] || e; @@ -1720,7 +1816,6 @@ fotoramaVersion = '4.6.4'; stopEvent(e); } } else { - ////console.log('onMove e.preventDefault'); stopEvent(e); (options.onMove || noop).call(el, e, {touch: touchFLAG}); } @@ -1797,11 +1892,12 @@ fotoramaVersion = '4.6.4'; .on('mousemove', onMove) .on('mouseup', onEnd); } - - $el.on('click', 'a', function (e) { - if (!Modernizr.touch) { - e.preventDefault(); - } + if (Modernizr.touch) { + dragDomEl = 'a'; + } else { + dragDomEl = 'div'; + } + $el.on('click', dragDomEl, function (e) { tail.checked && stopEvent(e); }); @@ -1823,6 +1919,7 @@ fotoramaVersion = '4.6.4'; min, max, snap, + dir, slowFLAG, controlFLAG, moved, @@ -1830,7 +1927,7 @@ fotoramaVersion = '4.6.4'; function startTracking(e, noStop) { tracked = true; - startCoo = coo = e._x; + startCoo = coo = (dir === 'vertical') ? e._y : e._x; startTime = e._now; moveTrack = [ @@ -1845,7 +1942,9 @@ fotoramaVersion = '4.6.4'; function onStart(e, result) { min = tail.min; max = tail.max; - snap = tail.snap; + snap = tail.snap, + dir = tail.direction || 'horizontal', + $el.navdir = dir; slowFLAG = e.altKey; tracked = moved = false; @@ -1862,14 +1961,13 @@ fotoramaVersion = '4.6.4'; if (!tracked) { startTracking(e); } - - coo = e._x; + coo = (dir === 'vertical') ? e._y : e._x; moveTrack.push([e._now, coo]); moveElPos = startElPos - (startCoo - coo); - edge = findShadowEdge(moveElPos, min, max); + edge = findShadowEdge(moveElPos, min, max, dir); if (moveElPos <= min) { moveElPos = edgeResistance(moveElPos, min); @@ -1878,7 +1976,7 @@ fotoramaVersion = '4.6.4'; } if (!tail.noMove) { - $el.css(getTranslate(moveElPos/*, options._001*/)); + $el.css(getTranslate(moveElPos, dir)); if (!moved) { moved = true; // only for mouse @@ -1891,15 +1989,12 @@ fotoramaVersion = '4.6.4'; } function onEnd(result) { - //////console.time('moveontouch.js onEnd'); if (tail.noSwipe && result.moved) return; if (!tracked) { startTracking(result.startEvent, true); } - ////console.log('onEnd'); - result.touch || MS_POINTER || $el.removeClass(grabbingClass); endTime = $.now(); @@ -1970,7 +2065,8 @@ fotoramaVersion = '4.6.4'; pos: moveElPos, newPos: newPos, overPos: overPos, - time: time + time: time, + dir: dir })); } @@ -1982,6 +2078,7 @@ fotoramaVersion = '4.6.4'; return tail; } + function wheel($el, options) { var el = $el[0], lockFLAG, @@ -2026,6 +2123,7 @@ fotoramaVersion = '4.6.4'; return tail; } + jQuery.Fotorama = function ($fotorama, opts) { $HTML = $('html'); $BODY = $('body'); @@ -2062,6 +2160,8 @@ fotoramaVersion = '4.6.4'; navShaftData = $navShaft.data(), $thumbBorder = $fotorama.find(cls(thumbBorderClass)), + $thumbArrLeft = $fotorama.find(cls(thumbArrLeft)), + $thumbArrRight = $fotorama.find(cls(thumbArrRight)), $fullscreenIcon = $fotorama.find(cls(fullscreenIconClass)), fullscreenIcon = $fullscreenIcon[0], @@ -2129,7 +2229,11 @@ fotoramaVersion = '4.6.4'; stageLeft = 0, fadeStack = []; - $wrap[STAGE_FRAME_KEY] = $('<a class="' + stageFrameClass + '" target="_blank"></a>'); + if (Modernizr.touch) { + $wrap[STAGE_FRAME_KEY] = $('<a class="' + stageFrameClass + '" target="_blank"></a>'); + } else { + $wrap[STAGE_FRAME_KEY] = $('<div class="' + stageFrameClass + '"></div>'); + } $wrap[NAV_THUMB_FRAME_KEY] = $($.Fotorama.jst.thumb()); @@ -2171,11 +2275,34 @@ fotoramaVersion = '4.6.4'; return o_keyboard[key] || that.fullScreen; } + function setStagePosition() { + if ($stage !== undefined) { + + if (opts.navdir == 'vertical') { + var padding = opts.thumbwidth + opts.thumbmargin; + + $stage.css('left', padding); + $arrNext.css('right', padding); + $fullscreenIcon.css('right', padding); + $wrap.css('width', $wrap.css('width') + padding); + $stageShaft.css('max-width', $wrap.width() - padding); + } else { + $stage.css('left', ''); + $arrNext.css('right', ''); + $fullscreenIcon.css('right', ''); + $wrap.css('width', $wrap.css('width') + padding); + $stageShaft.css('max-width', ''); + } + } + } + function bindGlobalEvents(FLAG) { var keydownCommon = 'keydown.' + _fotoramaClass, localStamp = _fotoramaClass + stamp, keydownLocal = 'keydown.' + localStamp, - resizeLocal = 'resize.' + localStamp + ' ' + 'orientationchange.' + localStamp; + keyupLocal = 'keyup.' + localStamp, + resizeLocal = 'resize.' + localStamp + ' ' + 'orientationchange.' + localStamp, + showParams; if (FLAG) { $DOCUMENT @@ -2191,20 +2318,37 @@ fotoramaVersion = '4.6.4'; catched = true; that.cancelFullScreen(); } else if ((e.shiftKey && e.keyCode === 32 && allowKey('space')) || (e.keyCode === 37 && allowKey('left')) || (e.keyCode === 38 && allowKey('up'))) { + that.longPress.progress(); index = '<'; } else if ((e.keyCode === 32 && allowKey('space')) || (e.keyCode === 39 && allowKey('right')) || (e.keyCode === 40 && allowKey('down'))) { + that.longPress.progress(); index = '>'; } else if (e.keyCode === 36 && allowKey('home')) { + that.longPress.progress(); index = '<<'; } else if (e.keyCode === 35 && allowKey('end')) { + that.longPress.progress(); index = '>>'; } } (catched || index) && stopEvent(e); - index && that.show({index: index, slow: e.altKey, user: true}); + showParams = {index: index, slow: e.altKey, user: true}; + index && (that.longPress.inProgress ? + that.showWhileLongPress(showParams) : + that.show(showParams)); }); + if (FLAG) { + $DOCUMENT + .on(keyupLocal, function (e) { + if (that.longPress.inProgress) { + that.showEndLongPress({user:true}); + } + that.longPress.reset(); + }); + } + if (!that.index) { $DOCUMENT .off(keydownCommon) @@ -2250,7 +2394,7 @@ fotoramaVersion = '4.6.4'; data = that.data = data || clone(opts.data) || getDataFromHtml($fotorama); size = that.size = data.length; - !ready.ok && opts.shuffle && shuffle(data); + ready.ok && opts.shuffle && shuffle(data); checkForVideo(); @@ -2273,11 +2417,31 @@ fotoramaVersion = '4.6.4'; opts.autoplay = Math.max(+interval || AUTOPLAY_INTERVAL, o_transitionDuration * 1.5); } + function updateThumbArrow(opt) { + if (opt.navarrows && opt.nav === 'thumbs') { + $thumbArrLeft.show(); + $thumbArrRight.show(); + } else { + $thumbArrLeft.hide(); + $thumbArrRight.hide(); + } + + } + + function getThumbsInSlide($el, opts) { + return Math.floor($wrap.width() / (opts.thumbwidth + opts.thumbmargin)); + } + /** * Options on the fly * */ function setOptions() { + if (!opts.nav || opts.nav === 'dots') { + opts.navdir = 'horizontal' + } + that.options = opts = optionsToLowerCase(opts); + thumbsPerSlide = getThumbsInSlide($wrap, opts); o_fade = (opts.transition === 'crossfade' || opts.transition === 'dissolve'); @@ -2288,7 +2452,7 @@ fotoramaVersion = '4.6.4'; o_rtl = opts.direction === 'rtl'; o_keyboard = $.extend({}, opts.keyboard && KEYBOARD_OPTIONS, opts.keyboard); - + updateThumbArrow(opts); var classes = {add: [], remove: []}; function addOrRemoveClass(FLAG, value) { @@ -2300,7 +2464,7 @@ fotoramaVersion = '4.6.4'; o_navTop = opts.navposition === 'top'; classes.remove.push(selectClass); - $arrs.toggle(!!opts.arrows); + $arrs.toggle(opts.arrows); } else { o_nav = false; $arrs.hide(); @@ -2311,7 +2475,7 @@ fotoramaVersion = '4.6.4'; arrsUpdate(); stageWheelUpdate(); - + thumbArrUpdate(); if (opts.autoplay) setAutoplayInterval(opts.autoplay); o_thumbSide = numberFromMeasure(opts.thumbwidth) || THUMB_SIZE; @@ -2332,7 +2496,6 @@ fotoramaVersion = '4.6.4'; frameDraw(size, 'navThumb'); $navFrame = $navThumbFrame; - // navFrameKey = NAV_THUMB_FRAME_KEY; setStyle($style, $.Fotorama.jst.style({ @@ -2397,6 +2560,7 @@ fotoramaVersion = '4.6.4'; .removeClass(classes.remove.join(' ')); lastOptions = $.extend({}, opts); + setStagePosition(); } function normalizeIndex(index) { @@ -2426,8 +2590,13 @@ fotoramaVersion = '4.6.4'; } function setNavShaftMinMax() { - navShaftTouchTail.min = Math.min(0, measures.nw - $navShaft.width()); + + var isVerticalDir = (opts.navdir === 'vertical'); + var param = isVerticalDir ? $navShaft.height() : $navShaft.width(); + var mainParam = isVerticalDir ? measures.h : measures.nw; + navShaftTouchTail.min = Math.min(0, mainParam - param); navShaftTouchTail.max = 0; + navShaftTouchTail.direction = opts.navdir; $navShaft.toggleClass(grabClass, !(navShaftTouchTail.noMove = navShaftTouchTail.min === navShaftTouchTail.max)); } @@ -2530,10 +2699,10 @@ fotoramaVersion = '4.6.4'; function loaded() { $.Fotorama.measures[src] = imgData.measures = $.Fotorama.measures[src] || { - width: img.width, - height: img.height, - ratio: img.width / img.height - }; + width: img.width, + height: img.height, + ratio: img.width / img.height + }; setMeasures(imgData.measures.width, imgData.measures.height, imgData.measures.ratio, index); @@ -2547,7 +2716,7 @@ fotoramaVersion = '4.6.4'; } fit($img, ( - $.isFunction(specialMeasures) ? specialMeasures() : specialMeasures) || measures); + $.isFunction(specialMeasures) ? specialMeasures() : specialMeasures) || measures); $.Fotorama.cache[src] = frameData.state = 'loaded'; @@ -2735,10 +2904,20 @@ fotoramaVersion = '4.6.4'; } function thumbsDraw(pos, loadFLAG) { + var leftLimit, + rightLimit, + exceedLimit; + + if (o_nav !== 'thumbs' || isNaN(pos)) return; - var leftLimit = -pos, - rightLimit = -pos + measures.nw; + leftLimit = -pos; + rightLimit = -pos + measures.nw; + + if (opts.navdir === 'vertical') { + pos = pos - opts.thumbheight; + rightLimit = -pos + measures.h; + } $navThumbFrame.each(function () { var $this = $(this), @@ -2751,12 +2930,12 @@ fotoramaVersion = '4.6.4'; } }, specialMeasures = getSpecialMeasures(), - dataFrame = data[eq] || {}; - + exceedLimit = opts.navdir === 'vertical' ? + thisData.t > rightLimit : thisData.l > rightLimit; specialMeasures.w = thisData.w; if (thisData.l + thisData.w < leftLimit - || thisData.l > rightLimit + || exceedLimit || callFit(thisData.$img, specialMeasures)) return; loadFLAG && loadImg([eq], 'navThumb', getSpecialMeasures); @@ -2767,7 +2946,8 @@ fotoramaVersion = '4.6.4'; if (!frameAppend[type]) { var thumbsFLAG = type === 'nav' && o_navThumbs, - left = 0; + left = 0, + top = 0; $shaft.append( $frames @@ -2798,13 +2978,16 @@ fotoramaVersion = '4.6.4'; var $this = $(this), frameData = $this.data(), - thumbwidth = Math.round(o_thumbSide2 * frameData.data.thumbratio) || o_thumbSide; - + thumbwidth = Math.round(o_thumbSide2 * frameData.data.thumbratio) || o_thumbSide, + thumbheight = Math.round(o_thumbSide / frameData.data.thumbratio) || o_thumbSide2; + frameData.t = top; + frameData.h = thumbheight; frameData.l = left; frameData.w = thumbwidth; $this.css({width: thumbwidth}); + top += thumbheight + opts.thumbmargin; left += thumbwidth + opts.thumbmargin; }) ); @@ -2832,6 +3015,26 @@ fotoramaVersion = '4.6.4'; .attr(disableAttr(disableNext)); } + function thumbArrUpdate() { + var isLeftDisable = false, + isRightDisable = false; + if (opts.navtype === 'thumbs' && !opts.loop) { + (activeIndex == 0) ? isLeftDisable = true : isLeftDisable = false; + (activeIndex == opts.data.length - 1) ? isRightDisable = true : isRightDisable = false; + } + if (opts.navtype === 'slides') { + var pos = readPosition($navShaft, opts.navdir); + pos >= navShaftTouchTail.max ? isLeftDisable = true : isLeftDisable = false; + pos <= navShaftTouchTail.min ? isRightDisable = true : isRightDisable = false; + } + $thumbArrLeft + .toggleClass(arrDisabledClass, isLeftDisable) + .attr(disableAttr(isLeftDisable)); + $thumbArrRight + .toggleClass(arrDisabledClass, isRightDisable) + .attr(disableAttr(isRightDisable)); + } + function stageWheelUpdate() { if (stageWheelTail.ok) { stageWheelTail.prevent = {'<': disableDirrection(0), '>': disableDirrection(1)}; @@ -2841,51 +3044,97 @@ fotoramaVersion = '4.6.4'; function getNavFrameBounds($navFrame) { var navFrameData = $navFrame.data(), left, - width; + top, + width, + height; if (o_navThumbs) { left = navFrameData.l; + top = navFrameData.t; width = navFrameData.w; + height = navFrameData.h; } else { left = $navFrame.position().left; width = $navFrame.width(); } - return { + var horizontalBounds = { c: left + width / 2, min: -left + opts.thumbmargin * 10, max: -left + measures.w - width - opts.thumbmargin * 10 }; + + var verticalBounds = { + c: top + height / 2, + min: -top + opts.thumbmargin * 10, + max: -top + measures.h - height - opts.thumbmargin * 10 + }; + + return opts.navdir === 'vertical' ? verticalBounds : horizontalBounds; } function slideThumbBorder(time) { var navFrameData = activeFrame[navFrameKey].data(); slide($thumbBorder, { time: time * 1.2, - pos: navFrameData.l, - width: navFrameData.w + pos: (opts.navdir === 'vertical' ? navFrameData.t : navFrameData.l), + width: navFrameData.w, + height: navFrameData.h, + direction: opts.navdir }); } function slideNavShaft(options) { - var $guessNavFrame = data[options.guessIndex][navFrameKey]; + var $guessNavFrame = data[options.guessIndex][navFrameKey], + typeOfAnimation = opts.navtype; + + var overflowFLAG, + time, + minMax, + boundTop, + boundLeft, + l, + pos, + x; + if ($guessNavFrame) { - var overflowFLAG = navShaftTouchTail.min !== navShaftTouchTail.max, - minMax = options.minMax || overflowFLAG && getNavFrameBounds(activeFrame[navFrameKey]), - l = overflowFLAG && (options.keep && slideNavShaft.l ? slideNavShaft.l : minMaxLimit((options.coo || measures.nw / 2) - getNavFrameBounds($guessNavFrame).c, minMax.min, minMax.max)), - pos = overflowFLAG && minMaxLimit(l, navShaftTouchTail.min, navShaftTouchTail.max), + if (typeOfAnimation === 'thumbs') { + overflowFLAG = navShaftTouchTail.min !== navShaftTouchTail.max; + minMax = options.minMax || overflowFLAG && getNavFrameBounds(activeFrame[navFrameKey]); + boundTop = overflowFLAG && (options.keep && slideNavShaft.t ? slideNavShaft.l : minMaxLimit((options.coo || measures.nw / 2) - getNavFrameBounds($guessNavFrame).c, minMax.min, minMax.max)); + boundLeft = overflowFLAG && (options.keep && slideNavShaft.l ? slideNavShaft.l : minMaxLimit((options.coo || measures.nw / 2) - getNavFrameBounds($guessNavFrame).c, minMax.min, minMax.max)); + l = (opts.navdir === 'vertical' ? boundTop : boundLeft); + pos = overflowFLAG && minMaxLimit(l, navShaftTouchTail.min, navShaftTouchTail.max) || 0; time = options.time * 1.1; + slide($navShaft, { + time: time, + pos: pos, + direction: opts.navdir, + onEnd: function () { + thumbsDraw(pos, true); + thumbArrUpdate(); + } + }); - slide($navShaft, { - time: time, - pos: pos || 0, - onEnd: function () { - thumbsDraw(pos, true); - } - }); + setShadow($nav, findShadowEdge(pos, navShaftTouchTail.min, navShaftTouchTail.max, opts.navdir)); + slideNavShaft.l = l; + } else { + x = readPosition($navShaft, opts.navdir); + time = options.time * 1.11; + + pos = validateSlidePos(opts, navShaftTouchTail, options.guessIndex, x, $guessNavFrame, $navWrap, opts.navdir); - setShadow($nav, findShadowEdge(pos, navShaftTouchTail.min, navShaftTouchTail.max)); - slideNavShaft.l = l; + slide($navShaft, { + time: time, + pos: pos, + direction: opts.navdir, + onEnd: function () { + thumbsDraw(pos, true); + thumbArrUpdate(); + } + }); + setShadow($nav, findShadowEdge(pos, navShaftTouchTail.min, navShaftTouchTail.max, opts.navdir)); + } } } @@ -2929,13 +3178,19 @@ fotoramaVersion = '4.6.4'; $frame.attr('aria-hidden', 'false'); } - skipOnEnd || that.show.onEnd(true); + skipOnEnd || that.showStage.onEnd(true); stop($stageShaft, 0, true); detachFrames(STAGE_FRAME_KEY); stageFramePosition(activeIndexes); setStageShaftMinmaxAndSnap(); setNavShaftMinMax(); + addEnterUp($stageShaft[0], function () { + if (!$fotorama.hasClass(fullscreenClass)) { + that.requestFullScreen(); + $(fullscreenIcon).trigger('focus'); + } + }); } } @@ -3050,7 +3305,70 @@ fotoramaVersion = '4.6.4'; return this; }; - that.show = function (options) { + that.showSlide = function (slideDir) { + var currentPosition = readPosition($navShaft, opts.navdir), + pos, + time = 500 * 1.1, + size = opts.navdir === 'horizontal' ? opts.thumbwidth : opts.thumbheight, + onEnd = function () { + thumbArrUpdate(); + }; + if (slideDir === 'next') { + pos = currentPosition - (size + opts.margin) * thumbsPerSlide; + } + if (slideDir === 'prev') { + pos = currentPosition + (size + opts.margin) * thumbsPerSlide; + } + pos = validateRestrictions(pos, navShaftTouchTail); + thumbsDraw(pos, true); + slide($navShaft, { + time: time, + pos: pos, + direction: opts.navdir, + onEnd: onEnd + }); + }; + + that.showWhileLongPress = function (options) { + if (that.longPress.singlePressInProgress) + { + return; + } + + var index = calcActiveIndex(options); + calcGlobalIndexes(index); + var time = calcTime(options)/50; + var _activeFrame = activeFrame; + that.activeFrame = activeFrame = data[activeIndex]; + var silent = _activeFrame === activeFrame && !options.user; + + that.showNav(silent, options, time); + + return this; + }; + + that.showEndLongPress = function (options) { + if (that.longPress.singlePressInProgress) + { + return; + } + + var index = calcActiveIndex(options); + calcGlobalIndexes(index); + var time = calcTime(options)/50; + var _activeFrame = activeFrame; + that.activeFrame = activeFrame = data[activeIndex]; + + var silent = _activeFrame === activeFrame && !options.user; + + that.showStage(silent, options, time); + + showedFLAG = typeof lastActiveIndex !== 'undefined' && lastActiveIndex !== activeIndex; + lastActiveIndex = activeIndex; + return this; + }; + + function calcActiveIndex (options) { var index; if (typeof options !== 'object') { @@ -3064,6 +3382,10 @@ fotoramaVersion = '4.6.4'; index = isNaN(index) ? undefined : index; index = typeof index === 'undefined' ? activeIndex || 0 : index; + return index; + } + + function calcGlobalIndexes (index) { that.activeIndex = activeIndex = edgeIndex(index); prevIndex = getPrevIndex(activeIndex); nextIndex = getNextIndex(activeIndex); @@ -3071,20 +3393,22 @@ fotoramaVersion = '4.6.4'; activeIndexes = [activeIndex, prevIndex, nextIndex]; dirtyIndex = o_loop ? index : activeIndex; + } + function calcTime (options) { var diffIndex = Math.abs(lastActiveIndex - dirtyIndex), time = getNumber(options.time, function () { return Math.min(o_transitionDuration * (1 + (diffIndex - 1) / 12), o_transitionDuration * 2); - }), - overPos = options.overPos; - - if (options.slow) time *= 10; + }); - var _activeFrame = activeFrame; - that.activeFrame = activeFrame = data[activeIndex]; + if (options.slow) { + time *= 10; + } - var silent = _activeFrame === activeFrame && !options.user; + return time; + } + that.showStage = function (silent, options, time) { unloadVideo($videoPlaying, activeFrame.i !== data[normalizeIndex(repositionIndex)].i); frameDraw(activeIndexes, 'stage'); stageFramePosition(SLOW ? [dirtyIndex] : [dirtyIndex, getPrevIndex(dirtyIndex), getNextIndex(dirtyIndex)]); @@ -3097,7 +3421,8 @@ fotoramaVersion = '4.6.4'; pausedAutoplayFLAG = true; - var onEnd = that.show.onEnd = function (skipReposition) { + var overPos = options.overPos; + var onEnd = that.showStage.onEnd = function (skipReposition) { if (onEnd.ok) return; onEnd.ok = true; @@ -3131,12 +3456,11 @@ fotoramaVersion = '4.6.4'; pos: -getPosByIndex(dirtyIndex, measures.w, opts.margin, repositionIndex), overPos: overPos, time: time, - onEnd: onEnd/*, - _001: true*/ + onEnd: onEnd }); } else { var $activeFrame = activeFrame[STAGE_FRAME_KEY], - $prevActiveFrame = activeIndex !== lastActiveIndex ? data[lastActiveIndex][STAGE_FRAME_KEY] : null; + $prevActiveFrame = data[lastActiveIndex] && activeIndex !== lastActiveIndex ? data[lastActiveIndex][STAGE_FRAME_KEY] : null; fade($activeFrame, $prevActiveFrame, $stageFrame, { time: time, @@ -3146,7 +3470,10 @@ fotoramaVersion = '4.6.4'; } arrsUpdate(); + }; + that.showNav = function(silent, options, time){ + thumbArrUpdate(); if (o_nav) { navUpdate(); @@ -3157,12 +3484,27 @@ fotoramaVersion = '4.6.4'; guessIndex: typeof options.coo !== 'undefined' ? guessIndex : activeIndex, keep: silent }); - if (o_navThumbs) slideThumbBorder(time); } + }; + + that.show = function (options) { + that.longPress.singlePressInProgress = true; + + var index = calcActiveIndex(options); + calcGlobalIndexes(index); + var time = calcTime(options); + var _activeFrame = activeFrame; + that.activeFrame = activeFrame = data[activeIndex]; + + var silent = _activeFrame === activeFrame && !options.user; + + that.showStage(silent, options, time); + that.showNav(silent, options, time); showedFLAG = typeof lastActiveIndex !== 'undefined' && lastActiveIndex !== activeIndex; lastActiveIndex = activeIndex; + that.longPress.singlePressInProgress = false; return this; }; @@ -3258,11 +3600,12 @@ fotoramaVersion = '4.6.4'; var time = arguments[1] || 0, setFLAG = arguments[2]; + thumbsPerSlide = getThumbsInSlide($wrap, opts); extendMeasures(!that.fullScreen ? optionsToLowerCase(options) : { - width: '100%', + width: $(window).width(), maxwidth: null, minwidth: null, - height: '100%', + height: $(window).height(), maxheight: null, minheight: null }, [measures, setFLAG || that.fullScreen || opts]); @@ -3273,13 +3616,15 @@ fotoramaVersion = '4.6.4'; windowHeight = $WINDOW.height() - (o_nav ? $nav.height() : 0); if (measureIsValid(width)) { + $wrap.css({width: ''}); + $wrap.css({height: ''}); $stage.css({width: ''}); $stage.css({height: ''}); + $stage.css({'line-height': ''}); $stageShaft.css({width: ''}); $stageShaft.css({height: ''}); $nav.css({width: ''}); $nav.css({height: ''}); - $stage.css({'line-height': ''}); $wrap.css({minWidth: measures.minwidth || 0, maxWidth: measures.maxwidth || MAX_WIDTH}); width = measures.W = measures.w = $wrap.width(); @@ -3294,27 +3639,63 @@ fotoramaVersion = '4.6.4'; if (height) { width = Math.round(width); height = measures.h = Math.round(minMaxLimit(height, numberFromWhatever(measures.minheight, windowHeight), numberFromWhatever(measures.maxheight, windowHeight))); - $stage.css({'width': width, 'height': height, 'line-height': height + 'px'}); - stageShaftReposition(); + if (opts.navdir === 'vertical' && !that.fullscreen) { + $nav.width(opts.thumbwidth + opts.thumbmargin * 2); + } + + if (opts.navdir === 'horizontal' && !that.fullscreen) { + $nav.height(opts.thumbheight + opts.thumbmargin * 2); + } + + if (opts.navdir === 'vertical' && that.fullScreen) { + $stage.css('height', $(window).height()); + } + + if (opts.navdir === 'horizontal' && that.fullScreen) { + $stage.css('height', $(window).height() - (opts.thumbheight + opts.thumbmargin * 2)); + } if (o_nav) { - $nav - .stop() - .animate({width: measures.nw}, time); + switch (opts.navdir) { + case 'vertical': + $navWrap.removeClass(navShafthorizontalClass); + $navWrap.removeClass(navShaftListClass); + $navWrap.addClass(navShaftVerticalClass); + $nav + .stop() + .animate({height: measures.h, width: opts.thumbwidth}, time); + break; + case 'list': + $navWrap.removeClass(navShaftVerticalClass); + $navWrap.removeClass(navShafthorizontalClass); + $navWrap.addClass(navShaftListClass); + break; + default: + $navWrap.removeClass(navShaftVerticalClass); + $navWrap.removeClass(navShaftListClass); + $navWrap.addClass(navShafthorizontalClass); + $nav + .stop() + .animate({width: measures.nw}, time); + break; + } + stageShaftReposition(); slideNavShaft({guessIndex: activeIndex, time: time, keep: true}); if (o_navThumbs && frameAppend.nav) slideThumbBorder(time); } measuresSetFLAG = setFLAG || true; + ready.ok = true; ready(); } } stageLeft = $stage.offset().left; + setStagePosition(); return this; }; @@ -3333,10 +3714,33 @@ fotoramaVersion = '4.6.4'; function setShadow($el, edge) { if (o_shadows) { $el.removeClass(shadowsLeftClass + ' ' + shadowsRightClass); + $el.removeClass(shadowsTopClass + ' ' + shadowsBottomClass); edge && !$videoPlaying && $el.addClass(edge.replace(/^|\s/g, ' ' + shadowsClass + '--')); } } + that.longPress = { + threshold: 1, + count: 0, + thumbSlideTime: 20, + progress: function(){ + if (!this.inProgress) { + this.count++; + this.inProgress = this.count > this.threshold; + } + }, + end: function(){ + if(this.inProgress) { + this.isEnded = true + } + }, + reset: function(){ + this.count = 0; + this.inProgress = false; + this.isEnded = false; + } + }; + that.destroy = function () { that.cancelFullScreen(); that.stopAutoplay(); @@ -3466,7 +3870,11 @@ fotoramaVersion = '4.6.4'; toggleControlsClass(); } else if (opts.click) { - clickToShow({index: e.shiftKey || getDirectionSign(getDirection(e._x)), slow: e.altKey, user: true}); + clickToShow({ + index: e.shiftKey || getDirectionSign(getDirection(e._x)), + slow: e.altKey, + user: true + }); } } } @@ -3503,7 +3911,9 @@ fotoramaVersion = '4.6.4'; timeHigh: 1, friction: 2, select: '.' + selectClass + ', .' + selectClass + ' *', - $wrap: $stage + $wrap: $stage, + direction: 'horizontal' + }); navShaftTouchTail = moveOnTouch($navShaft, { @@ -3519,6 +3929,7 @@ fotoramaVersion = '4.6.4'; releaseAutoplay(); changeAutoplay(); thumbsDraw(result.newPos, true); + thumbArrUpdate(); } if (!result.moved) { @@ -3530,10 +3941,11 @@ fotoramaVersion = '4.6.4'; time: result.time, pos: result.newPos, overPos: result.overPos, + direction: opts.navdir, onEnd: onEnd }); thumbsDraw(result.newPos); - o_shadows && setShadow($nav, findShadowEdge(result.newPos, navShaftTouchTail.min, navShaftTouchTail.max)); + o_shadows && setShadow($nav, findShadowEdge(result.newPos, navShaftTouchTail.min, navShaftTouchTail.max, result.dir)); } else { onEnd(); } @@ -3541,7 +3953,8 @@ fotoramaVersion = '4.6.4'; timeLow: .5, timeHigh: 2, friction: 5, - $wrap: $nav + $wrap: $nav, + direction: opts.navdir }); stageWheelTail = wheel($stage, { @@ -3558,8 +3971,8 @@ fotoramaVersion = '4.6.4'; onTouchStart(); onTouchEnd(); var newPos = stop($navShaft) + direction * .25; - $navShaft.css(getTranslate(minMaxLimit(newPos, navShaftTouchTail.min, navShaftTouchTail.max))); - o_shadows && setShadow($nav, findShadowEdge(newPos, navShaftTouchTail.min, navShaftTouchTail.max)); + $navShaft.css(getTranslate(minMaxLimit(newPos, navShaftTouchTail.min, navShaftTouchTail.max), opts.navdir)); + o_shadows && setShadow($nav, findShadowEdge(newPos, navShaftTouchTail.min, navShaftTouchTail.max, opts.navdir)); navWheelTail.prevent = {'<': newPos >= navShaftTouchTail.max, '>': newPos <= navShaftTouchTail.min}; clearTimeout(navWheelTail.t); navWheelTail.t = setTimeout(function () { @@ -3578,7 +3991,6 @@ fotoramaVersion = '4.6.4'; }, 0); }, function () { - //console.log("click"); if (!hoverFLAG) return; toggleControlsClass(!(hoverFLAG = false)); } @@ -3586,7 +3998,12 @@ fotoramaVersion = '4.6.4'; function onNavFrameClick(e) { var index = $(this).data().eq; - clickToShow({index: index, slow: e.altKey, user: true, coo: e._x - $nav.offset().left}); + + if (opts.navtype === 'thumbs') { + clickToShow({index: index, slow: e.altKey, user: true, coo: e._x - $nav.offset().left}); + } else { + clickToShow({index: index, slow: e.altKey, user: true}); + } } function onArrClick(e) { @@ -3604,6 +4021,27 @@ fotoramaVersion = '4.6.4'; onTouchEnd: onTouchEnd }); + smartClick($thumbArrLeft, function (e) { + stopEvent(e); + if (opts.navtype === 'thumbs') { + + that.show('<'); + } else { + that.showSlide('prev') + } + }); + + smartClick($thumbArrRight, function (e) { + stopEvent(e); + if (opts.navtype === 'thumbs') { + that.show('>'); + } else { + that.showSlide('next') + } + + }); + + function addFocusOnControls(el) { addFocus(el, function () { setTimeout(function () { @@ -3620,7 +4058,10 @@ fotoramaVersion = '4.6.4'; addFocusOnControls(this); }); - addEnterUp(fullscreenIcon, that.toggleFullScreen); + addEnterUp(fullscreenIcon, function () { + that.toggleFullScreen(); + $(fullscreenIcon).trigger('focus'); + }); addFocusOnControls(fullscreenIcon); function reset() { @@ -3679,16 +4120,14 @@ fotoramaVersion = '4.6.4'; }); function ready() { - if (!ready.ok) { - ready.ok = true; + if (ready.ok) { + ready.ok = false; triggerEvent('ready'); } } reset(); }; - - $.fn.fotorama = function (opts) { return this.each(function () { var that = this, @@ -3733,49 +4172,50 @@ fotoramaVersion = '4.6.4'; $.Fotorama.instances.splice(instance.index, 1); calculateIndexes(); } + $.Fotorama.cache = {}; $.Fotorama.measures = {}; $ = $ || {}; $.Fotorama = $.Fotorama || {}; $.Fotorama.jst = $.Fotorama.jst || {}; - $.Fotorama.jst.dots = function(v) { + $.Fotorama.jst.dots = function (v) { var __t, __p = '', __e = _.escape; - __p += '<div class="fotorama__nav__frame fotorama__nav__frame--dot" tabindex="0" role="button" data-gallery-role="nav-frame" data-nav-type="dot" aria-label>\r\n <div class="fotorama__dot"></div>\r\n</div>'; + __p += '<div class="fotorama__nav__frame fotorama__nav__frame--dot" tabindex="0" role="button" data-gallery-role="nav-frame" data-nav-type="thumb" aria-label>\r\n <div class="fotorama__dot"></div>\r\n</div>'; return __p }; - $.Fotorama.jst.frameCaption = function(v) { + $.Fotorama.jst.frameCaption = function (v) { var __t, __p = '', __e = _.escape; __p += '<div class="fotorama__caption" aria-hidden="true">\r\n <div class="fotorama__caption__wrap" id="' + - ((__t = ( v.labelledby )) == null ? '' : __t) + - '">' + - ((__t = ( v.caption )) == null ? '' : __t) + - '</div>\r\n</div>\r\n'; + ((__t = ( v.labelledby )) == null ? '' : __t) + + '">' + + ((__t = ( v.caption )) == null ? '' : __t) + + '</div>\r\n</div>\r\n'; return __p }; - $.Fotorama.jst.style = function(v) { + $.Fotorama.jst.style = function (v) { var __t, __p = '', __e = _.escape; __p += '.fotorama' + - ((__t = ( v.s )) == null ? '' : __t) + - ' .fotorama__nav--thumbs .fotorama__nav__frame{\r\npadding:' + - ((__t = ( v.m )) == null ? '' : __t) + - 'px;\r\nheight:' + - ((__t = ( v.h )) == null ? '' : __t) + - 'px}\r\n.fotorama' + - ((__t = ( v.s )) == null ? '' : __t) + - ' .fotorama__thumb-border{\r\nheight:' + - ((__t = ( v.h )) == null ? '' : __t) + - 'px;\r\nborder-width:' + - ((__t = ( v.b )) == null ? '' : __t) + - 'px;\r\nmargin-top:' + - ((__t = ( v.m )) == null ? '' : __t) + - 'px}'; + ((__t = ( v.s )) == null ? '' : __t) + + ' .fotorama__nav--thumbs .fotorama__nav__frame{\r\npadding:' + + ((__t = ( v.m )) == null ? '' : __t) + + 'px;\r\nheight:' + + ((__t = ( v.h )) == null ? '' : __t) + + 'px}\r\n.fotorama' + + ((__t = ( v.s )) == null ? '' : __t) + + ' .fotorama__thumb-border{\r\nheight:' + + ((__t = ( v.h )) == null ? '' : __t) + + 'px;\r\nborder-width:' + + ((__t = ( v.b )) == null ? '' : __t) + + 'px;\r\nmargin-top:' + + ((__t = ( v.m )) == null ? '' : __t) + + 'px}'; return __p }; - $.Fotorama.jst.thumb = function(v) { + $.Fotorama.jst.thumb = function (v) { var __t, __p = '', __e = _.escape; __p += '<div class="fotorama__nav__frame fotorama__nav__frame--thumb" tabindex="0" role="button" data-gallery-role="nav-frame" data-nav-type="thumb" aria-label>\r\n <div class="fotorama__thumb">\r\n </div>\r\n</div>'; return __p diff --git a/lib/web/knockoutjs/knockout-es5.js b/lib/web/knockoutjs/knockout-es5.js new file mode 100644 index 0000000000000000000000000000000000000000..899edd79aa3e30417689ee52c173007ceb0149f4 --- /dev/null +++ b/lib/web/knockoutjs/knockout-es5.js @@ -0,0 +1,468 @@ +/*! + * Knockout ES5 plugin - https://github.com/SteveSanderson/knockout-es5 + * Copyright (c) Steve Sanderson + * MIT license + */ + +(function(global, undefined) { + 'use strict'; + + var ko; + + // Model tracking + // -------------- + // + // This is the central feature of Knockout-ES5. We augment model objects by converting properties + // into ES5 getter/setter pairs that read/write an underlying Knockout observable. This means you can + // use plain JavaScript syntax to read/write the property while still getting the full benefits of + // Knockout's automatic dependency detection and notification triggering. + // + // For comparison, here's Knockout ES3-compatible syntax: + // + // var firstNameLength = myModel.user().firstName().length; // Read + // myModel.user().firstName('Bert'); // Write + // + // ... versus Knockout-ES5 syntax: + // + // var firstNameLength = myModel.user.firstName.length; // Read + // myModel.user.firstName = 'Bert'; // Write + + // `ko.track(model)` converts each property on the given model object into a getter/setter pair that + // wraps a Knockout observable. Optionally specify an array of property names to wrap; otherwise we + // wrap all properties. If any of the properties are already observables, we replace them with + // ES5 getter/setter pairs that wrap your original observable instances. In the case of readonly + // ko.computed properties, we simply do not define a setter (so attempted writes will be ignored, + // which is how ES5 readonly properties normally behave). + // + // By design, this does *not* recursively walk child object properties, because making literally + // everything everywhere independently observable is usually unhelpful. When you do want to track + // child object properties independently, define your own class for those child objects and put + // a separate ko.track call into its constructor --- this gives you far more control. + /** + * @param {object} obj + * @param {object|array.<string>} propertyNamesOrSettings + * @param {boolean} propertyNamesOrSettings.deep Use deep track. + * @param {array.<string>} propertyNamesOrSettings.fields Array of property names to wrap. + * todo: @param {array.<string>} propertyNamesOrSettings.exclude Array of exclude property names to wrap. + * todo: @param {function(string, *):boolean} propertyNamesOrSettings.filter Function to filter property + * names to wrap. A function that takes ... params + * @return {object} + */ + function track(obj, propertyNamesOrSettings) { + if (!obj || typeof obj !== 'object') { + throw new Error('When calling ko.track, you must pass an object as the first parameter.'); + } + + var propertyNames; + + if ( isPlainObject(propertyNamesOrSettings) ) { + // defaults + propertyNamesOrSettings.deep = propertyNamesOrSettings.deep || false; + propertyNamesOrSettings.fields = propertyNamesOrSettings.fields || Object.getOwnPropertyNames(obj); + propertyNamesOrSettings.lazy = propertyNamesOrSettings.lazy || false; + + wrap(obj, propertyNamesOrSettings.fields, propertyNamesOrSettings); + } else { + propertyNames = propertyNamesOrSettings || Object.getOwnPropertyNames(obj); + wrap(obj, propertyNames, {}); + } + + return obj; + } + + // fix for ie + var rFunctionName = /^function\s*([^\s(]+)/; + function getFunctionName( ctor ){ + if (ctor.name) { + return ctor.name; + } + return (ctor.toString().trim().match( rFunctionName ) || [])[1]; + } + + function canTrack(obj) { + return obj && typeof obj === 'object' && getFunctionName(obj.constructor) === 'Object'; + } + + function createPropertyDescriptor(originalValue, prop, map) { + var isObservable = ko.isObservable(originalValue); + var isArray = !isObservable && Array.isArray(originalValue); + var observable = isObservable ? originalValue + : isArray ? ko.observableArray(originalValue) + : ko.observable(originalValue); + + map[prop] = function () { return observable; }; + + // add check in case the object is already an observable array + if (isArray || (isObservable && 'push' in observable)) { + notifyWhenPresentOrFutureArrayValuesMutate(ko, observable); + } + + return { + configurable: true, + enumerable: true, + get: observable, + set: ko.isWriteableObservable(observable) ? observable : undefined + }; + } + + function createLazyPropertyDescriptor(originalValue, prop, map) { + if (ko.isObservable(originalValue)) { + // no need to be lazy if we already have an observable + return createPropertyDescriptor(originalValue, prop, map); + } + + var observable; + + function getOrCreateObservable(value, writing) { + if (observable) { + return writing ? observable(value) : observable; + } + + if (Array.isArray(value)) { + observable = ko.observableArray(value); + notifyWhenPresentOrFutureArrayValuesMutate(ko, observable); + return observable; + } + + return (observable = ko.observable(value)); + } + + map[prop] = function () { return getOrCreateObservable(originalValue); }; + return { + configurable: true, + enumerable: true, + get: function () { return getOrCreateObservable(originalValue)(); }, + set: function (value) { getOrCreateObservable(value, true); } + }; + } + + function wrap(obj, props, options) { + if (!props.length) { + return; + } + + var allObservablesForObject = getAllObservablesForObject(obj, true); + var descriptors = {}; + + props.forEach(function (prop) { + // Skip properties that are already tracked + if (prop in allObservablesForObject) { + return; + } + + // Skip properties where descriptor can't be redefined + if (Object.getOwnPropertyDescriptor(obj, prop).configurable === false){ + return; + } + + var originalValue = obj[prop]; + descriptors[prop] = (options.lazy ? createLazyPropertyDescriptor : createPropertyDescriptor) + (originalValue, prop, allObservablesForObject); + + if (options.deep && canTrack(originalValue)) { + wrap(originalValue, Object.keys(originalValue), options); + } + }); + + Object.defineProperties(obj, descriptors); + } + + function isPlainObject( obj ){ + return !!obj && typeof obj === 'object' && obj.constructor === Object; + } + + // Lazily created by `getAllObservablesForObject` below. Has to be created lazily because the + // WeakMap factory isn't available until the module has finished loading (may be async). + var objectToObservableMap; + + // Gets or creates the hidden internal key-value collection of observables corresponding to + // properties on the model object. + function getAllObservablesForObject(obj, createIfNotDefined) { + if (!objectToObservableMap) { + objectToObservableMap = weakMapFactory(); + } + + var result = objectToObservableMap.get(obj); + if (!result && createIfNotDefined) { + result = {}; + objectToObservableMap.set(obj, result); + } + return result; + } + + // Removes the internal references to observables mapped to the specified properties + // or the entire object reference if no properties are passed in. This allows the + // observables to be replaced and tracked again. + function untrack(obj, propertyNames) { + if (!objectToObservableMap) { + return; + } + + if (arguments.length === 1) { + objectToObservableMap['delete'](obj); + } else { + var allObservablesForObject = getAllObservablesForObject(obj, false); + if (allObservablesForObject) { + propertyNames.forEach(function(propertyName) { + delete allObservablesForObject[propertyName]; + }); + } + } + } + + // Computed properties + // ------------------- + // + // The preceding code is already sufficient to upgrade ko.computed model properties to ES5 + // getter/setter pairs (or in the case of readonly ko.computed properties, just a getter). + // These then behave like a regular property with a getter function, except they are smarter: + // your evaluator is only invoked when one of its dependencies changes. The result is cached + // and used for all evaluations until the next time a dependency changes). + // + // However, instead of forcing developers to declare a ko.computed property explicitly, it's + // nice to offer a utility function that declares a computed getter directly. + + // Implements `ko.defineProperty` + function defineComputedProperty(obj, propertyName, evaluatorOrOptions) { + var ko = this, + computedOptions = { owner: obj, deferEvaluation: true }; + + if (typeof evaluatorOrOptions === 'function') { + computedOptions.read = evaluatorOrOptions; + } else { + if ('value' in evaluatorOrOptions) { + throw new Error('For ko.defineProperty, you must not specify a "value" for the property. ' + + 'You must provide a "get" function.'); + } + + if (typeof evaluatorOrOptions.get !== 'function') { + throw new Error('For ko.defineProperty, the third parameter must be either an evaluator function, ' + + 'or an options object containing a function called "get".'); + } + + computedOptions.read = evaluatorOrOptions.get; + computedOptions.write = evaluatorOrOptions.set; + } + + obj[propertyName] = ko.computed(computedOptions); + track.call(ko, obj, [propertyName]); + return obj; + } + + // Array handling + // -------------- + // + // Arrays are special, because unlike other property types, they have standard mutator functions + // (`push`/`pop`/`splice`/etc.) and it's desirable to trigger a change notification whenever one of + // those mutator functions is invoked. + // + // Traditionally, Knockout handles this by putting special versions of `push`/`pop`/etc. on observable + // arrays that mutate the underlying array and then trigger a notification. That approach doesn't + // work for Knockout-ES5 because properties now return the underlying arrays, so the mutator runs + // in the context of the underlying array, not any particular observable: + // + // // Operates on the underlying array value + // myModel.someCollection.push('New value'); + // + // To solve this, Knockout-ES5 detects array values, and modifies them as follows: + // 1. Associates a hidden subscribable with each array instance that it encounters + // 2. Intercepts standard mutators (`push`/`pop`/etc.) and makes them trigger the subscribable + // Then, for model properties whose values are arrays, the property's underlying observable + // subscribes to the array subscribable, so it can trigger a change notification after mutation. + + // Given an observable that underlies a model property, watch for any array value that might + // be assigned as the property value, and hook into its change events + function notifyWhenPresentOrFutureArrayValuesMutate(ko, observable) { + var watchingArraySubscription = null; + ko.computed(function () { + // Unsubscribe to any earlier array instance + if (watchingArraySubscription) { + watchingArraySubscription.dispose(); + watchingArraySubscription = null; + } + + // Subscribe to the new array instance + var newArrayInstance = observable(); + if (newArrayInstance instanceof Array) { + watchingArraySubscription = startWatchingArrayInstance(ko, observable, newArrayInstance); + } + }); + } + + // Listens for array mutations, and when they happen, cause the observable to fire notifications. + // This is used to make model properties of type array fire notifications when the array changes. + // Returns a subscribable that can later be disposed. + function startWatchingArrayInstance(ko, observable, arrayInstance) { + var subscribable = getSubscribableForArray(ko, arrayInstance); + return subscribable.subscribe(observable); + } + + // Lazily created by `getSubscribableForArray` below. Has to be created lazily because the + // WeakMap factory isn't available until the module has finished loading (may be async). + var arraySubscribablesMap; + + // Gets or creates a subscribable that fires after each array mutation + function getSubscribableForArray(ko, arrayInstance) { + if (!arraySubscribablesMap) { + arraySubscribablesMap = weakMapFactory(); + } + + var subscribable = arraySubscribablesMap.get(arrayInstance); + if (!subscribable) { + subscribable = new ko.subscribable(); + arraySubscribablesMap.set(arrayInstance, subscribable); + + var notificationPauseSignal = {}; + wrapStandardArrayMutators(arrayInstance, subscribable, notificationPauseSignal); + addKnockoutArrayMutators(ko, arrayInstance, subscribable, notificationPauseSignal); + } + + return subscribable; + } + + // After each array mutation, fires a notification on the given subscribable + function wrapStandardArrayMutators(arrayInstance, subscribable, notificationPauseSignal) { + ['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'].forEach(function(fnName) { + var origMutator = arrayInstance[fnName]; + arrayInstance[fnName] = function() { + var result = origMutator.apply(this, arguments); + if (notificationPauseSignal.pause !== true) { + subscribable.notifySubscribers(this); + } + return result; + }; + }); + } + + // Adds Knockout's additional array mutation functions to the array + function addKnockoutArrayMutators(ko, arrayInstance, subscribable, notificationPauseSignal) { + ['remove', 'removeAll', 'destroy', 'destroyAll', 'replace'].forEach(function(fnName) { + // Make it a non-enumerable property for consistency with standard Array functions + Object.defineProperty(arrayInstance, fnName, { + enumerable: false, + value: function() { + var result; + + // These additional array mutators are built using the underlying push/pop/etc. + // mutators, which are wrapped to trigger notifications. But we don't want to + // trigger multiple notifications, so pause the push/pop/etc. wrappers and + // delivery only one notification at the end of the process. + notificationPauseSignal.pause = true; + try { + // Creates a temporary observableArray that can perform the operation. + result = ko.observableArray.fn[fnName].apply(ko.observableArray(arrayInstance), arguments); + } + finally { + notificationPauseSignal.pause = false; + } + subscribable.notifySubscribers(arrayInstance); + return result; + } + }); + }); + } + + // Static utility functions + // ------------------------ + // + // Since Knockout-ES5 sets up properties that return values, not observables, you can't + // trivially subscribe to the underlying observables (e.g., `someProperty.subscribe(...)`), + // or tell them that object values have mutated, etc. To handle this, we set up some + // extra utility functions that can return or work with the underlying observables. + + // Returns the underlying observable associated with a model property (or `null` if the + // model or property doesn't exist, or isn't associated with an observable). This means + // you can subscribe to the property, e.g.: + // + // ko.getObservable(model, 'propertyName') + // .subscribe(function(newValue) { ... }); + function getObservable(obj, propertyName) { + if (!obj || typeof obj !== 'object') { + return null; + } + + var allObservablesForObject = getAllObservablesForObject(obj, false); + if (allObservablesForObject && propertyName in allObservablesForObject) { + return allObservablesForObject[propertyName](); + } + + return null; + } + + // Returns a boolean indicating whether the property on the object has an underlying + // observables. This does the check in a way not to create an observable if the + // object was created with lazily created observables + function isTracked(obj, propertyName) { + if (!obj || typeof obj !== 'object') { + return false; + } + + var allObservablesForObject = getAllObservablesForObject(obj, false); + return !!allObservablesForObject && propertyName in allObservablesForObject; + } + + // Causes a property's associated observable to fire a change notification. Useful when + // the property value is a complex object and you've modified a child property. + function valueHasMutated(obj, propertyName) { + var observable = getObservable(obj, propertyName); + + if (observable) { + observable.valueHasMutated(); + } + } + + // Module initialisation + // --------------------- + // + // When this script is first evaluated, it works out what kind of module loading scenario + // it is in (Node.js or a browser `<script>` tag), stashes a reference to its dependencies + // (currently that's just the WeakMap shim), and then finally attaches itself to whichever + // instance of Knockout.js it can find. + + // A function that returns a new ES6-compatible WeakMap instance (using ES5 shim if needed). + // Instantiated by prepareExports, accounting for which module loader is being used. + var weakMapFactory; + + // Extends a Knockout instance with Knockout-ES5 functionality + function attachToKo(ko) { + ko.track = track; + ko.untrack = untrack; + ko.getObservable = getObservable; + ko.valueHasMutated = valueHasMutated; + ko.defineProperty = defineComputedProperty; + + // todo: test it, maybe added it to ko. directly + ko.es5 = { + getAllObservablesForObject: getAllObservablesForObject, + notifyWhenPresentOrFutureArrayValuesMutate: notifyWhenPresentOrFutureArrayValuesMutate, + isTracked: isTracked + }; + } + + // Determines which module loading scenario we're in, grabs dependencies, and attaches to KO + function prepareExports() { + if (typeof exports === 'object' && typeof module === 'object') { + // Node.js case - load KO and WeakMap modules synchronously + ko = require('knockout'); + var WM = require('../lib/weakmap'); + attachToKo(ko); + weakMapFactory = function() { return new WM(); }; + module.exports = ko; + } else if (typeof define === 'function' && define.amd) { + define(['knockout'], function(koModule) { + ko = koModule; + attachToKo(koModule); + weakMapFactory = function() { return new global.WeakMap(); }; + return koModule; + }); + } else if ('ko' in global) { + // Non-module case - attach to the global instance, and assume a global WeakMap constructor + ko = global.ko; + attachToKo(global.ko); + weakMapFactory = function() { return new global.WeakMap(); }; + } + } + + prepareExports(); + +})(this); \ No newline at end of file diff --git a/lib/web/knockoutjs/knockout-fast-foreach.js b/lib/web/knockoutjs/knockout-fast-foreach.js new file mode 100644 index 0000000000000000000000000000000000000000..7289d46d1c2a6c666748a42c87a340789a2dc73a --- /dev/null +++ b/lib/web/knockoutjs/knockout-fast-foreach.js @@ -0,0 +1,331 @@ +/*! + Knockout Fast Foreach v0.4.1 (2015-07-17T14:06:15.974Z) + By: Brian M Hunt (C) 2015 + License: MIT + + Adds `fastForEach` to `ko.bindingHandlers`. +*/ +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + define(['knockout'], factory); + } else if (typeof exports === 'object') { + module.exports = factory(require('knockout')); + } else { + root.KnockoutFastForeach = factory(root.ko); + } +}(this, function (ko) { + "use strict"; +// index.js +// -------- +// Fast For Each +// +// Employing sound techniques to make a faster Knockout foreach binding. +// -------- + +// Utilities + +// from https://github.com/jonschlinkert/is-plain-object +function isPlainObject(o) { + return !!o && typeof o === 'object' && o.constructor === Object; +} + +// From knockout/src/virtualElements.js +var commentNodesHaveTextProperty = document && document.createComment("test").text === "<!--test-->"; +var startCommentRegex = commentNodesHaveTextProperty ? /^<!--\s*ko(?:\s+([\s\S]+))?\s*-->$/ : /^\s*ko(?:\s+([\s\S]+))?\s*$/; +var supportsDocumentFragment = document && typeof document.createDocumentFragment === "function"; +function isVirtualNode(node) { + return (node.nodeType === 8) && startCommentRegex.test(commentNodesHaveTextProperty ? node.text : node.nodeValue); +} + + +// Get a copy of the (possibly virtual) child nodes of the given element, +// put them into a container, then empty the given node. +function makeTemplateNode(sourceNode) { + var container = document.createElement("div"); + var parentNode; + if (sourceNode.content) { + // For e.g. <template> tags + parentNode = sourceNode.content; + } else if (sourceNode.tagName === 'SCRIPT') { + parentNode = document.createElement("div"); + parentNode.innerHTML = sourceNode.text; + } else { + // Anything else e.g. <div> + parentNode = sourceNode; + } + ko.utils.arrayForEach(ko.virtualElements.childNodes(parentNode), function (child) { + // FIXME - This cloneNode could be expensive; we may prefer to iterate over the + // parentNode children in reverse (so as not to foul the indexes as childNodes are + // removed from parentNode when inserted into the container) + if (child) { + container.insertBefore(child.cloneNode(true), null); + } + }); + return container; +} + +function insertAllAfter(containerNode, nodeOrNodeArrayToInsert, insertAfterNode) { + var frag, len, i; + // poor man's node and array check, should be enough for this + if (typeof nodeOrNodeArrayToInsert.nodeType !== "undefined" && typeof nodeOrNodeArrayToInsert.length === "undefined") { + throw new Error("Expected a single node or a node array"); + } + + if (typeof nodeOrNodeArrayToInsert.nodeType !== "undefined") { + ko.virtualElements.insertAfter(containerNode, nodeOrNodeArrayToInsert, insertAfterNode); + return; + } + + if (nodeOrNodeArrayToInsert.length === 1) { + ko.virtualElements.insertAfter(containerNode, nodeOrNodeArrayToInsert[0], insertAfterNode); + return; + } + + if (supportsDocumentFragment) { + frag = document.createDocumentFragment(); + + for (i = 0, len = nodeOrNodeArrayToInsert.length; i !== len; ++i) { + frag.appendChild(nodeOrNodeArrayToInsert[i]); + } + ko.virtualElements.insertAfter(containerNode, frag, insertAfterNode); + } else { + // Nodes are inserted in reverse order - pushed down immediately after + // the last node for the previous item or as the first node of element. + for (i = nodeOrNodeArrayToInsert.length - 1; i >= 0; --i) { + var child = nodeOrNodeArrayToInsert[i]; + if (!child) { + return; + } + ko.virtualElements.insertAfter(containerNode, child, insertAfterNode); + } + } +} + +// Mimic a KO change item 'add' +function valueToChangeAddItem(value, index) { + return { + status: 'added', + value: value, + index: index + }; +} + +function isAdditionAdjacentToLast(changeIndex, arrayChanges) { + return changeIndex > 0 && + changeIndex < arrayChanges.length && + arrayChanges[changeIndex].status === "added" && + arrayChanges[changeIndex - 1].status === "added" && + arrayChanges[changeIndex - 1].index === arrayChanges[changeIndex].index - 1; +} + +function FastForEach(spec) { + this.element = spec.element; + this.container = isVirtualNode(this.element) ? + this.element.parentNode : this.element; + this.$context = spec.$context; + this.data = spec.data; + this.as = spec.as; + this.noContext = spec.noContext; + this.templateNode = makeTemplateNode( + spec.name ? document.getElementById(spec.name).cloneNode(true) : spec.element + ); + this.afterQueueFlush = spec.afterQueueFlush; + this.beforeQueueFlush = spec.beforeQueueFlush; + this.changeQueue = []; + this.lastNodesList = []; + this.indexesToDelete = []; + this.rendering_queued = false; + + // Remove existing content. + ko.virtualElements.emptyNode(this.element); + + // Prime content + var primeData = ko.unwrap(this.data); + if (primeData.map) { + this.onArrayChange(primeData.map(valueToChangeAddItem)); + } + + // Watch for changes + if (ko.isObservable(this.data)) { + if (!this.data.indexOf) { + // Make sure the observable is trackable. + this.data = this.data.extend({trackArrayChanges: true}); + } + this.changeSubs = this.data.subscribe(this.onArrayChange, this, 'arrayChange'); + } +} + + +FastForEach.animateFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame || + window.mozRequestAnimationFrame || window.msRequestAnimationFrame || + function(cb) { return window.setTimeout(cb, 1000 / 60); }; + + +FastForEach.prototype.dispose = function () { + if (this.changeSubs) { + this.changeSubs.dispose(); + } +}; + + +// If the array changes we register the change. +FastForEach.prototype.onArrayChange = function (changeSet) { + var self = this; + var changeMap = { + added: [], + deleted: [] + }; + for (var i = 0, len = changeSet.length; i < len; i++) { + // the change is appended to a last change info object when both are 'added' and have indexes next to each other + // here I presume that ko is sending changes in monotonic order (in index variable) which happens to be true, tested with push and splice with multiple pushed values + if (isAdditionAdjacentToLast(i, changeSet)) { + var batchValues = changeMap.added[changeMap.added.length - 1].values; + if (!batchValues) { + // transform the last addition into a batch addition object + var lastAddition = changeMap.added.pop(); + var batchAddition = { + isBatch: true, + status: 'added', + index: lastAddition.index, + values: [lastAddition.value] + }; + batchValues = batchAddition.values; + changeMap.added.push(batchAddition); + } + batchValues.push(changeSet[i].value); + } else { + changeMap[changeSet[i].status].push(changeSet[i]); + } + } + if (changeMap.deleted.length > 0) { + this.changeQueue.push.apply(this.changeQueue, changeMap.deleted); + this.changeQueue.push({status: 'clearDeletedIndexes'}); + } + this.changeQueue.push.apply(this.changeQueue, changeMap.added); + // Once a change is registered, the ticking count-down starts for the processQueue. + if (this.changeQueue.length > 0 && !this.rendering_queued) { + this.rendering_queued = true; + FastForEach.animateFrame.call(window, function () { self.processQueue(); }); + } +}; + + +// Reflect all the changes in the queue in the DOM, then wipe the queue. +FastForEach.prototype.processQueue = function () { + var self = this; + + // Callback so folks can do things before the queue flush. + if (typeof this.beforeQueueFlush === 'function') { + this.beforeQueueFlush(this.changeQueue); + } + + ko.utils.arrayForEach(this.changeQueue, function (changeItem) { + // console.log(self.data(), "CI", JSON.stringify(changeItem, null, 2), JSON.stringify($(self.element).text())) + self[changeItem.status](changeItem); + // console.log(" ==> ", JSON.stringify($(self.element).text())) + }); + this.rendering_queued = false; + // Callback so folks can do things. + if (typeof this.afterQueueFlush === 'function') { + this.afterQueueFlush(this.changeQueue); + } + this.changeQueue = []; +}; + + +// Process a changeItem with {status: 'added', ...} +FastForEach.prototype.added = function (changeItem) { + var index = changeItem.index; + var valuesToAdd = changeItem.isBatch ? changeItem.values : [changeItem.value]; + var referenceElement = this.lastNodesList[index - 1] || null; + // gather all childnodes for a possible batch insertion + var allChildNodes = []; + + for (var i = 0, len = valuesToAdd.length; i < len; ++i) { + var templateClone = this.templateNode.cloneNode(true); + var childContext; + + if (this.noContext) { + childContext = this.$context.extend({ + '$item': valuesToAdd[i] + }); + } else { + childContext = this.$context.createChildContext(valuesToAdd[i], this.as || null); + } + + // apply bindings first, and then process child nodes, because bindings can add childnodes + ko.applyBindingsToDescendants(childContext, templateClone); + + var childNodes = ko.virtualElements.childNodes(templateClone); + // Note discussion at https://github.com/angular/angular.js/issues/7851 + allChildNodes.push.apply(allChildNodes, Array.prototype.slice.call(childNodes)); + this.lastNodesList.splice(index + i, 0, childNodes[childNodes.length - 1]); + } + + insertAllAfter(this.element, allChildNodes, referenceElement); +}; + + +// Process a changeItem with {status: 'deleted', ...} +FastForEach.prototype.deleted = function (changeItem) { + var index = changeItem.index; + var ptr = this.lastNodesList[index], + // We use this.element because that will be the last previous node + // for virtual element lists. + lastNode = this.lastNodesList[index - 1] || this.element; + do { + ptr = ptr.previousSibling; + ko.removeNode((ptr && ptr.nextSibling) || ko.virtualElements.firstChild(this.element)); + } while (ptr && ptr !== lastNode); + // The "last node" in the DOM from which we begin our delets of the next adjacent node is + // now the sibling that preceded the first node of this item. + this.lastNodesList[index] = this.lastNodesList[index - 1]; + this.indexesToDelete.push(index); +}; + + +// We batch our deletion of item indexes in our parallel array. +// See brianmhunt/knockout-fast-foreach#6/#8 +FastForEach.prototype.clearDeletedIndexes = function () { + // We iterate in reverse on the presumption (following the unit tests) that KO's diff engine + // processes diffs (esp. deletes) monotonically ascending i.e. from index 0 -> N. + for (var i = this.indexesToDelete.length - 1; i >= 0; --i) { + this.lastNodesList.splice(this.indexesToDelete[i], 1); + } + this.indexesToDelete = []; +}; + + +ko.bindingHandlers.fastForEach = { + // Valid valueAccessors: + // [] + // ko.observable([]) + // ko.observableArray([]) + // ko.computed + // {data: array, name: string, as: string} + init: function init(element, valueAccessor, bindings, vm, context) { + var value = valueAccessor(), + ffe; + if (isPlainObject(value)) { + value.element = value.element || element; + value.$context = context; + ffe = new FastForEach(value); + } else { + ffe = new FastForEach({ + element: element, + data: ko.unwrap(context.$rawData) === value ? context.$rawData : value, + $context: context + }); + } + ko.utils.domNodeDisposal.addDisposeCallback(element, function () { + ffe.dispose(); + }); + return {controlsDescendantBindings: true}; + }, + + // Export for testing, debugging, and overloading. + FastForEach: FastForEach +}; + +ko.virtualElements.allowedBindings.fastForEach = true; +})); \ No newline at end of file diff --git a/lib/web/knockoutjs/knockout-repeat.js b/lib/web/knockoutjs/knockout-repeat.js new file mode 100644 index 0000000000000000000000000000000000000000..3bebceb9252be4f03dfcf7b73b408fc359e1a1a3 --- /dev/null +++ b/lib/web/knockoutjs/knockout-repeat.js @@ -0,0 +1,216 @@ +// REPEAT binding for Knockout http://knockoutjs.com/ +// (c) Michael Best +// License: MIT (http://www.opensource.org/licenses/mit-license.php) +// Version 2.1.0 + +(function(factory) { + if (typeof define === 'function' && define.amd) { + // [1] AMD anonymous module + define(['knockout'], factory); + } else if (typeof exports === 'object') { + // [2] commonJS + factory(require('knockout')); + } else { + // [3] No module loader (plain <script> tag) - put directly in global namespace + factory(window.ko); + } +})(function(ko) { + +if (!ko.virtualElements) + throw Error('Repeat requires at least Knockout 2.1'); + +var ko_bindingFlags = ko.bindingFlags || {}; +var ko_unwrap = ko.utils.unwrapObservable; + +var koProtoName = '__ko_proto__'; + +if (ko.version >= "3.0.0") { + // In Knockout 3.0.0, use the node preprocessor to replace a node with a repeat binding with a virtual element + var provider = ko.bindingProvider.instance, previousPreprocessFn = provider.preprocessNode; + provider.preprocessNode = function(node) { + var newNodes, nodeBinding; + if (!previousPreprocessFn || !(newNodes = previousPreprocessFn.call(this, node))) { + if (node.nodeType === 1 && (nodeBinding = node.getAttribute('data-bind'))) { + if (/^\s*repeat\s*:/.test(nodeBinding)) { + var leadingComment = node.ownerDocument.createComment('ko ' + nodeBinding), + trailingComment = node.ownerDocument.createComment('/ko'); + node.parentNode.insertBefore(leadingComment, node); + node.parentNode.insertBefore(trailingComment, node.nextSibling); + node.removeAttribute('data-bind'); + newNodes = [leadingComment, node, trailingComment]; + } + } + } + return newNodes; + }; +} + +ko.virtualElements.allowedBindings.repeat = true; +ko.bindingHandlers.repeat = { + flags: ko_bindingFlags.contentBind | ko_bindingFlags.canUseVirtual, + init: function(element, valueAccessor, allBindingsAccessor, xxx, bindingContext) { + + // Read and set fixed options--these options cannot be changed + var repeatParam = ko_unwrap(valueAccessor()); + if (repeatParam && typeof repeatParam == 'object' && !('length' in repeatParam)) { + var repeatIndex = repeatParam.index, + repeatData = repeatParam.item, + repeatStep = repeatParam.step, + repeatReversed = repeatParam.reverse, + repeatBind = repeatParam.bind, + repeatInit = repeatParam.init, + repeatUpdate = repeatParam.update; + } + // Set default values for options that need it + repeatIndex = repeatIndex || '$index'; + repeatData = repeatData || ko.bindingHandlers.repeat.itemName || '$item'; + repeatStep = repeatStep || 1; + repeatReversed = repeatReversed || false; + + var parent = element.parentNode, placeholder; + if (element.nodeType == 8) { // virtual element + // Extract the "children" and find the single element node + var childNodes = ko.utils.arrayFilter(ko.virtualElements.childNodes(element), function(node) { return node.nodeType == 1;}); + if (childNodes.length !== 1) { + throw Error("Repeat binding requires a single element to repeat"); + } + ko.virtualElements.emptyNode(element); + + // The placeholder is the closing comment normally, or the opening comment if reversed + placeholder = repeatReversed ? element : element.nextSibling; + // The element to repeat is the contained element + element = childNodes[0]; + } else { // regular element + // First clean the element node and remove node's binding + var origBindString = element.getAttribute('data-bind'); + ko.cleanNode(element); + element.removeAttribute('data-bind'); + + // Original element is no longer needed: delete it and create a placeholder comment + placeholder = element.ownerDocument.createComment('ko_repeatplaceholder ' + origBindString); + parent.replaceChild(placeholder, element); + } + + // extract and remove a data-repeat-bind attribute, if present + if (!repeatBind) { + repeatBind = element.getAttribute('data-repeat-bind'); + if (repeatBind) { + element.removeAttribute('data-repeat-bind'); + } + } + + // Make a copy of the element node to be copied for each repetition + var cleanNode = element.cloneNode(true); + if (typeof repeatBind == "string") { + cleanNode.setAttribute('data-bind', repeatBind); + repeatBind = null; + } + + // Set up persistent data + var lastRepeatCount = 0, + notificationObservable = ko.observable(), + repeatArray, arrayObservable; + + if (repeatInit) { + repeatInit(parent); + } + + var subscribable = ko.computed(function() { + function makeArrayItemAccessor(index) { + var f = function(newValue) { + var item = repeatArray[index]; + // Reading the value of the item + if (!arguments.length) { + notificationObservable(); // for dependency tracking + return ko_unwrap(item); + } + // Writing a value to the item + if (ko.isObservable(item)) { + item(newValue); + } else if (arrayObservable && arrayObservable.splice) { + arrayObservable.splice(index, 1, newValue); + } else { + repeatArray[index] = newValue; + } + return this; + }; + // Pretend that our accessor function is an observable + f[koProtoName] = ko.observable; + return f; + } + + function makeBinding(item, index, context) { + return repeatArray + ? function() { return repeatBind.call(bindingContext.$data, item, index, context); } + : function() { return repeatBind.call(bindingContext.$data, index, context); } + } + + // Read and set up variable options--these options can change and will update the binding + var paramObservable = valueAccessor(), repeatParam = ko_unwrap(paramObservable), repeatCount = 0; + if (repeatParam && typeof repeatParam == 'object') { + if ('length' in repeatParam) { + repeatArray = repeatParam; + repeatCount = repeatArray.length; + } else { + if ('foreach' in repeatParam) { + repeatArray = ko_unwrap(paramObservable = repeatParam.foreach); + if (repeatArray && typeof repeatArray == 'object' && 'length' in repeatArray) { + repeatCount = repeatArray.length || 0; + } else { + repeatCount = repeatArray || 0; + repeatArray = null; + } + } + // If a count value is provided (>0), always output that number of items + if ('count' in repeatParam) + repeatCount = ko_unwrap(repeatParam.count) || repeatCount; + // If a limit is provided, don't output more than the limit + if ('limit' in repeatParam) + repeatCount = Math.min(repeatCount, ko_unwrap(repeatParam.limit)) || repeatCount; + } + arrayObservable = repeatArray && ko.isObservable(paramObservable) ? paramObservable : null; + } else { + repeatCount = repeatParam || 0; + } + + // Remove nodes from end if array is shorter + for (; lastRepeatCount > repeatCount; lastRepeatCount-=repeatStep) { + ko.removeNode(repeatReversed ? placeholder.nextSibling : placeholder.previousSibling); + } + + // Notify existing nodes of change + notificationObservable.notifySubscribers(); + + // Add nodes to end if array is longer (also initially populates nodes) + for (; lastRepeatCount < repeatCount; lastRepeatCount+=repeatStep) { + // Clone node and add to document + var newNode = cleanNode.cloneNode(true); + parent.insertBefore(newNode, repeatReversed ? placeholder.nextSibling : placeholder); + newNode.setAttribute('data-repeat-index', lastRepeatCount); + + // Apply bindings to inserted node + if (repeatArray && repeatData == '$data') { + var newContext = bindingContext.createChildContext(makeArrayItemAccessor(lastRepeatCount)); + } else { + var newContext = bindingContext.extend(); + if (repeatArray) + newContext[repeatData] = makeArrayItemAccessor(lastRepeatCount); + } + newContext[repeatIndex] = lastRepeatCount; + if (repeatBind) { + var result = ko.applyBindingsToNode(newNode, makeBinding(newContext[repeatData], lastRepeatCount, newContext), newContext, true), + shouldBindDescendants = result && result.shouldBindDescendants; + } + if (!repeatBind || (result && shouldBindDescendants !== false)) { + ko.applyBindings(newContext, newNode); + } + } + if (repeatUpdate) { + repeatUpdate(parent); + } + }, null, {disposeWhenNodeIsRemoved: placeholder}); + + return { controlsDescendantBindings: true, subscribable: subscribable }; + } +}; +}); \ No newline at end of file diff --git a/lib/web/ko/ko.js b/lib/web/knockoutjs/knockout.js similarity index 100% rename from lib/web/ko/ko.js rename to lib/web/knockoutjs/knockout.js diff --git a/lib/web/mage/adminhtml/backup.js b/lib/web/mage/adminhtml/backup.js index f8dde89519d821795d3c530420f833a066c27faf..fece6796d291d96e5a4b2aa0247effbb1d117ee5 100644 --- a/lib/web/mage/adminhtml/backup.js +++ b/lib/web/mage/adminhtml/backup.js @@ -4,6 +4,7 @@ */ define([ "jquery", + "Magento_Ui/js/modal/modal", "mage/mage", "prototype" ], function(jQuery){ @@ -97,7 +98,6 @@ define([ }, submitBackup: function () { - this.hidePopups(); var data = { 'type': this.type, 'maintenance_mode': $('backup_maintenance_mode').checked ? 1 : 0, @@ -105,6 +105,8 @@ define([ 'exclude_media': $('exclude_media').checked ? 1 : 0 }; + this.modal.modal('closeModal'); + new Ajax.Request(this.backupUrl, { onSuccess: function(transport) { this.processResponse(transport, 'backup-options'); @@ -160,17 +162,78 @@ define([ data['type'] = this.type; return data; }, - + backupConfig: { + 'backup-warning': { + title: jQuery.mage.__('Backup options'), + content: function () { + return jQuery('#backup-options .popup-content').html(); + }, + actionOk: function () { + this.modal.find('#backup-form').validation({ + submitHandler: jQuery.proxy(this.submitBackup, this) + }); + this.modal.find('#backup-form').submit(); + }, + opened: function () { + this.modal.find(':hidden').show(); + } + }, + 'rollback-warning': { + title: jQuery.mage.__('Warning'), + content: function () { + return jQuery('#rollback-warning .message.message-warning').html(); + }, + actionOk: function () { + this.modal.modal('closeModal'); + this.requestPassword(); + } + }, + 'rollback-request-password': { + title: jQuery.mage.__('Backup options'), + content: function () { + return jQuery('#rollback-request-password .popup-content').html(); + }, + actionOk: function () { + this.modal.find('#rollback-request-password').validation({ + submitHandler: jQuery.proxy(this.submitRollback, this) + }); + this.modal.find('#rollback-request-password').submit(); + }, + opened: function () { + this.modal.find('*:hidden').show(); + } + } + }, showPopup: function(divId) { - $(divId).show().setStyle({ - 'marginTop': -$(divId).getDimensions().height / 2 + 'px' + var self = this; + + this.modal = jQuery('<div/>').html(this.backupConfig[divId].content()).modal({ + modalClass: 'magento', + title: this.backupConfig[divId].title, + type: 'slide', + closed: function(e, modal){ + modal.modal.remove(); + }, + opened: function () { + if (self.backupConfig[divId].opened) { + self.backupConfig[divId].opened.call(self); + } + }, + buttons: [{ + text: jQuery.mage.__('Cancel'), + 'class': 'action cancel', + click: function () { + this.closeModal(); + } + }, { + text: jQuery.mage.__('Ok'), + 'class': 'action primary', + click: function () { + self.backupConfig[divId].actionOk.call(self); + } + }] }); - var mask = $('popup-window-mask'); - if (mask) { - $('popup-window-mask').setStyle({ - height: $('html-body').getHeight() + 'px' - }).show(); - } + this.modal.modal('openModal'); }, hidePopups: function() { diff --git a/lib/web/mage/adminhtml/browser.js b/lib/web/mage/adminhtml/browser.js index 2abf3a9b02237b65205001dc9feecaee13fa3e7e..51629ce2e7cfc6f258e5740bcfc197d9bb7773a0 100644 --- a/lib/web/mage/adminhtml/browser.js +++ b/lib/web/mage/adminhtml/browser.js @@ -6,10 +6,14 @@ define([ "jquery", "tinymce", + "Magento_Ui/js/modal/prompt", + "Magento_Ui/js/modal/confirm", + "Magento_Ui/js/modal/alert", + "Magento_Ui/js/modal/modal", "jquery/ui", "jquery/jstree/jquery.jstree", "mage/mage" -], function($, tinyMCE){ +], function($, tinyMCEm, prompt, confirm, alert){ MediabrowserUtility = { windowId: 'modal_dialog_message', @@ -27,44 +31,32 @@ define([ }, openDialog: function(url, width, height, title, options) { var windowId = this.windowId, - content = '<div class="popup-window magento_message" id="' + windowId + '"></div>'; - $(content).dialog($.extend({ - autoOpen: true, - title: title || 'Insert File...', - modal: true, - resizable: false, - width: width || 1000, - height: height || 600, - position: { - my: 'left top', - at: 'center top', - of: 'body' - }, - open: function() { - $(this).closest('.ui-dialog').addClass('ui-dialog-active'); + content = '<div class="popup-window magento_message" "id="' + windowId + '"></div>', + self = this; - var topMargin = $(this).closest('.ui-dialog').children('.ui-dialog-titlebar').outerHeight() + 35; - $(this).closest('.ui-dialog').css('margin-top', topMargin); + if (this.modal) { + this.modal.html($(content).html()); + } else { + this.modal = $(content).modal({ + title: title || 'Insert File...', + modalClass: 'magento', + type: 'slide', + buttons: [] + }); + } + this.modal.modal('openModal'); + $.ajax({ + url: url, + type: 'get', + context: $(this), + showLoader: true - $.ajax({ - url: url, - type: 'get', - context: $(this), - showLoader: true - }).done(function(data) { - this.html(data).trigger('contentUpdated'); - }); - }, - close: function(event, ui) { - $(this).closest('.ui-dialog').removeClass('ui-dialog-active'); - $(this).dialog('destroy'); - $('#' + windowId).remove(); - } - }, options)); + }).done(function(data) { + self.modal.html(data).trigger('contentUpdated'); + }); }, - closeDialog: function(win) { - win = win || window; - win.jQuery('#' + this.windowId).dialog('close'); + closeDialog: function() { + this.modal.modal('closeModal'); } }; @@ -256,71 +248,95 @@ define([ }, newFolder: function() { - var folderName = prompt(this.options.newFolderPrompt, ''); - if (!folderName) { - return false; - } - return $.ajax({ - url: this.options.newFolderUrl, - dataType: 'json', - data: { - name: folderName, - node: this.activeNode.id, - store: this.options.storeId, - form_key: FORM_KEY - }, - context: this.element, - showLoader: true - }).done($.proxy(function(data) { - if (data.error) { - window.alert(data.message); - } else { - this.tree.jstree('refresh', this.element.find('[data-id="' + this.activeNode.id + '"]')); + var self = this; + + prompt({ + title: this.options.newFolderPrompt, + actions: { + confirm: function (folderName) { + return $.ajax({ + url: self.options.newFolderUrl, + dataType: 'json', + data: { + name: folderName, + node: self.activeNode.id, + store: self.options.storeId, + form_key: FORM_KEY + }, + context: self.element, + showLoader: true + }).done($.proxy(function(data) { + if (data.error) { + alert({ + content: data.message + }); + } else { + self.tree.jstree('refresh', self.element.find('[data-id="' + self.activeNode.id + '"]')); + } + }, this)); + } } - }, this)); + }); }, deleteFolder: function() { - if (!confirm(this.options.deleteFolderConfirmationMessage)) { - return false; - } + var self = this; - return $.ajax({ - url: this.options.deleteFolderUrl, - dataType: 'json', - data: { - node: this.activeNode.id, - store: this.options.storeId, - form_key: FORM_KEY - }, - context: this.element, - showLoader: true - }).done($.proxy(function(data) { - this.tree.jstree('refresh', this.activeNode.id); - }, this)); + confirm({ + content: this.options.deleteFolderConfirmationMessage, + actions: { + confirm: function () { + return $.ajax({ + url: self.options.deleteFolderUrl, + dataType: 'json', + data: { + node: self.activeNode.id, + store: self.options.storeId, + form_key: FORM_KEY + }, + context: self.element, + showLoader: true + }).done($.proxy(function(data) { + self.tree.jstree('refresh', self.activeNode.id); + }, this)); + }, + cancel: function () { + return false; + } + } + }); }, deleteFiles: function() { - if (!confirm(this.options.deleteFileConfirmationMessage)) { - return false; - } - var selectedFiles = this.element.find('[data-row=file].selected'); - var ids = selectedFiles.map(function(index, file) { - return $(this).attr('id'); - }).toArray(); + var self = this; - return $.ajax({ - url: this.options.deleteFilesUrl, - data: { - files: ids, - store: this.options.storeId, - form_key: FORM_KEY - }, - context: this.element, - showLoader: true - }).done($.proxy(function(data) { - this.reload(); - }, this)); + confirm({ + content: this.options.deleteFileConfirmationMessage, + actions: { + confirm: function () { + var selectedFiles = self.element.find('[data-row=file].selected'); + var ids = selectedFiles.map(function(index, file) { + return $(this).attr('id'); + }).toArray(); + + return $.ajax({ + url: self.options.deleteFilesUrl, + data: { + files: ids, + store: self.options.storeId, + form_key: FORM_KEY + }, + context: self.element, + showLoader: true + }).done($.proxy(function(data) { + self.reload(); + }, this)); + }, + cancel: function () { + return false; + } + } + }); }, drawBreadcrumbs: function(data) { diff --git a/lib/web/mage/adminhtml/events.js b/lib/web/mage/adminhtml/events.js index c342714812d55b49676de1ce46845c84b81fe3ff..d64f09f2e97f3433c4e5b234ef6c5112c7a65b57 100644 --- a/lib/web/mage/adminhtml/events.js +++ b/lib/web/mage/adminhtml/events.js @@ -3,8 +3,9 @@ * See COPYING.txt for license details. */ define([ + 'Magento_Ui/js/modal/alert', 'prototype' -], function(){ +], function(alert){ // from http://www.someelement.com/2007/03/eventpublisher-custom-events-la-pubsub.html varienEvents = Class.create(); @@ -105,10 +106,14 @@ define([ } catch (e) { if (this.id){ - alert("error: error in " + this.id + ".fireEvent():\n\nevent name: " + eventName + "\n\nerror message: " + e.message); + alert({ + content: "error: error in " + this.id + ".fireEvent():\n\nevent name: " + eventName + "\n\nerror message: " + e.message + }); } else { - alert("error: error in [unknown object].fireEvent():\n\nevent name: " + eventName + "\n\nerror message: " + e.message); + alert({ + content: "error: error in [unknown object].fireEvent():\n\nevent name: " + eventName + "\n\nerror message: " + e.message + }); } } } diff --git a/lib/web/mage/adminhtml/globals.js b/lib/web/mage/adminhtml/globals.js index de0e06295e05ba3e8f2f4ae7710f9e84067ba95c..1933b73e0c7c44ea74a80c49a4becf0a2b0a2340 100644 --- a/lib/web/mage/adminhtml/globals.js +++ b/lib/web/mage/adminhtml/globals.js @@ -2,7 +2,9 @@ * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ -define([], function () { +define([ + 'Magento_Ui/js/modal/confirm' +], function (confirm) { 'use strict'; /** @@ -20,10 +22,23 @@ define([], function () { * @returns {boolean} */ window.deleteConfirm = function (message, url) { - if (confirm(message)) { - setLocation(url); - } + confirm({ + content: message, + actions: { + confirm: function () { + setLocation(url); + } + } + }); return false; }; + + /** + * Helper for onclick action. + * @param {String} message + * @param {String} url + * @returns {boolean} + */ + window.confirmSetLocation = window.deleteConfirm; }); diff --git a/lib/web/mage/adminhtml/grid.js b/lib/web/mage/adminhtml/grid.js index 684f8358df001c09c64c67d5b6565d3d580f7de7..44d61e001aa0a5a2f890ff255602f14771586e55 100644 --- a/lib/web/mage/adminhtml/grid.js +++ b/lib/web/mage/adminhtml/grid.js @@ -7,11 +7,13 @@ define([ 'jquery', 'mage/template', + 'Magento_Ui/js/modal/alert', + 'Magento_Ui/js/modal/confirm', 'mage/mage', 'prototype', 'mage/adminhtml/form', 'mage/adminhtml/events' -], function (jQuery, mageTemplate) { +], function (jQuery, mageTemplate, alert, confirm) { window.varienGrid = new Class.create(); @@ -158,7 +160,9 @@ varienGrid.prototype = { if (transport.responseText.isJSON()) { var response = transport.responseText.evalJSON() if (response.error) { - alert(response.message); + alert({ + content: response.message + }); } if (response.ajaxExpired && response.ajaxRedirect) { setLocation(response.ajaxRedirect); @@ -641,10 +645,15 @@ varienGridMassaction.prototype = { } }, apply: function() { + var self = this; + if(varienStringArray.count(this.checkedString) == 0) { - alert(this.errorText); - return; - } + alert({ + content: this.errorText + }); + + return; + } var item = this.getSelectedItem(); if(!item) { @@ -653,12 +662,19 @@ varienGridMassaction.prototype = { } this.currentItem = item; var fieldName = (item.field ? item.field : this.formFieldName); - var fieldsHtml = ''; - if(this.currentItem.confirm && !window.confirm(this.currentItem.confirm)) { - return; + if (this.currentItem.confirm) { + confirm({ + content: this.currentItem.confirm, + actions: { + confirm: this.onConfirm.bind(this, fieldName, item) + } + }); + } else { + this.onConfirm(fieldName, item); } - + }, + onConfirm: function(fieldName, item) { this.formHiddens.update(''); new Insertion.Bottom(this.formHiddens, this.fieldTemplate({ name: fieldName, @@ -669,17 +685,17 @@ varienGridMassaction.prototype = { value: fieldName })); - if(!jQuery(this.form).valid()) { + if (!jQuery(this.form).valid()) { return; } - if(this.useAjax && item.url) { + if (this.useAjax && item.url) { new Ajax.Request(item.url, { 'method': 'post', 'parameters': this.form.serialize(true), 'onComplete': this.onMassactionComplete.bind(this) }); - } else if(item.url) { + } else if (item.url) { this.form.action = item.url; this.form.submit(); } diff --git a/lib/web/mage/adminhtml/wysiwyg/widget.js b/lib/web/mage/adminhtml/wysiwyg/widget.js index 354e7e4381d1d4f89540566d8cb81b0eef3825d9..202124d9a29a8928f237a016ccf64a0e5ed8ad0c 100644 --- a/lib/web/mage/adminhtml/wysiwyg/widget.js +++ b/lib/web/mage/adminhtml/wysiwyg/widget.js @@ -6,13 +6,15 @@ define([ "jquery", "tinymce", + 'Magento_Ui/js/modal/alert', "jquery/ui", "mage/translate", "mage/mage", "mage/validation", "mage/adminhtml/events", - "prototype" -], function(jQuery, tinyMCE){ + "prototype", + 'Magento_Ui/js/modal/modal' +], function(jQuery, tinyMCE, alert){ var widgetTools = { getDivHtml: function(id, html) { @@ -51,39 +53,24 @@ define([ return } var oThis = this; - this.dialogWindow = jQuery('<div/>').dialog({ - autoOpen: false, - title: jQuery.mage.__('Insert Widget...'), - modal: true, - resizable: false, - width: '75%', - dialogClass: 'popup-window', - position: { - my: 'left top', - at: 'center top', - of: 'body' - }, - open: function () { + this.dialogWindow = jQuery('<div/>').modal({ + title: jQuery.mage.__('Insert Widget...'), + type: 'slide', + buttons: [], + opened: function () { var dialog = jQuery(this).addClass('loading magento_message') new Ajax.Updater($(this), widgetUrl, {evalScripts: true, onComplete: function () { dialog.removeClass('loading'); } }); - jQuery(this).closest('.ui-dialog').addClass('ui-dialog-active'); - - var topMargin = jQuery(this).closest('.ui-dialog').children('.ui-dialog-titlebar').outerHeight() + 35; - jQuery(this).closest('.ui-dialog').css('margin-top', topMargin); - - jQuery(this).addClass('admin__scope-old'); // ToDo UI: remove with old styles removal }, - close: function(event, ui) { - jQuery(this).closest('.ui-dialog').removeClass('ui-dialog-active'); - jQuery(this).dialog('destroy').remove(); + closed: function (e, modal) { + modal.modal.remove(); oThis.dialogOpened = false; } }); this.dialogOpened = true; - this.dialogWindow.dialog('open'); + this.dialogWindow.modal('openModal'); } }; @@ -208,7 +195,9 @@ define([ this.switchOptionsContainer(optionsContainerId); } } catch(e) { - alert(e.message); + alert({ + content: e.message + }); } }.bind(this) } @@ -257,7 +246,7 @@ define([ onComplete: function(transport) { try { widgetTools.onAjaxSuccess(transport); - widgetTools.dialogWindow.dialog('close'); + widgetTools.dialogWindow.modal('closeModal'); if (typeof(tinyMCE) != "undefined" && tinyMCE.activeEditor) { tinyMCE.activeEditor.focus(); @@ -268,7 +257,9 @@ define([ this.updateContent(transport.responseText); } catch(e) { - alert(e.message); + alert({ + content: e.message + }); } }.bind(this) }); @@ -369,52 +360,34 @@ define([ this.dialogContent = widgetTools.getDivHtml(responseContainerId, transport.responseText); this.openDialogWindow(this.dialogContent); } catch(e) { - alert(e.message); + alert({ + content: e.message + }); } }.bind(this) } ); }, - openDialogWindow: function(content) { - this.dialogWindow = jQuery('<div/>').dialog({ - autoOpen: false, - title: this.config.buttons.open, - modal: true, - resizable: false, - width: '75%', - dialogClass: 'popup-window', - position: { - my: 'left top', - at: 'center top', - of: 'body' - }, - open: function () { - jQuery(this).closest('.ui-dialog').addClass('ui-dialog-active'); + openDialogWindow: function (content) { + this.dialogWindow = jQuery('<div/>').modal({ + title: this.config.buttons.open, + type: 'slide', + buttons: [], + opened: function () { jQuery(this).addClass('magento_message'); - - var topMargin = jQuery(this).closest('.ui-dialog').children('.ui-dialog-titlebar').outerHeight() - 30; - jQuery(this).closest('.ui-dialog').css('margin-top', topMargin); - - jQuery(this).addClass('admin__scope-old'); // ToDo UI: remove with old styles removal }, - close: function(event, ui) { - jQuery(this).closest('.ui-dialog').removeClass('ui-dialog-active'); - jQuery(this).dialog('destroy').remove(); + closed: function (e, modal) { + modal.modal.remove(); + this.dialogWindow = null; } }); - this.dialogWindow.dialog('open').append(content); + this.dialogWindow.modal('openModal').append(content); }, - closeDialogWindow: function(dialogWindow) { - if (!dialogWindow) { - dialogWindow = this.dialogWindow; - } - if (dialogWindow) { - this.dialogWindow.dialog('destroy').remove(); - } - this.dialogWindow = null; + closeDialogWindow: function () { + this.dialogWindow.modal('closeModal').remove(); }, getElementValue: function(value) { diff --git a/lib/web/mage/backend/editablemultiselect.js b/lib/web/mage/backend/editablemultiselect.js index 6ae8d935ddebc29cc2566c1f40a109eabe997856..ab4679bbe165225c7b7f18b67c25f452812de9ce 100644 --- a/lib/web/mage/backend/editablemultiselect.js +++ b/lib/web/mage/backend/editablemultiselect.js @@ -4,9 +4,11 @@ */ define([ "jquery", + 'Magento_Ui/js/modal/alert', + 'Magento_Ui/js/modal/confirm', "jquery/editableMultiselect/js/jquery.editable", "jquery/editableMultiselect/js/jquery.multiselect" -], function($){ +], function($, alert, confirm){ /** @@ -162,7 +164,9 @@ define([ $(this).html(result[entityValueName].escapeHTML()); } } else { - alert(result.error_message); + alert({ + content: result.error_message + }); } } }); @@ -223,7 +227,9 @@ define([ options.mselectInputClass + ''; sectionBlock.find(inputSelector).trigger('blur'); } else { - alert(result.error_message); + alert({ + content: result.error_message + }); } } }; @@ -236,33 +242,43 @@ define([ * @param options */ EditableMultiselect.prototype.deleteEntity = function(options) { - if (!confirm(this.deleteConfirmMessage) || !options.delete_button) { - return; - } - // Button that has been clicked - var deleteButton = $(options.delete_button), - index = deleteButton.parent().index(), - select = deleteButton.closest('.mselect-list').prev(), - entityId = select.find('option').eq(index).val(), - entityInfo = {}; - entityInfo[this.entityIdName] = entityId; - var postData = $.extend(entityInfo, this.submitData); + var self = this; - var ajaxOptions = { - type: 'POST', - data: postData, - dataType: 'json', - url: this.deleteUrl, - success: function(result, status) { - if (result.success) { - deleteButton.parent().remove(); - select.find('option').eq(index).remove(); - } else { - alert(result.error_message); + if (options.delete_button) { + confirm({ + content: this.deleteConfirmMessage, + actions: { + confirm: function() { + // Button that has been clicked + var deleteButton = $(options.delete_button), + index = deleteButton.parent().index(), + select = deleteButton.closest('.mselect-list').prev(), + entityId = select.find('option').eq(index).val(), + entityInfo = {}; + entityInfo[self.entityIdName] = entityId; + var postData = $.extend(entityInfo, self.submitData); + + var ajaxOptions = { + type: 'POST', + data: postData, + dataType: 'json', + url: self.deleteUrl, + success: function(result, status) { + if (result.success) { + deleteButton.parent().remove(); + select.find('option').eq(index).remove(); + } else { + alert({ + content: result.error_message + }); + } + } + }; + $.ajax(ajaxOptions); + } } - } - }; - $.ajax(ajaxOptions); + }); + } }; }; }); \ No newline at end of file diff --git a/lib/web/mage/backend/suggest.js b/lib/web/mage/backend/suggest.js index f4efd12693997985cdc08232778491db37a74848..cc9184d33dd62a81c0a31f0071eae3fbb9966521 100644 --- a/lib/web/mage/backend/suggest.js +++ b/lib/web/mage/backend/suggest.js @@ -235,6 +235,9 @@ } break; case keyCode.ESCAPE: + if (this.isDropdownShown()) { + event.stopPropagation(); + } this.close(event); this._blurItem(); break; @@ -445,6 +448,7 @@ */ open: function (e) { if (!this.isDropdownShown()) { + this.element.addClass('_suggest-dropdown-open'); this.dropdown.show(); this._trigger('open', e); } @@ -459,6 +463,7 @@ this._renderedContext = null; if (this.dropdown.length) { + this.element.removeClass('_suggest-dropdown-open'); this.dropdown.hide().empty(); } diff --git a/lib/web/mage/backend/validation.js b/lib/web/mage/backend/validation.js index 122a8159f5863a611742e59c50eeb7a3184ae18b..58f14f8cd46a052f391e60edf71759efeb85bfe2 100644 --- a/lib/web/mage/backend/validation.js +++ b/lib/web/mage/backend/validation.js @@ -9,6 +9,7 @@ define([ "jquery", "underscore", + 'Magento_Ui/js/modal/alert', "jquery/ui", "jquery/validate", "mage/translate", @@ -17,7 +18,7 @@ } else { factory(jQuery); } -}(function ($, _) { +}(function ($, _, alert) { "use strict"; $.extend(true, $.validator.prototype, { @@ -247,8 +248,10 @@ newFileContainer = elmParent.find('.new-file'); if (!alertAlreadyDisplayed && (newFileContainer.empty() || newFileContainer.is(':visible'))) { alertAlreadyDisplayed = true; - alert($.mage.__('There are files that were selected but not uploaded yet. ' + - 'Please upload or remove them first')); + alert({ + content: $.mage.__('There are files that were selected but not uploaded yet. ' + + 'Please upload or remove them first') + }); } return false; } diff --git a/lib/web/mage/cookies.js b/lib/web/mage/cookies.js index d30b49924a22cf95d230df0b3920e3a60ff45bc1..d4b98a23e641b28023d4eba124c4f0369f86fe09 100644 --- a/lib/web/mage/cookies.js +++ b/lib/web/mage/cookies.js @@ -44,7 +44,7 @@ * @return {Date|null} Calculated cookie expiration date or null if no lifetime provided. * @private */ - function lifetimeToExpires(options) { + function lifetimeToExpires(options, defaults) { var expires, lifetime; @@ -52,6 +52,7 @@ if (lifetime && lifetime > 0) { expires = options.expires || new Date(); + return new Date(expires.getTime() + lifetime * 1000); } @@ -71,7 +72,7 @@ secure; options = $.extend({}, this.defaults, options || {}); - expires = lifetimeToExpires(options) || options.expires; + expires = lifetimeToExpires(options, this.defaults) || options.expires; path = options.path; domain = options.domain; secure = options.secure; diff --git a/lib/web/mage/gallery/gallery.html b/lib/web/mage/gallery/gallery.html index 6a9a3cfbe3c3c7572c4eb0e84ea420869d386f71..34d26c812dae49418a80d22347139dedce263614 100644 --- a/lib/web/mage/gallery/gallery.html +++ b/lib/web/mage/gallery/gallery.html @@ -4,28 +4,38 @@ * See COPYING.txt for license details. */ --> -<div class="fotorama-item" data-gallery-role="gallery"> +<div class="fotorama-item" data-gallery-role="gallery" tabindex="0"> + <div data-gallery-role="fotorama__focusable-start" tabindex="0"></div> <div class="fotorama__wrap fotorama__wrap--css3 fotorama__wrap--slide fotorama__wrap--toggle-arrows"> <div class="fotorama__stage"> <div class="fotorama__arr fotorama__arr--prev" tabindex="0" role="button" aria-label="Previos"> - <div class="fotorama__arr__arr"></div> + <div class="fotorama__arr__arr" data-gallery-role="arrow"></div> </div> <div class="fotorama__stage__shaft" tabindex="0" data-gallery-role="stage-shaft"> </div> <div class="fotorama__arr fotorama__arr--next fotorama__arr--disabled" tabindex="-1" role="button" aria-label="Next"> - <div class="fotorama__arr__arr"></div> + <div class="fotorama__arr__arr" data-gallery-role="arrow"></div> </div> <div class="fotorama__video-close"></div> + <div class="fotorama__zoom-in"></div> + <div class="fotorama__zoom-out"></div> </div> <div class="fotorama__nav-wrap" data-gallery-role="nav-wrap"> <div class="fotorama__nav fotorama__nav--thumbs"> - <div class="fotorama__fullscreen-icon" tabindex="0" role="button"></div> + <div class="fotorama__fullscreen-icon" data-gallery-role="fotorama__fullscreen-icon" tabindex="0" role="button"></div> + <div class="fotorama__thumb__arr--left" tabindex="0" role="button" aria-label="<%= previous %>"> + <div class="fotorama__thumb__arr" data-gallery-role="arrow"></div> + </div> <div class="fotorama__nav__shaft"> <div class="fotorama__thumb-border"></div> </div> + <div class="fotorama__thumb__arr--right" tabindex="0" role="button" aria-label="<%= next %>"> + <div class="fotorama__thumb__arr" data-gallery-role="arrow"></div> + </div> </div> </div> </div> + <div data-gallery-role="fotorama__focusable-end" tabindex="0"></div> </div> -<div class="magnifier-preview" id="preview" data-gallery-role="magnifier"></div> +<div class="magnifier-preview" data-gallery-role="magnifier" id="preview"></div> diff --git a/lib/web/mage/gallery/gallery.js b/lib/web/mage/gallery/gallery.js index 9f81daba85bccefd2cf4cf7c71d818d88ad06787..245f08f824bd9cb0ab063778b0b328e1d96a59a2 100644 --- a/lib/web/mage/gallery/gallery.js +++ b/lib/web/mage/gallery/gallery.js @@ -7,11 +7,37 @@ define([ 'fotorama/fotorama', 'underscore', 'matchMedia', + 'mage/template', 'text!mage/gallery/gallery.html', - 'Magento_Ui/js/lib/class' -], function ($, fotorama, _, mediaCheck, template, Class) { + 'uiClass', + 'mage/translate' +], function ($, fotorama, _, mediaCheck, template, galleryTpl, Class, $t) { 'use strict'; + /** + * Set main item first in order. + * @param {Array.<Object>} data - Set of gallery items to update. + */ + var pushMainFirst = function(data){ + var mainIndex; + + if(!_.every(data, function(item){ + return _.isObject(item); + })) + { + return data; + } + + mainIndex = _.findIndex(data, function(item){ + return item.isMain; + }); + if(mainIndex > -1){ + data.unshift(data.splice(mainIndex, 1)[0]); + } + + return data; + }; + return Class.extend({ defaults: { @@ -36,6 +62,11 @@ define([ initialize: function (config, element) { this._super(); + _.bindAll(this, + '_focusSwitcher' + ); + + config.options.swipe = true; this.config = config; this.settings = { @@ -47,12 +78,11 @@ define([ activeBreakpoint: {}, fotoramaApi: null, isFullscreen: false, - api: null + api: null, + data: _.clone(pushMainFirst(config.data)) }; - config.options.ratio = config.options.width / config.options.height; config.options.height = null; - config.options.allowfullscreen = false; $.extend(true, this.startConfig, config); @@ -60,14 +90,35 @@ define([ this.initApi(); this.setupBreakpoints(); this.initFullscreenSettings(); + this.settings.$element.on('click', '.fotorama__stage__frame', function () { + $('[data-gallery-role="gallery"]').data('fotorama').requestFullScreen(); + $('[data-gallery-role="fotorama__fullscreen-icon"]').css({ + opacity: 1, + visibility: 'visible', + display: 'block' + }); + }); }, /** * Gallery fullscreen settings. */ initFullscreenSettings: function () { - var settings = this.settings; - settings.$element.on('fotorama:fullscreenenter', function () { + var settings = this.settings, + self = this, + items = []; + + settings.$gallery = this.settings.$element.find('[data-gallery-role="gallery"]'); + settings.$fullscreenIcon = this.settings.$element.find('[data-gallery-role="fotorama__fullscreen-icon"]'); + settings.focusableStart = this.settings.$element.find('[data-gallery-role="fotorama__focusable-start"]'); + settings.focusableEnd = this.settings.$element.find('[data-gallery-role="fotorama__focusable-end"]'); + settings.closeIcon = this.settings.$element.find('[data-gallery-role="fotorama__fullscreen-icon"]'); + settings.fullscreenConfig.swipe = true; + + settings.$gallery.on('fotorama:fullscreenenter', function () { + settings.$gallery.focus(); + settings.focusableStart.bind('focusin', self._focusSwitcher); + settings.focusableEnd.bind('focusin', self._focusSwitcher); settings.api.updateOptions(settings.defaultConfig.options, true); settings.api.updateOptions(settings.fullscreenConfig, true); @@ -77,16 +128,60 @@ define([ settings.isFullscreen = true; }); - settings.$element.on('fotorama:fullscreenexit', function () { + settings.$gallery.on('fotorama:fullscreenexit', function () { settings.api.updateOptions(settings.defaultConfig.options, true); + settings.focusableStart.unbind('focusin', this._focusSwitcher); + settings.focusableEnd.unbind('focusin', this._focusSwitcher); if (!_.isEqual(settings.activeBreakpoint, {})) { settings.api.updateOptions(settings.activeBreakpoint.options, true); } settings.isFullscreen = false; + settings.$fullscreenIcon.hide(); }); }, + /** + * Switcher focus. + */ + _focusSwitcher: function (e) { + var target = $(e.target), + settings = this.settings; + + if (target.is(settings.focusableStart)) { + this._setFocus('start'); + } else if (target.is(settings.focusableEnd)) { + this._setFocus('end'); + } + }, + + /** + * Set focus to element. + * @param {String} position - can be "start" and "end" + * positions. + * If position is "end" - sets focus to first + * focusable element in modal window scope. + * If position is "start" - sets focus to last + * focusable element in modal window scope + * + * @param {String} type - can be "opened" or false + * If type is "opened" - looks to "this.options.focus" + * property and sets focus + */ + _setFocus: function (position) { + var settings = this.settings, + focusableElements, + infelicity; + + if (position === 'end') { + settings.$gallery.find(settings.closeIcon).focus(); + } else if (position === 'start') { + infelicity = 2; //Constant for find last focusable element + focusableElements = settings.$gallery.find(':focusable'); + focusableElements.eq(focusableElements.length - infelicity).focus(); + } + }, + /** * Initializes gallery with configuration options. */ @@ -94,14 +189,17 @@ define([ var breakpoints = {}, settings = this.settings, config = this.config, - mainImage; + tpl = template(galleryTpl, { + next: $t('Next'), + previous: $t('Previous') + }); if (settings.breakpoints) { _.each(_.values(settings.breakpoints), function (breakpoint) { var conditions; _.each(_.pairs(breakpoint.conditions), function (pair) { conditions = conditions ? conditions + ' and (' + pair[0] + ': ' + pair[1] + ')' : - '(' + pair[0] + ': ' + pair[1] + ')'; + '(' + pair[0] + ': ' + pair[1] + ')'; }); breakpoints[conditions] = breakpoint.options; }); @@ -115,21 +213,14 @@ define([ config.arrows = false; } - /** - * Returns index of main image. - */ - mainImage = _.findIndex(config.data, function (obj) { - return obj.isMain === true; - }); - config.click = false; config.breakpoints = null; - config.startindex = mainImage; settings.currentConfig = config; - settings.$element.html(template); - settings.$element = $(settings.$element.children()[0]); - settings.$element.fotorama(config); - settings.fotoramaApi = settings.$element.data('fotorama'); + settings.$element.html(tpl); + settings.$element.removeClass('_block-content-loading'); + settings.$elementF = $(settings.$element.children()[0]); + settings.$elementF.fotorama(config); + settings.fotoramaApi = settings.$elementF.data('fotorama'); $.extend(true, config, this.startConfig); }, @@ -153,7 +244,6 @@ define([ * Is triggered when breakpoint enties. */ entry: function () { - triggeredBreakpoints++; $.extend(true, config, _.clone(startConfig)); settings.api.updateOptions(settings.defaultConfig.options, true); @@ -170,16 +260,13 @@ define([ * Is triggered when breakpoint exits. */ exit: function () { - if (triggeredBreakpoints < 1) { - $.extend(true, config, _.clone(startConfig)); - settings.api.updateOptions(settings.defaultConfig.options, true); - - if (settings.isFullscreen) { - settings.api.updateOptions(settings.fullscreenConfig, true); - } - settings.activeBreakpoint = {}; + $.extend(true, config, _.clone(startConfig)); + settings.api.updateOptions(settings.defaultConfig.options, true); + + if (settings.isFullscreen) { + settings.api.updateOptions(settings.fullscreenConfig, true); } - triggeredBreakpoints--; + settings.activeBreakpoint = {}; } }); }); @@ -203,28 +290,28 @@ define([ * Displays the last image on preview. */ last: function () { - this.fotorama.show('>>'); + settings.fotoramaApi.show('>>'); }, /** * Displays the first image on preview. */ first: function () { - this.fotorama.show('<<'); + settings.fotoramaApi.show('<<'); }, /** * Displays previous element on preview. */ prev: function () { - this.fotorama.show('<'); + settings.fotoramaApi.show('<'); }, /** * Displays next element on preview. */ next: function () { - this.fotorama.show('>'); + settings.fotoramaApi.show('>'); }, /** @@ -237,7 +324,7 @@ define([ if (index > 0) { index -= 1; } - this.fotorama.show(index); + settings.fotoramaApi.show(index); } }, @@ -264,7 +351,7 @@ define([ } $.extend(true, settings.currentConfig.options, configuration); - this.fotorama.setOptions(settings.currentConfig.options); + settings.fotoramaApi.setOptions(settings.currentConfig.options); } }, @@ -274,16 +361,35 @@ define([ */ updateData: function (data) { if (_.isArray(data)) { - this.fotorama.load(data); - $.extend(false, settings.defaultConfig, { - data: data + pushMainFirst(data); + settings.fotoramaApi.load(data); + + $.extend(false, settings, { + data: data, + defaultConfig: data }); $.extend(false, config, { data: data }); } + }, + + /** + * Returns current images list + * + * @returns {Array} + */ + returnCurrentImages: function () { + var images = []; + + _.each(this.fotorama.data, function (item) { + images.push(_.omit(item, '$navThumbFrame', '$navDotFrame', '$stageFrame')); + }); + + return images; } }; + settings.$element.data('gallery', api); settings.api = settings.$element.data('gallery'); settings.$element.trigger('gallery:loaded'); diff --git a/lib/web/mage/gallery/gallery.less b/lib/web/mage/gallery/gallery.less index 9fd58e8b302eff033030a90c49a2b6a9fae546c1..f1a68415517b156a5c45b3b31f379961ae276a62 100644 --- a/lib/web/mage/gallery/gallery.less +++ b/lib/web/mage/gallery/gallery.less @@ -6,8 +6,8 @@ @fotorama-duration-time: 0.3s; @fotorama-arw-size: 95px; @fotorama_close_size: 30px; -@fotorama_fullscreen_button: 32px; @size-fotorama-block: 50px; +@fotorama-thumb-arrow: 30px; @import '../../css/source/lib/_lib.less'; // Global lib @import '../../css/source/_theme.less'; // Theme overrides @@ -20,23 +20,34 @@ transform: translate3d(@x, @y, @z); } +.fotorama-rotate (@deg) { + -webkit-transform: rotate(@deg); + -ms-transform: rotate(@deg); + transform: rotate(@deg); +} + .translateX(@value) { + -webkit-transform: translateX(@value); -ms-transform: translateX(@value); -o-transform: translateX(@value); - -webkit-transform: translateX(@value); transform: translateX(@value); } .translateY(@value) { + -webkit-transform: translateY(@value); -ms-transform: translateY(@value); -o-transform: translateY(@value); - -webkit-transform: translateY(@value); transform: translateY(@value); } -.translate3d(@x, @y, @z) { - -webkit-transform: translate3d(@x, @y, @z); - transform: translate3d(@x, @y, @z); +.fotorama-shadow-gradient(@x, @y) { + background-image: linear-gradient(transparent, rgba(0, 0, 0, 0.2) 25%, rgba(0, 0, 0, 0.3) 75%, transparent), radial-gradient(farthest-side at @x @y, rgba(0, 0, 0, 0.4), transparent); +} + +.fotorama-arrow-gradient(@d){ + background-image: -webkit-linear-gradient(@d, rgba(255, 255, 255, .7), rgba(255, 255, 255, 0)); + background-image: -ms-linear-gradient(@d, rgba(255, 255, 255, .7), rgba(255, 255, 255, 0)); + background-image: linear-gradient(@d, rgba(255, 255, 255, .7), rgba(255, 255, 255, 0)); } .fotorama-inline-block(@va: middle) { @@ -48,6 +59,87 @@ vertical-align: @va; } +.fotorama__zoom-in, +.fotorama__zoom-out { + display: none; +} +.fotorama__fullscreen { + .fotorama__zoom-in, + .fotorama__zoom-out { + position: absolute; + width: 50px; + height: 50px; + display: block; + margin-left: 20px; + z-index: 1000; + } + .fotorama__zoom-out { + top: 51px; + &:extend(.fotorama-sprite); + background-position: 0 (-@size-fotorama-block) !important; + } + + .fotorama__zoom-in { + top: 0; + &:extend(.fotorama-sprite); + background-position: 0 0 !important; + } +} + +.fotorama__zoom-in, +.fotorama__zoom-out { + display: none; +} +.fotorama__fullscreen { + .fotorama__zoom-in, + .fotorama__zoom-out { + position: absolute; + width: 50px; + height: 50px; + display: block; + margin-left: 20px; + cursor: pointer; + } + .fotorama__zoom-out { + top: 51px; + &:extend(.fotorama-sprite); + background-position: 0 (-@size-fotorama-block) !important; + } + + .fotorama__zoom-in { + top: 0; + &:extend(.fotorama-sprite); + background-position: 0 0 !important; + } +} + +.fotorama__zoom-in, +.fotorama__zoom-out { + display: none; +} +.fotorama__fullscreen { + .fotorama__zoom-in, + .fotorama__zoom-out { + position: absolute; + width: 50px; + height: 50px; + display: block; + margin-left: 20px; + cursor: pointer; + } + .fotorama__zoom-out { + top: 51px; + &:extend(.fotorama-sprite); + background-position: 0 (-@size-fotorama-block) !important; + } + + .fotorama__zoom-in { + top: 0; + &:extend(.fotorama-sprite); + background-position: 0 0 !important; + } +} + .fotorama-stretch { bottom: 0; height: 100%; @@ -58,16 +150,6 @@ width: 100%; } -.fotorama-image-reset { - border-radius: 0 !important; - box-shadow: none !important; - max-height: 99999px !important; - max-width: 99999px !important; - min-height: 0 !important; - min-width: 0 !important; - padding: 0 !important; -} - .fotorama-grab-cursor { cursor: move; cursor: -webkit-grab; @@ -114,6 +196,7 @@ height: 100%; position: absolute; width: 100%; + left:0; } .fotorama-transform-disabled { @@ -202,8 +285,7 @@ } .fotorama--fullscreen { - &:extend(.fotorama-image-reset); - background: @color-black; + background: @color-white; bottom: 0 !important; float: none !important; height: 100% !important; @@ -214,9 +296,8 @@ top: 0 !important; width: 100% !important; z-index: @z-index-10 !important; - .fotorama__stage, - .fotorama__nav { - background: @color-black; + .fotorama__wrap { + max-width: 100% !important; } } @@ -357,7 +438,6 @@ &:extend(.fotorama-focus); &:extend(.fotorama-inline-block); &:extend(.fotorama-no-tap); - cursor: pointer; position: relative; } @@ -429,6 +509,7 @@ } .fotorama__thumb { + background-color: @color-gray92; height: 100%; overflow: hidden; position: relative; @@ -583,6 +664,14 @@ &:extend(.fotorama-no-tap); cursor: pointer; position: absolute; +} + +.fotorama__arr { + z-index: @z-index-9; + +} +.fotorama__fullscreen-icon, +.fotorama__video-close { z-index: @z-index-10; } @@ -598,6 +687,9 @@ .fotorama-abs-center(); height: @size-fotorama-block; width: @size-fotorama-block; + .ie9 & { + margin: (-@size-fotorama-block/2) 0 0 (-@size-fotorama-block/2); + } } } @@ -629,10 +721,12 @@ right: 2px; top: 2px; width: @size-fotorama-block; - z-index: 20; + z-index: @z-index-10; + display: none; } .fotorama__fullscreen-icon { + //display: none; &:focus { &:extend(.fotorama-focus); border-radius: 50%; @@ -642,7 +736,8 @@ .fotorama--fullscreen { .fotorama__fullscreen-icon { - background-position: (-@fotorama_fullscreen_button) (-@fotorama_fullscreen_button); + //display: inline-block; + background-position: (-@size-fotorama-block) 0; } } @@ -686,7 +781,7 @@ } .fotorama__wrap--css3 & { - .translate3d(@fotorama-arw-size, -@fotorama-arw-size, 0); + .fotorama-translate3d(@fotorama-arw-size, -@fotorama-arw-size, 0); } .fotorama__wrap--video & { @@ -711,6 +806,60 @@ } } +.fotorama__wrap--toggle-arrows { + &:not(.fotorama__wrap--video) { + .fotorama__video-close { + display: none; + } + } +} + +.fotorama__wrap--toggle-arrows { + &.fotorama__wrap--video { + .fotorama__video-close { + top: 97px; + right: 93px; + opacity: 1; + } + } +} + +.fotorama__wrap--toggle-arrows { + &:not(.fotorama__wrap--video) { + .fotorama__video-close { + display: none; + } + } +} + +.fotorama__wrap--toggle-arrows { + &.fotorama__wrap--video { + .fotorama__video-close { + top: 97px; + right: 93px; + opacity: 1; + } + } +} + +.fotorama__wrap--toggle-arrows { + &:not(.fotorama__wrap--video) { + .fotorama__video-close { + display: none; + } + } +} + +.fotorama__wrap--toggle-arrows { + &.fotorama__wrap--video { + .fotorama__video-close { + top: 97px; + right: 93px; + opacity: 1; + } + } +} + .fotorama__wrap--video { .fotorama__arr, .fotorama__fullscreen-icon { @@ -739,24 +888,24 @@ .fotorama__wrap--css3 { &.fotorama__wrap--no-controls.fotorama__wrap--slide.fotorama__wrap--toggle-arrows { .fotorama__fullscreen-icon:not(:focus) { - .translate3d(@fotorama-arw-size, -@fotorama-arw-size, 0); + .fotorama-translate3d(@fotorama-arw-size, -@fotorama-arw-size, 0); } .fotorama__arr--prev:not(:focus) { - .translate3d(-@fotorama-arw-size * 1.5, 0, 0); + .fotorama-translate3d(-@fotorama-arw-size * 1.5, 0, 0); } .fotorama__arr--next:not(:focus) { - .translate3d(@fotorama-arw-size * 1.5, 0, 0); + .fotorama-translate3d(@fotorama-arw-size * 1.5, 0, 0); } } &.fotorama__wrap--video { .fotorama__fullscreen-icon { - .translate3d(@fotorama-arw-size, -@fotorama-arw-size, 0) !important; + .fotorama-translate3d(@fotorama-arw-size, -@fotorama-arw-size, 0) !important; } .fotorama__arr--prev { - .translate3d(-@fotorama-arw-size * 1.5, 0, 0) !important; + .fotorama-translate3d(-@fotorama-arw-size * 1.5, 0, 0) !important; } .fotorama__arr--next { - .translate3d(@fotorama-arw-size * 1.5, 0, 0) !important; + .fotorama-translate3d(@fotorama-arw-size * 1.5, 0, 0) !important; } } } @@ -777,34 +926,59 @@ &:after { &:extend(.fotorama-gpu); background-repeat: no-repeat; - background-size: 1px 100%, 5px 100%; - bottom: 0; content: ''; display: block; - height: auto; pointer-events: none; position: absolute; text-decoration: none; - top: 0; - width: 10px; z-index: 10; } &:before { - background-image: linear-gradient(transparent, rgba(0, 0, 0, 0.2) 25%, rgba(0, 0, 0, 0.3) 75%, transparent), radial-gradient(farthest-side at 0 50%, rgba(0, 0, 0, 0.4), transparent); - background-position: 0 0, 0 0; left: -10px; - } - &.fotorama__shadows--left:before { - left: 0; + top: -10px; } &:after { - background-image: linear-gradient(transparent, rgba(0, 0, 0, 0.2) 25%, rgba(0, 0, 0, 0.3) 75%, transparent), radial-gradient(farthest-side at 100% 50%, rgba(0, 0, 0, 0.4), transparent); - background-position: 100% 0, 100% 0; right: -10px; + bottom: -10px; } + &.fotorama__shadows--left:before, &.fotorama__shadows--right:after { + top: 0; + bottom: 0; + background-size: 1px 100%, 5px 100%; + height: auto; + width: 10px; + } + &.fotorama__shadows--top:before, + &.fotorama__shadows--bottom:after { + left: 0; + right:0; + background-size: 100% 1px, 100% 5px ; + height:10px; + width:auto; + } + &.fotorama__shadows--left:before { + .fotorama-shadow-gradient(0, 50%); + background-position: 0 0, 0 0; + left: 0; + } + + &.fotorama__shadows--right:after { + .fotorama-shadow-gradient(100%, 50%); + background-position: 100% 0, 100% 0; right: 0; } + &.fotorama__shadows--top:before { + .fotorama-shadow-gradient(50%, 0); + background-position: 0 0, 0 0; + top:0; + + } + &.fotorama__shadows--bottom:after { + .fotorama-shadow-gradient(50%, 100%); + background-position: 0 100%, 0 100%; + bottom:0; + } } .fotorama--fullscreen .fotorama__stage, @@ -835,7 +1009,7 @@ width: 100%; } } - .fotorama_horisontal_ratio { + .fotorama_horizontal_ratio { .fotorama__img { .translateX(-50%); height: 100%; @@ -859,7 +1033,7 @@ overflow: hidden; position: absolute; top: 0; - z-index: @z-index-10; + z-index: @z-index-8; } .magnify-lens { @@ -905,10 +1079,10 @@ text-align: center; .fotorama__img { height: auto; + width: auto; max-height: 100%; max-width: 100%; vertical-align: middle; - width: auto; } } @@ -919,3 +1093,143 @@ .magnify-hidden { display: none; } + +.fotorama__nav-wrap--vertical { + &.fotorama__nav-wrap { + display: inline-block; + position: absolute; + top: 0; + left: 0; + } + + .fotorama__nav__shaft { + width: 100%; + background-color: white; + .fotorama__nav__frame--thumb { + display: block; + padding-bottom: inherit !important; + } + } +} + +.fotorama--fullscreen { + .fotorama__stage__frame { + .fotorama__img { + bottom: 0; + left: 0; + margin: auto; + max-height: inherit; + max-width: inherit; + position: absolute; + right: 0; + top: 0; + } + } +} + +.fotorama__nav-wrap--horizontal { + .fotorama__thumb__arr--left, + .fotorama__thumb__arr--right { + bottom: 0; + position: absolute; + top: 0; + width: @fotorama-thumb-arrow; + z-index: @z-index-10; + cursor: pointer; + .fotorama__thumb__arr { + width: 100%; + .fotorama-abs-center(); + } + } + .fotorama__thumb__arr--left { + .fotorama-arrow-gradient(left); + left: 0; + .fotorama__thumb__arr { + background-position: (-@fotorama-thumb-arrow) (-@fotorama-thumb-arrow); + } + } + .fotorama__thumb__arr--right { + .fotorama-arrow-gradient(right); + right: 0; + .fotorama__thumb__arr { + background-position: (-@fotorama-thumb-arrow*2) (-@fotorama-thumb-arrow); + } + } +} + +.fotorama__nav-wrap--vertical { + .fotorama__thumb__arr--left, + .fotorama__thumb__arr--right { + height: @fotorama-thumb-arrow; + left: 0; + position: absolute; + right: 0; + cursor: pointer; + z-index: @z-index-10; + .fotorama__thumb__arr { + .fotorama-rotate(90deg); + margin: auto; + width: @fotorama-thumb-arrow; + } + } + .fotorama__thumb__arr--left { + .fotorama-arrow-gradient(top); + top: 0; + .fotorama__thumb__arr { + background-position: (-@fotorama-thumb-arrow) (-@fotorama-thumb-arrow); + } + } + .fotorama__thumb__arr--right { + .fotorama-arrow-gradient(bottom); + bottom: 0; + .fotorama__thumb__arr { + background-position: (-@fotorama-thumb-arrow*2) (-@fotorama-thumb-arrow); + } + } +} + +.fotorama__wrap--only-active { + .fotorama__stage, + .fotorama__nav { + max-width: 99999px !important; + } + .fotorama__stage__frame { + visibility: hidden; + } + .fotorama__stage__frame.fotorama__active { + visibility: visible; + } +} + +.fotorama__thumb__arr { + &:extend(.fotorama-sprite); + background-size: 300%; + font-size: 0.001px; + padding-bottom: @fotorama-thumb-arrow; +} + +.magnify-fullimage { + display: none; +} + +.gallery-placeholder { + .loading-mask { + padding: 0 0 50%; + position: absolute; + } + .loader img { + position: absolute; + } +} + +body.fotorama__fullscreen { + overflow-y: hidden; + .magnify-fullimage { + display: inline-block; + } + .fotorama__stage__shaft { + //.fotorama__img { + // display: none; + //} + } +} diff --git a/lib/web/mage/requirejs/mixins.js b/lib/web/mage/requirejs/mixins.js index c3cc36a4adf4a6406a6a2ee1a208f73b47924da8..89baa7933749f89753774a751fc5d64ec471d86f 100644 --- a/lib/web/mage/requirejs/mixins.js +++ b/lib/web/mage/requirejs/mixins.js @@ -89,6 +89,7 @@ define('mixins', [ } return { + /** * Loads specified module along with its' mixins. * diff --git a/lib/web/mage/requirejs/plugin/id-normalizer.js b/lib/web/mage/requirejs/plugin/id-normalizer.js deleted file mode 100644 index b9c44c68e33259d6c9347f0179607fa791ba0400..0000000000000000000000000000000000000000 --- a/lib/web/mage/requirejs/plugin/id-normalizer.js +++ /dev/null @@ -1,28 +0,0 @@ -/** - * Copyright © 2015 Magento. All rights reserved. - * See COPYING.txt for license details. - */ -/*jshint globalstrict: true*/ -/*global define: false*/ -"use strict"; - -/** - * This is simple normalization plugin for RequireJS, which converts Magento modular references to normalized paths. - * E.g. 'Magento_Catalog::js/scripts.js' -> 'Magento_Catalog/js/scripts.js'. - */ -define({ - /** - * Normalize Magento modular ID - */ - normalize: function (name, normalize) { - return name.replace('::', '/'); - }, - - /** - * load() is not needed for this plugin, but is required by RequireJS. - * So it is just proxy over default implementation. - */ - load: function (name, parentRequire, onload, config) { - parentRequire([name], onload); - } -}); diff --git a/lib/web/mage/requirejs/static.js b/lib/web/mage/requirejs/static.js index cb579e80ece6820b87c6defe33ed9b3d3cbd63fb..a2ee644942a036102b8f3bcfbb451cabdee1d183 100644 --- a/lib/web/mage/requirejs/static.js +++ b/lib/web/mage/requirejs/static.js @@ -158,6 +158,7 @@ define('statistician', [ } return { + /** * Stores keys of 'modules' object to localStorage under 'all' namespace. * diff --git a/lib/web/mage/utils/compare.js b/lib/web/mage/utils/compare.js index 38ec53b205d842ba34132c44b5945f700e9db160..2cae7362a2109dc86c5f403b3ea661a8913ef38f 100644 --- a/lib/web/mage/utils/compare.js +++ b/lib/web/mage/utils/compare.js @@ -185,9 +185,11 @@ define([ addChange(ns, name, 'update', current, old); } } + /*eslint-enable max-depth*/ return { + /** * * @returns {Object} diff --git a/lib/web/mage/utils/misc.js b/lib/web/mage/utils/misc.js index 8885679a61c9334ec5435d2f0e49acb0728c7aa2..afbdf70ae4590a7945390c1d775f99e949e898d9 100644 --- a/lib/web/mage/utils/misc.js +++ b/lib/web/mage/utils/misc.js @@ -7,7 +7,15 @@ define([ ], function (_) { 'use strict'; - var map = { + var defaultAttributes, + map; + + defaultAttributes = { + method: 'post', + enctype: 'multipart/form-data' + }; + + map = { 'D': 'DDD', 'dd': 'DD', 'd': 'D', @@ -106,15 +114,21 @@ define([ * @param {Object} options - Options object that consists of * a 'url' and 'data' properties. */ - submit: function (options) { - var form = document.createElement('form'), - data = this.serialize(options.data), + submit: function (options, attrs) { + var form = document.createElement('form'), + data = this.serialize(options.data), + attributes = _.extend({}, defaultAttributes, attrs || {}), field; - data.form_key = FORM_KEY; + if (!attributes.action) { + attributes.action = options.url; + } + + data.form_key = window.FORM_KEY; - form.setAttribute('action', options.url); - form.setAttribute('method', 'post'); + _.each(attributes, function (value, name) { + form.setAttribute(name, value); + }); _.each(data, function (value, name) { field = document.createElement('input'); diff --git a/lib/web/mage/utils/objects.js b/lib/web/mage/utils/objects.js index 92b49508b4908312c4c677235d9278793e1f46a2..4ea214f0dca36c1dabe845a3d82d3426daa13748 100644 --- a/lib/web/mage/utils/objects.js +++ b/lib/web/mage/utils/objects.js @@ -326,8 +326,6 @@ define([ * @param {Number} [maxDepth=7] - Max recursion depth. */ forEachRecursive: function (data, action, maxDepth) { - var prop; - maxDepth = typeof maxDepth === 'number' && !isNaN(maxDepth) ? maxDepth - 1 : 7; if (!_.isFunction(action) || _.isFunction(data) || maxDepth < 0) { diff --git a/lib/web/mage/utils/strings.js b/lib/web/mage/utils/strings.js index 89a9109f99e7a433c38aaf456c8032c65bdcb256..8c6f8d329f6619e7ebd0943c04c4d778780f02cd 100644 --- a/lib/web/mage/utils/strings.js +++ b/lib/web/mage/utils/strings.js @@ -10,6 +10,7 @@ define([ var jsonRe = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/; return { + /** * Attempts to convert string to one of the primitive values, * or to parse it as a valid json object. @@ -95,7 +96,7 @@ define([ return prefix ? prefix + '.' + part : part; }, - /** + /** * Splits incoming string and returns its' part specified by offset. * * @param {String} parts diff --git a/lib/web/mage/utils/template.js b/lib/web/mage/utils/template.js index 85f2aeb5b037420e25f26bd6687bb00c3c3af7fa..9f0e5f656c96367ea7872526904382b2fa7284b9 100644 --- a/lib/web/mage/utils/template.js +++ b/lib/web/mage/utils/template.js @@ -30,6 +30,7 @@ define([ })(); if (hasStringTmpls) { + /*eslint-disable no-unused-vars, no-eval*/ /** * Evaluates template string using ES6 templates. @@ -41,8 +42,10 @@ define([ template = function (tmpl, $) { return eval('`' + tmpl + '`'); }; + /*eslint-enable no-unused-vars, no-eval*/ } else { + /** * Fallback function used when ES6 templates are not supported. * Uses underscore templates renderer. @@ -106,6 +109,7 @@ define([ } return { + /** * Applies provided data to the template. * diff --git a/lib/web/mage/utils/wrapper.js b/lib/web/mage/utils/wrapper.js index 51985cae41531c915ebacce392d37631c036f0e7..4a0253701aee32768d793439b76a458c0db1f9aa 100644 --- a/lib/web/mage/utils/wrapper.js +++ b/lib/web/mage/utils/wrapper.js @@ -43,6 +43,7 @@ define([ var superReg = /\b_super\b/; return { + /** * Wraps target function with a specified wrapper, which will recieve * reference to the original function as a first argument. diff --git a/lib/web/mage/validation/url.js b/lib/web/mage/validation/url.js new file mode 100644 index 0000000000000000000000000000000000000000..5361d9522787650bd470d9941153527b192ff781 --- /dev/null +++ b/lib/web/mage/validation/url.js @@ -0,0 +1,50 @@ +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +define([], function () { + 'use strict'; + + return { + + /** + * Redirects to the url if it is considered safe + * + * @param {String} path - url to be redirected to + */ + redirect: function (path) { + path = this.sanitize(path); + + if (this.validate(path)) { + window.location.href = path; + } + }, + + /** + * Validates url + * + * @param {Object} path - url to be validated + * @returns {Boolean} + */ + validate: function (path) { + var hostname = window.location.hostname; + + if (path.indexOf(hostname) === -1 || + path.indexOf('javascript:') !== -1 || + path.indexOf('vbscript:') !== -1) { + return false; + } + }, + + /** + * Sanitize url, replacing disallowed chars + * + * @param {Sring} path - url to be normalized + * @returns {String} + */ + sanitize: function (path) { + return path.Replace('[^-A-Za-z0-9+&@#/%?=~_|!:,.;\(\)]', ''); + } + }; +}); diff --git a/lib/web/magnifier/magnifier.js b/lib/web/magnifier/magnifier.js index af08fb28fe48673f83efe81f0724e22e56fc5d5c..2a315a2b9bc6f3acae7e01c1a2699419306f9f14 100644 --- a/lib/web/magnifier/magnifier.js +++ b/lib/web/magnifier/magnifier.js @@ -4,6 +4,11 @@ */ ;(function ($) { + var onWheelCallback, + zoomWidthStep = 0, + zoomHeightStep = 0, + isDraggable = false; + $.fn.magnify = function (options) { 'use strict'; @@ -24,8 +29,9 @@ $thumb, that = this, largeWrapper = options.largeWrapper || ".magnifier-preview", - $largeWrapper = $(largeWrapper); - curThumb = null, + $largeWrapper = $(largeWrapper), + zoomShown = false, + curThumb = null, currentOpts = { x: 0, y: 0, @@ -96,7 +102,9 @@ var MagnifyCls = { magnifyHidden: "magnify-hidden", - magnifyOpaque: "magnify-opaque" + magnifyOpaque: "magnify-opaque", + magnifyFull: "magnify-fullimage" + }; @@ -116,41 +124,19 @@ _init($box, options); }; - /** - * Delete events and created block for magnify - * - */ - that.destroy = function () { - console.warn("API not implemented."); - }; - - /** - * @todo - */ - that.zoomIn = function () { - console.warn("API not implemented."); - }; - - /** - * @todo - */ - that.zoomOut = function () { - console.warn("API not implemented."); - }; - - /** - * @todo - */ - that.show = function () { - console.warn("API not implemented."); - }; - - /** - * @todo - */ - that.hide = function () { - console.warn("API not implemented."); - }; + function _toBoolean (str) { + if (typeof str === 'string') { + if (str === 'true') { + return true; + } else if (str === 'false' || '') { + return false; + } else { + console.warn("Wrong type: can't be transformed to Boolean"); + } + } else if (typeof str === 'boolean') { + return str; + } + } function createLens(thumb) { if ($(thumb).siblings('.magnify-lens').length) { @@ -187,7 +173,7 @@ data[idx].lensH = data[idx].lensH > $thumb.height() ? $thumb.height() : data[idx].lensH; lens.css({ width: data[idx].lensW + 1 + 'px', - height: data[idx].lensH + 'px' + height: data[idx].lensH + 0.5 + 'px' }); } @@ -238,7 +224,7 @@ function onThumbEnter() { - if (enabled === true) { + if (_toBoolean(enabled)) { currentOpts = data[curIdx]; curLens = $box.find('.magnify-lens'); @@ -277,7 +263,7 @@ } function move() { - if (enabled === true) { + if (_toBoolean(enabled)) { if (status !== currentOpts.status) { onThumbEnter(); } @@ -301,8 +287,8 @@ pos.l = pos.l <= 0 ? 0 : pos.l; //pos.l = pos.l > 0 ? pos.l : pos.l; curLens.css({ - left: pos.l + paddingX + 'px', - top: pos.t + paddingY + 'px' + left: pos.l + paddingX +'px', + top: pos.t + paddingY + 1.75 + 'px' }); if (lensbg) { @@ -372,7 +358,8 @@ opts.thumb = $thumb; enabled = opts.enabled; - if(enabled) { + if(_toBoolean(enabled)) { + $largeWrapper.show().css('display', ''); $largeWrapper.addClass(MagnifyCls.magnifyHidden); set(opts); @@ -386,13 +373,14 @@ function hoverEvents(thumb) { $(thumb).on('mouseover', function (e) { + if (showWrapper) { if (currentOpts.status !== 0) { onThumbLeave(); } handleEvents(e); - isOverThumb = true; + isOverThumb = inBounds; } }).trigger('mouseover'); } @@ -479,7 +467,7 @@ ? options.onthumbmove : currentOpts.onthumbmove; - largeUrl = gOptions.original || $thumb.attr('src'); + largeUrl = gOptions.full || $thumb.attr('src'); if (thumb.id === '') { idx = thumb.id = 'magnifier-item-' + gId; @@ -562,6 +550,10 @@ getMousePos(); + if (gEventType === 'hover') { + isOverThumb = inBounds; + } + if (inBounds && isOverThumb) { $largeWrapper.removeClass(MagnifyCls.magnifyHidden); move(); @@ -572,6 +564,161 @@ } } + function toggleZoomButtons($image) { + var path = $image.attr("src"), + imgSize; + if (path) { + imgSize = getImageSize(path); + if ((imgSize.rh > $image.parent().height()) || (imgSize.rw > $image.parent().width())) { + $('.fotorama__zoom-in').show(); + $('.fotorama__zoom-out').show(); + zoomShown = true; + } else { + $('.fotorama__zoom-in').hide(); + $('.fotorama__zoom-out').hide(); + zoomShown = false; + } + } else { + $('.fotorama__zoom-in').hide(); + $('.fotorama__zoom-out').hide(); + zoomShown = false; + } + } + + function magnifierFullscreen () { + var isDragActive = false, + startX, + startY, + imagePosX, + imagePosY, + touch, + isTouchEnabled = 'ontouchstart' in document.documentElement; + + $('[data-gallery-role="gallery"]').on('fotorama:fullscreenenter fotorama:showend fotorama:load', function () { + var $preview = $('[data-gallery-role="stage-shaft"] [data-active="true"] img'), + $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] .fotorama__img--full'), + $imageContainer = $preview.parent(), + gallery = $('[data-gallery-role="gallery"]'); + + gallery.on('fotorama:fullscreenexit', function () { + $thumb.css({ + 'top': '', + 'left': '' + }); + }); + + if (gallery.data('fotorama').fullScreen) { + toggleZoomButtons($image); + resetVars($('[data-gallery-role="stage-shaft"] .fotorama__img--full')); + + $('.fotorama__stage__frame .fotorama__img--full').each(function () { + var path = $(this).attr("src"), + imgSize; + if (path) { + imgSize = getImageSize(path); + + if ((imgSize.rh > $(this).parent().height()) || (imgSize.rw > $(this).parent().width())) { + + if (imgSize.rh / imgSize.rw < $(this).parent().height() / $(this).parent().width()) { + $(this).width($(this).parent().width()); + $(this).height('auto'); + } else { + $(this).height($(this).parent().height()); + $(this).width('auto'); + } + + $(this).css({ + 'top': '', + 'left': '' + }); + } + } + }); + } + + $image + .off(isTouchEnabled ? 'touchstart' : 'pointerdown mousedown MSPointerDown') + .on(isTouchEnabled ? 'touchstart' : 'pointerdown mousedown MSPointerDown', function (e) { + if (gallery.data('fotorama').fullScreen && isDraggable) { + e.preventDefault(); + $image.css('cursor', 'move'); + imagePosY = $image.offset().top; + imagePosX = $image.offset().left; + + if (isTouchEnabled) { + touch = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0]; + e.clientX = touch.pageX; + e.clientY = touch.pageY; + } + startX = e.clientX || e.originalEvent.clientX; + startY = e.clientY || e.originalEvent.clientY; + isDragActive = true; + } + }); + + + + $image + .off(isTouchEnabled ? 'touchmove' : 'mousemove pointermove MSPointerMove') + .on(isTouchEnabled ? 'touchmove' : 'mousemove pointermove MSPointerMove', function (e) { + if (gallery.data('fotorama').fullScreen && isDragActive && isDraggable) { + + var top, + left, + startOffset = $image.offset(), + clientX = e.clientX || e.originalEvent.clientX, + clientY = e.clientY || e.originalEvent.clientY; + + + e.preventDefault(); + + if (isTouchEnabled) { + touch = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0]; + e.clientX = touch.pageX; + e.clientY = touch.pageY; + } + top = +imagePosY + (clientY - startY); + left = +imagePosX + (clientX - startX); + + if ($image.height() > $imageContainer.height()) { + + if (($imageContainer.offset().top + $imageContainer.height()) > (top + $image.height())) { + top = $imageContainer.offset().top + $imageContainer.height() - $image.height(); + } else { + top = ($imageContainer.offset().top < top) ? 0 : top; + } + $image.offset({ + 'top': top + }); + } + + if ($image.width() > $imageContainer.width()) { + + if (($imageContainer.offset().left + $imageContainer.width()) > (left + $image.width())) { + left = $imageContainer.offset().left + $imageContainer.width() - $image.width(); + } else { + left = ($imageContainer.offset().left < left) ? $imageContainer.offset().left : left; + } + $image.offset({ + 'left': left + }); + } + } + }); + + $image + .off(isTouchEnabled ? 'touchend' : 'mouseup pointerup MSPointerUp') + .on(isTouchEnabled ? 'touchend' : 'mouseup pointerup MSPointerUp', function (e) { + if (gallery.data('fotorama').fullScreen && isDragActive && isDraggable) { + isDragActive = false; + $image.css('cursor', 'pointer'); + + return false; + } + }); + }); + } + function onScroll() { if (curThumb !== null) { @@ -579,11 +726,260 @@ } } + if ($('.fotorama-item').data('fotorama').fullScreen) { + $('.fotorama__stage__frame .fotorama__img--full').each(function () { + var image = new Image(); + image.src = $(this).attr("src"); + + if ( (image.height > $(this).parent().height()) || (image.width > $(this).parent().width()) ) { + + if (image.height / image.width < $(this).parent().height() / $(this).parent().width()) { + $(this).width($(this).parent().width()); + $(this).height(''); + } else { + $(this).height($(this).parent().height()); + $(this).width(''); + } + } + }); + } + $(window).on('scroll', onScroll); $(window).resize(function() { + + if ($('.fotorama-item').data('fotorama').fullScreen) { + + $('.fotorama__stage__frame .fotorama__img--full').each(function () { + var image = new Image(); + image.src = $(this).attr("src"); + + if ( (image.height > $(this).parent().height()) || (image.width > $(this).parent().width()) ) { + + if (image.height / image.width < $(this).parent().height() / $(this).parent().width()) { + $(this).width($(this).parent().width()); + $(this).height(''); + } else { + $(this).height($(this).parent().height()); + $(this).width(''); + } + } + }); + + toggleZoomButtons($('[data-gallery-role="stage-shaft"] [data-active="true"] .fotorama__img--full')); + } + + _init($box, gOptions); + }); + + function resetVars($image) { + zoomWidthStep = 0; + zoomHeightStep = 0; + isDraggable = false; + $image.css({ + top: 0, + left: 0, + right: 0, + bottom: 0, + cursor: '' + }); + } + + function checkFullscreenImagePosition(widthStep, heightStep) { + var $preview, $image, $imageContainer, gallery, top, left; + + if ($('[data-gallery-role="gallery"]').data('fotorama').fullScreen) { + + $preview = $('[data-gallery-role="stage-shaft"] [data-active="true"] img'); + $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] .fotorama__img--full'); + $imageContainer = $preview.parent(); + gallery = $('[data-gallery-role="gallery"]'); + top = $image.offset().top; + left = $image.offset().left; + + if ($image.height() > $imageContainer.height()) { + if ($imageContainer.offset().top + $imageContainer.height() > top + $image.height() + heightStep/2) { + top = $imageContainer.offset().top + $imageContainer.height() - $image.height() + heightStep/2; + } else { + top = ($imageContainer.offset().top <= top + heightStep/2 && heightStep > 0) ? 0 : top + heightStep/2; + } + $image.css({ + top: top, + bottom: 'auto' + }); + } else { + $image.css({ + top: 0, + bottom: 0 + }); + } + + if ($image.width() > $imageContainer.width()) { + if (($imageContainer.offset().left + $imageContainer.width()) > (left + $image.width() + widthStep/2)) { + left = $imageContainer.offset().left + $imageContainer.width() - $image.width() + widthStep/2; + } else { + left = ($imageContainer.offset().left <= left + widthStep/2 && widthStep > 0) ? 0 : left - $imageContainer.offset().left + widthStep/2; + } + $image.css({ + left: left, + right: 'auto' + }); + } else { + $image.css({ + left: 0, + right: 0 + }); + } + } + } + + function zoomIn(e) { + if (zoomShown) { + var $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] .fotorama__img--full'), + imgOriginalSize = $image.length ? getImageSize($image[0].src) : '', + widthResult, + heightResult; + + if (!zoomWidthStep) { + zoomWidthStep = Math.ceil((imgOriginalSize.rw - $image.width())/parseFloat(options.fullscreenzoom)); + zoomHeightStep = Math.ceil((imgOriginalSize.rh - $image.height())/parseFloat(options.fullscreenzoom)); + } + widthResult = $image.width() + zoomWidthStep; + heightResult = $image.height() + zoomHeightStep; + + if (widthResult >= imgOriginalSize.rw) { + widthResult = imgOriginalSize.rw; + } + if (heightResult >= imgOriginalSize.rh) { + heightResult = imgOriginalSize.rh; + } + + if ( zoomShown ) { + isDraggable = true; + } + + if ($image.width() >= $image.height() && $image.width() !== imgOriginalSize.rw) { + $image.css({ + width: widthResult, + height: 'auto' + }); + checkFullscreenImagePosition(-zoomWidthStep, -zoomHeightStep); + } else if ($image.width() < $image.height() && $image.height() !== imgOriginalSize.rh) { + $image.css({ + width: 'auto', + height: heightResult + }); + checkFullscreenImagePosition(-zoomWidthStep, -zoomHeightStep); + } + } + + return false; + } + + function zoomOut(e) { + if (zoomShown) { + var $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] .fotorama__img--full'), + setedResult = $image.width() - zoomWidthStep, + widthCheck = $image.width() - zoomWidthStep <= $image.parent().width(), + heightCheck = $image.height() - zoomHeightStep <= $image.parent().height(); + + e.preventDefault(); + + if (widthCheck && heightCheck) { + if ($image.width() >= $image.height()) { + $image.trigger('fotorama:load'); + + return false; + } else if ($image.width() < $image.height()) { + $image.trigger('fotorama:load'); + + return false; + } + } + + $image.css({'width': setedResult, height: 'auto'}); + checkFullscreenImagePosition(zoomWidthStep, zoomHeightStep); + } + + return false; + } + + /** + * Return width and height of original image + * @param src path for original image + * @returns {{rw: number, rh: number}} + */ + function getImageSize(src) { + var img = new Image(), + imgSize = { + rw: 0, + rh: 0 + }; + img.src = src; + imgSize.rw = img.width; + imgSize.rh = img.height; + return imgSize; + } + + + function setEventOnce() { + $('.fotorama__zoom-in') + .off('mouseup') + .on('mouseup', zoomIn); + $('.fotorama__zoom-out') + .off('mouseup') + .on('mouseup', zoomOut); + $('.fotorama__zoom-in') + .off('touchstart') + .on('touchstart', zoomIn); + $('.fotorama__zoom-out') + .off('touchstart') + .on('touchstart', zoomOut); + } + $(document).on('mousemove', onMousemove); _init($box, gOptions); + setEventOnce(); + magnifierFullscreen(); + + if (!onWheelCallback) { + onWheelCallback = function onWheel(e) { + if ($('[data-gallery-role="gallery"]').data('fotorama').fullScreen) { + e = e || window.event; + + + var delta = e.deltaY || e.detail || e.wheelDelta; + + if (delta > 0) { + zoomOut(e); + } else { + zoomIn(e); + } + + e.preventDefault ? e.preventDefault() : (e.returnValue = false); + } + }; + } + $('.fotorama-item').on('fotorama:load', function () { + if (document.querySelector('.fotorama__stage').addEventListener) { + if ('onwheel' in document) { + // IE9+, FF17+, Ch31+ + document.querySelector('.fotorama__stage').removeEventListener("wheel", onWheelCallback); + document.querySelector('.fotorama__stage').addEventListener("wheel", onWheelCallback); + } else if ('onmousewheel' in document) { + document.querySelector('.fotorama__stage').removeEventListener("mousewheel", onWheelCallback); + document.querySelector('.fotorama__stage').addEventListener("mousewheel", onWheelCallback); + } else { + // Firefox < 17 + document.querySelector('.fotorama__stage').removeEventListener("MozMousePixelScroll", onWheelCallback); + document.querySelector('.fotorama__stage').addEventListener("MozMousePixelScroll", onWheelCallback); + } + } else { // IE8- + document.querySelector('.fotorama__stage').detachEvent("onmousewheel", onWheelCallback); + document.querySelector('.fotorama__stage').attachEvent("onmousewheel", onWheelCallback); + } + }); + } }(jQuery)); diff --git a/lib/web/magnifier/magnify.js b/lib/web/magnifier/magnify.js index a30a827aabdd3543f9cf69867caa89f5f67166e7..06a835ef9a2df3f6c540e854cbd000cadc6b7fbd 100644 --- a/lib/web/magnifier/magnify.js +++ b/lib/web/magnifier/magnify.js @@ -13,26 +13,59 @@ define([ var isTouchEnabled = 'ontouchstart' in document.documentElement, gallerySelector = '[data-gallery-role="gallery"]', magnifierSelector = '[data-gallery-role="magnifier"]', - magnifierZoomSelector = '[data-gallery-role="magnifier-zoom"]'; + magnifierZoomSelector = '[data-gallery-role="magnifier-zoom"]', + fullScreenIcon = '[data-gallery-role="fotorama__fullscreen-icon"]', + hideMagnifier, + behaveOnHover; if (isTouchEnabled) { $(element).on('fotorama:showend fotorama:load', function () { $(magnifierSelector).remove(); + $(magnifierZoomSelector).remove(); }); - - return config; } + /** + * Hides magnifier preview and zoom blocks. + */ + hideMagnifier = function () { + $(magnifierSelector).empty().hide(); + $(magnifierZoomSelector).remove(); + }; + + /** + * Hides magnifier on drag and while arrow click. + */ + behaveOnHover = function (e, initPos) { + var pos = [e.pageX, e.pageY], + isArrow = $(e.target).data('gallery-role') === 'arrow', + isClick = initPos[0] === pos[0] && initPos[1] === pos[1]; + if (isArrow || !isClick) { + hideMagnifier(); + } + }; + if (config.magnifierOpts.eventType === 'click') { config.options.swipe = false; + } else if (config.magnifierOpts.eventType === 'hover') { + $(element).on('pointerdown mousedown MSPointerDown', function (e) { + var pos = [e.pageX, e.pageY]; + + $(element).on('mousemove pointermove MSPointerMove', function (ev) { + navigator.msPointerEnabled ? hideMagnifier() : behaveOnHover(ev, pos); + }); + $(document).on('mouseup pointerup MSPointerUp', function () { + $(element).off('mousemove pointermove MSPointerMove'); + }); + }); } $.extend(config.magnifierOpts, { zoomable: false, - thumb: '.fotorama__img', + thumb: '.fotorama__img:not(".fotorama__img--full")', largeWrapper: '[data-gallery-role="magnifier"]', height: config.magnifierOpts.height || function () { - return $('[data-active="true"]').width() / config.options.ratio; + return $('[data-active="true"]').height(); }, width: config.magnifierOpts.width || function () { var productMedia = $(gallerySelector).parent().parent(); @@ -47,16 +80,16 @@ define([ } }); - $(element).on('fotorama:showend fotorama:load', function (e, fotorama) { - $(magnifierSelector).empty().hide(); - $(magnifierZoomSelector).remove(); + $(element).on('fotorama:showend fotorama:load fotorama:fullscreenexit fotorama:ready', function (e, fotorama) { + hideMagnifier(); config.magnifierOpts.large = $(gallerySelector).data('fotorama').activeFrame.img; - config.magnifierOpts.original = fotorama.data[fotorama.activeIndex].original; + config.magnifierOpts.full = fotorama.data[fotorama.activeIndex].full; $($(gallerySelector).data('fotorama').activeFrame.$stageFrame).magnify(config.magnifierOpts); }); - $(element).on('fotorama:show', function () { - $(magnifierSelector).empty().hide(); - $(magnifierZoomSelector).remove(); + $(element).on('gallery:loaded', function () { + $(element).find(gallerySelector).on('fotorama:show fotorama:fullscreenenter ', function () { + hideMagnifier(); + }); }); return config; diff --git a/setup/pub/magento/setup/readiness-check.js b/setup/pub/magento/setup/readiness-check.js index 869fba5caf073c5fc51a4394bb0b4afd7e0579a0..f2b8cf9e48c5f3a1e4cb63d86cdec1249756ab75 100644 --- a/setup/pub/magento/setup/readiness-check.js +++ b/setup/pub/magento/setup/readiness-check.js @@ -305,8 +305,10 @@ angular.module('readiness-check', []) angular.forEach($scope.items, function(item) { item.show(); }); + var $delay = 0; angular.forEach($scope.items, function(item) { - $scope.query(item); + $timeout(function() { $scope.query(item); }, $delay * 1000); + $delay++; }); }; diff --git a/setup/pub/magento/setup/select-version.js b/setup/pub/magento/setup/select-version.js index 2b326019cb4627536ced6b38ca88c16fa12a78bb..b133fa59d46a1607294fbc105065be321e5a6d70 100644 --- a/setup/pub/magento/setup/select-version.js +++ b/setup/pub/magento/setup/select-version.js @@ -27,10 +27,29 @@ angular.module('select-version', ['ngStorage']) $http.get('index.php/select-version/systemPackage', {'responseType' : 'json'}) .success(function (data) { if (data.responseType != 'error') { - $scope.versions = data.package.versions; - $scope.packages[0].name = data.package.package; - $scope.packages[0].version = $scope.versions[0].id; - $scope.selectedOption = $scope.versions[0].id; + $scope.selectedOption = []; + $scope.versions = []; + for (var i = 0; i < data.packages.length; i++) { + angular.forEach(data.packages[i].versions, function (value, key) { + $scope.versions.push({ + 'versionInfo': angular.toJson({ + 'package': data.packages[i].package, + 'version': value + }), 'version': value + }); + }); + } + + $scope.versions = $scope.versions.sort(function (a, b) { + if (a.version.id < b.version.id) { + return 1; + } + if (a.version.id > b.version.id) { + return -1; + } + return 0; + }); + $scope.selectedOption = $scope.versions[0].versionInfo; $scope.upgradeReadyForNext = true; } else { @@ -135,7 +154,9 @@ angular.module('select-version', ['ngStorage']) }; $scope.update = function() { - $scope.packages[0].version = $scope.selectedOption; + var selectedVersionInfo = angular.fromJson($scope.selectedOption); + $scope.packages[0]['name'] = selectedVersionInfo.package; + $scope.packages[0].version = selectedVersionInfo.version.id; if (angular.equals($scope.updateComponents.no, true)) { if ($scope.totalForGrid > 0) { $scope.packages.splice(1, $scope.totalForGrid); diff --git a/setup/pub/styles/setup.css b/setup/pub/styles/setup.css index c8cf89e38ec21a08a39e159ec931f593c87b8ef3..ebfc3c336164a2046dcf2123e4c325b9f5dddeac 100644 --- a/setup/pub/styles/setup.css +++ b/setup/pub/styles/setup.css @@ -3,4 +3,4 @@ * See COPYING.txt for license details. */ -.abs-action-delete,.abs-icon,.action-close:before,.action-next:before,.action-previous:before,.admin-user .admin__action-dropdown:before,.admin__action-multiselect-search-label:before,.admin__control-checkbox+label:before,.admin__control-radio+label:before,.admin__control-table .action-delete:before,.admin__current-filters-list .action-remove:before,.admin__data-grid-action-bookmarks .action-delete:before,.admin__data-grid-action-bookmarks .action-edit:before,.admin__data-grid-action-bookmarks .action-submit:before,.admin__data-grid-action-bookmarks .admin__action-dropdown:before,.admin__data-grid-action-columns .admin__action-dropdown:before,.admin__data-grid-action-export .admin__action-dropdown:before,.admin__menu .level-0>a:before,.admin__page-nav-item-messages .admin__page-nav-item-message._changed .admin__page-nav-item-message-icon,.admin__page-nav-item-messages .admin__page-nav-item-message._error .admin__page-nav-item-message-icon,.admin__page-nav-title._collapsible:after,.data-grid-filters-action-wrap .action-default:before,.data-grid-row-changed:after,.data-grid-row-parent>td .data-grid-checkbox-cell-inner:before,.data-grid-search-control-wrap .action-submit:before,.icon-failed:before,.icon-success:before,.notifications-action:before,.notifications-close:before,.page-actions .page-actions-buttons>button.action-back:before,.page-actions .page-actions-buttons>button.back:before,.page-actions>button.action-back:before,.page-actions>button.back:before,.page-title-jumbo-success:before,.search-global-label:before,.selectmenu .action-delete:before,.selectmenu .action-edit:before,.selectmenu .action-save:before,.setup-home-item:before,.sticky-header .data-grid-search-control-wrap .data-grid-search-label:before,.store-switcher .dropdown-menu .dropdown-toolbar a:before,.tooltip .help a:before,.tooltip .help span:before{-webkit-font-smoothing:antialiased;font-family:Icons;line-height:1;font-style:normal;font-weight:400;speak:none}.validation-symbol:after{content:'*';color:#e22626;font-weight:400;margin-left:3px}.abs-modal-overlay,.modals-overlay{background:rgba(0,0,0,.35);bottom:0;left:0;position:fixed;right:0;top:0}.abs-action-delete>span,.abs-visually-hidden,.admin__control-fields .admin__field:nth-child(n+2):not(.admin__field-option)>.admin__field-label,.admin__field-tooltip .admin__field-tooltip-action span,.selectmenu .action-delete>span,.selectmenu .action-edit>span,.selectmenu .action-save>span,.selectmenu-toggle span{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.abs-visually-hidden-reset{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.abs-clearfix:after,.abs-clearfix:before,.action-multicheck-wrap:after,.action-multicheck-wrap:before,.actions-split:after,.actions-split:before,.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-content:after,.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-content:before,.admin__data-grid-filters-footer:after,.admin__data-grid-filters-footer:before,.admin__data-grid-filters:after,.admin__data-grid-filters:before,.admin__data-grid-header-row:after,.admin__data-grid-header-row:before,.page-actions._fixed:after,.page-actions._fixed:before,.page-content:after,.page-content:before,.page-header-actions:after,.page-header-actions:before,.page-main-actions:not(._hidden):after,.page-main-actions:not(._hidden):before{content:'';display:table}.abs-clearfix:after,.action-multicheck-wrap:after,.actions-split:after,.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-content:after,.admin__data-grid-filters-footer:after,.admin__data-grid-filters:after,.admin__data-grid-header-row:after,.page-actions._fixed:after,.page-content:after,.page-header-actions:after,.page-main-actions:not(._hidden):after{clear:both}.abs-list-reset-styles{margin:0;padding:0;list-style:none}.abs-draggable-handle{cursor:-webkit-grab;cursor:move;font-size:0;margin-top:-4px;padding:0 1rem 0 0;vertical-align:middle;display:inline-block;text-decoration:none}.abs-draggable-handle:before{-webkit-font-smoothing:antialiased;font-size:1.8rem;line-height:inherit;color:#9e9e9e;content:'\e617';font-family:Icons;vertical-align:middle;display:inline-block;font-weight:400;overflow:hidden;speak:none;text-align:center}.abs-draggable-handle:hover:before{color:#858585}html{box-sizing:border-box;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}*,:after,:before{box-sizing:inherit}:focus{box-shadow:none;outline:0}._keyfocus :focus{box-shadow:0 0 0 1px #008bdb}body{margin:0}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}mark{background:#ff0;color:#000}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}embed,img,object,video{max-width:100%}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}@font-face{font-family:'Open Sans';src:url(../fonts/opensans/light/opensans-300.eot);src:url(../fonts/opensans/light/opensans-300.eot?#iefix) format('embedded-opentype'),url(../fonts/opensans/light/opensans-300.woff2) format('woff2'),url(../fonts/opensans/light/opensans-300.woff) format('woff'),url(../fonts/opensans/light/opensans-300.ttf) format('truetype'),url('../fonts/opensans/light/opensans-300.svg#Open Sans') format('svg');font-weight:300;font-style:normal}@font-face{font-family:'Open Sans';src:url(../fonts/opensans/regular/opensans-400.eot);src:url(../fonts/opensans/regular/opensans-400.eot?#iefix) format('embedded-opentype'),url(../fonts/opensans/regular/opensans-400.woff2) format('woff2'),url(../fonts/opensans/regular/opensans-400.woff) format('woff'),url(../fonts/opensans/regular/opensans-400.ttf) format('truetype'),url('../fonts/opensans/regular/opensans-400.svg#Open Sans') format('svg');font-weight:400;font-style:normal}@font-face{font-family:'Open Sans';src:url(../fonts/opensans/semibold/opensans-600.eot);src:url(../fonts/opensans/semibold/opensans-600.eot?#iefix) format('embedded-opentype'),url(../fonts/opensans/semibold/opensans-600.woff2) format('woff2'),url(../fonts/opensans/semibold/opensans-600.woff) format('woff'),url(../fonts/opensans/semibold/opensans-600.ttf) format('truetype'),url('../fonts/opensans/semibold/opensans-600.svg#Open Sans') format('svg');font-weight:600;font-style:normal}@font-face{font-family:'Open Sans';src:url(../fonts/opensans/bold/opensans-700.eot);src:url(../fonts/opensans/bold/opensans-700.eot?#iefix) format('embedded-opentype'),url(../fonts/opensans/bold/opensans-700.woff2) format('woff2'),url(../fonts/opensans/bold/opensans-700.woff) format('woff'),url(../fonts/opensans/bold/opensans-700.ttf) format('truetype'),url('../fonts/opensans/bold/opensans-700.svg#Open Sans') format('svg');font-weight:700;font-style:normal}html{font-size:62.5%}body{color:#333;font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;line-height:1.36;font-size:1.4rem}h1{margin:0 0 2rem;color:#41362f;font-weight:400;line-height:1.2;font-size:2.8rem}h2{margin:0 0 2rem;color:#41362f;font-weight:400;line-height:1.2;font-size:2rem}h3{margin:0 0 2rem;color:#41362f;font-weight:600;line-height:1.2;font-size:1.7rem}h4,h5,h6{font-weight:600;margin-top:0}p{margin:0 0 1em}small{font-size:1.2rem}a{color:#008bdb;text-decoration:none}a:hover{color:#0fa7ff;text-decoration:underline}dl,ol,ul{padding-left:0}nav ol,nav ul{list-style:none;margin:0;padding:0}html{height:100%}body{background-color:#fff;min-height:100%;min-width:102.4rem}.page-wrapper{background-color:#fff;display:inline-block;margin-left:-4px;vertical-align:top;width:calc(100% - 8.8rem)}.page-content{padding-bottom:3rem;padding-left:3rem;padding-right:3rem}.notices-wrapper{margin:0 3rem}.notices-wrapper .messages{margin-bottom:0}@media (min-width:1024px){html{width:100vw}body{overflow-x:hidden}}.row{margin-left:0;margin-right:0}.row:after{clear:both;content:'';display:table}.col-l-1,.col-l-10,.col-l-11,.col-l-12,.col-l-2,.col-l-3,.col-l-4,.col-l-5,.col-l-6,.col-l-7,.col-l-8,.col-l-9,.col-m-1,.col-m-10,.col-m-11,.col-m-12,.col-m-2,.col-m-3,.col-m-4,.col-m-5,.col-m-6,.col-m-7,.col-m-8,.col-m-9,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-left:0;padding-right:0}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}.row-gutter{margin-left:-1.5rem;margin-right:-1.5rem}.row-gutter>[class*=col-]{padding-left:1.5rem;padding-right:1.5rem}.abs-clearer:after,.component-manager-content:after,.component-manager-title:after,.form-row:after,.header:after,.nav:after,body:after{clear:both;content:'';display:table}.ng-cloak{display:none!important}.hide.hide{display:none}.show.show{display:block}.text-center{text-align:center}.text-right{text-align:right}@font-face{font-family:Icons;src:url(../fonts/icons/icons.eot);src:url(../fonts/icons/icons.eot?#iefix) format('embedded-opentype'),url(../fonts/icons/icons.woff2) format('woff2'),url(../fonts/icons/icons.woff) format('woff'),url(../fonts/icons/icons.ttf) format('truetype'),url(../fonts/icons/icons.svg#Icons) format('svg');font-weight:400;font-style:normal}[class*=icon-]{display:inline-block;line-height:1}.icon-failed:before,.icon-success:before,[class*=icon-]:after{font-family:Icons}.icon-success{color:#79a22e}.icon-success:before{content:'\e62d'}.icon-failed{color:#e22626}.icon-failed:before{content:'\e632'}.icon-success-thick:after{content:'\e62d'}.icon-collapse:after{content:'\e615'}.icon-failed-thick:after{content:'\e632'}.icon-expand:after{content:'\e616'}.icon-warning:after{content:'\e623'}.icon-failed-round,.icon-success-round{border-radius:100%;color:#fff;font-size:2.5rem;height:1em;position:relative;text-align:center;width:1em}.icon-failed-round:after,.icon-success-round:after{bottom:0;font-size:.5em;left:0;position:absolute;right:0;top:.45em}.icon-success-round{background-color:#79a22e}.icon-success-round:after{content:'\e62d'}.icon-failed-round{background-color:#e22626}.icon-failed-round:after{content:'\e632'}dl,ol,ul{margin-top:0}.list{padding-left:0}.list>li{display:block;margin-bottom:.75em;position:relative}.list>li>.icon-failed,.list>li>.icon-success{font-size:1.6em;left:-.1em;position:absolute;top:0}.list>li>.icon-success{color:#79a22e}.list>li>.icon-failed{color:#e22626}.list-item-failed,.list-item-icon,.list-item-success,.list-item-warning{padding-left:3.5rem}.list-item-failed:before,.list-item-success:before,.list-item-warning:before{left:-.1em;position:absolute}.list-item-success:before{color:#79a22e}.list-item-failed:before{color:#e22626}.list-item-warning:before{color:#ef672f}.list-definition{margin:0 0 3rem;padding:0}.list-definition>dt{clear:left;float:left}.list-definition>dd{margin-bottom:1em;margin-left:20rem}.btn-wrap{margin:0 auto}.btn-wrap .btn{width:100%}.btn{background:#e3e3e3;border:none;color:#514943;display:inline-block;font-size:1.6rem;font-weight:600;padding:.45em .9em;text-align:center}.btn:hover{background-color:#dbdbdb;color:#514943;text-decoration:none}.btn:active{background-color:#d6d6d6}.btn.disabled,.btn[disabled]{cursor:default;opacity:.5;pointer-events:none}.ie9 .btn.disabled,.ie9 .btn[disabled]{background-color:#f0f0f0;opacity:1;text-shadow:none}.btn-large{padding:.75em 1.25em}.btn-medium{font-size:1.4rem;padding:.5em 1.5em .6em}.btn-link{background-color:transparent;border:none;color:#008bdb;font-family:1.6rem;font-size:1.5rem}.btn-link:active,.btn-link:focus,.btn-link:hover{background-color:transparent;color:#0fa7ff}.btn-prime{background-color:#eb5202;color:#fff;text-shadow:1px 1px 0 rgba(0,0,0,.25)}.btn-prime:focus,.btn-prime:hover{background-color:#f65405;background-repeat:repeat-x;background-image:linear-gradient(to right,#e04f00 0,#f65405 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e04f00', endColorstr='#f65405', GradientType=1);color:#fff}.btn-prime:active,.btn-prime:focus{background-color:#e04f00;background-repeat:repeat-x;background-image:linear-gradient(to right,#f65405 0,#e04f00 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f65405', endColorstr='#e04f00', GradientType=1);color:#fff}.ie9 .btn-prime.disabled,.ie9 .btn-prime[disabled]{background-color:#fd6e23}.ie9 .btn-prime.disabled:active,.ie9 .btn-prime.disabled:hover,.ie9 .btn-prime[disabled]:active,.ie9 .btn-prime[disabled]:hover{background-color:#fd6e23;-webkit-filter:none;filter:none}.btn-secondary{background-color:#514943;color:#fff}.btn-secondary:hover{background-color:#5f564f;color:#fff}.btn-secondary:active,.btn-secondary:focus{background-color:#574e48;color:#fff}.ie9 .btn-secondary.disabled,.ie9 .btn-secondary[disabled]{background-color:#514943}.ie9 .btn-secondary.disabled:active,.ie9 .btn-secondary[disabled]:active{background-color:#514943;-webkit-filter:none;filter:none}[class*=btn-wrap-triangle]{overflow:hidden;position:relative}[class*=btn-wrap-triangle] .btn:after{border-style:solid;content:'';height:0;position:absolute;top:0;width:0}.btn-wrap-triangle-right{display:inline-block;padding-right:1.74rem;position:relative}.btn-wrap-triangle-right .btn{text-indent:.92rem}.btn-wrap-triangle-right .btn:after{border-color:transparent transparent transparent #e3e3e3;border-width:1.84rem 0 1.84rem 1.84rem;left:100%;margin-left:-1.74rem}.btn-wrap-triangle-right .btn:focus:after,.btn-wrap-triangle-right .btn:hover:after{border-left-color:#dbdbdb}.btn-wrap-triangle-right .btn:active:after{border-left-color:#d6d6d6}.btn-wrap-triangle-right .btn:not(.disabled):active,.btn-wrap-triangle-right .btn:not([disabled]):active{left:1px}.ie9 .btn-wrap-triangle-right .btn.disabled:after,.ie9 .btn-wrap-triangle-right .btn[disabled]:after{border-color:transparent transparent transparent #f0f0f0}.ie9 .btn-wrap-triangle-right .btn.disabled:active:after,.ie9 .btn-wrap-triangle-right .btn.disabled:focus:after,.ie9 .btn-wrap-triangle-right .btn.disabled:hover:after,.ie9 .btn-wrap-triangle-right .btn[disabled]:active:after,.ie9 .btn-wrap-triangle-right .btn[disabled]:focus:after,.ie9 .btn-wrap-triangle-right .btn[disabled]:hover:after{border-left-color:#f0f0f0}.btn-wrap-triangle-right .btn-prime:after{border-color:transparent transparent transparent #eb5202}.btn-wrap-triangle-right .btn-prime:focus:after,.btn-wrap-triangle-right .btn-prime:hover:after{border-left-color:#f65405}.btn-wrap-triangle-right .btn-prime:active:after{border-left-color:#e04f00}.btn-wrap-triangle-right .btn-prime:not(.disabled):active,.btn-wrap-triangle-right .btn-prime:not([disabled]):active{left:1px}.ie9 .btn-wrap-triangle-right .btn-prime.disabled:after,.ie9 .btn-wrap-triangle-right .btn-prime[disabled]:after{border-color:transparent transparent transparent #fd6e23}.ie9 .btn-wrap-triangle-right .btn-prime.disabled:active:after,.ie9 .btn-wrap-triangle-right .btn-prime.disabled:hover:after,.ie9 .btn-wrap-triangle-right .btn-prime[disabled]:active:after,.ie9 .btn-wrap-triangle-right .btn-prime[disabled]:hover:after{border-left-color:#fd6e23}.btn-wrap-triangle-left{display:inline-block;padding-left:1.74rem}.btn-wrap-triangle-left .btn{text-indent:-.92rem}.btn-wrap-triangle-left .btn:after{border-color:transparent #e3e3e3 transparent transparent;border-width:1.84rem 1.84rem 1.84rem 0;margin-right:-1.74rem;right:100%}.btn-wrap-triangle-left .btn:focus:after,.btn-wrap-triangle-left .btn:hover:after{border-right-color:#dbdbdb}.btn-wrap-triangle-left .btn:active:after{border-right-color:#d6d6d6}.btn-wrap-triangle-left .btn:not(.disabled):active,.btn-wrap-triangle-left .btn:not([disabled]):active{right:1px}.ie9 .btn-wrap-triangle-left .btn.disabled:after,.ie9 .btn-wrap-triangle-left .btn[disabled]:after{border-color:transparent #f0f0f0 transparent transparent}.ie9 .btn-wrap-triangle-left .btn.disabled:active:after,.ie9 .btn-wrap-triangle-left .btn.disabled:hover:after,.ie9 .btn-wrap-triangle-left .btn[disabled]:active:after,.ie9 .btn-wrap-triangle-left .btn[disabled]:hover:after{border-right-color:#f0f0f0}.btn-wrap-triangle-left .btn-prime:after{border-color:transparent #eb5202 transparent transparent}.btn-wrap-triangle-left .btn-prime:focus:after,.btn-wrap-triangle-left .btn-prime:hover:after{border-right-color:#e04f00}.btn-wrap-triangle-left .btn-prime:active:after{border-right-color:#f65405}.btn-wrap-triangle-left .btn-prime:not(.disabled):active,.btn-wrap-triangle-left .btn-prime:not([disabled]):active{right:1px}.ie9 .btn-wrap-triangle-left .btn-prime.disabled:after,.ie9 .btn-wrap-triangle-left .btn-prime[disabled]:after{border-color:transparent #fd6e23 transparent transparent}.ie9 .btn-wrap-triangle-left .btn-prime.disabled:active:after,.ie9 .btn-wrap-triangle-left .btn-prime.disabled:hover:after,.ie9 .btn-wrap-triangle-left .btn-prime[disabled]:active:after,.ie9 .btn-wrap-triangle-left .btn-prime[disabled]:hover:after{border-right-color:#fd6e23}.btn-expand{background-color:transparent;border:none;color:#303030;font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.4rem;font-weight:700;padding:0;position:relative}.btn-expand.expanded:after{border-color:transparent transparent #303030;border-width:0 .285em .36em}.btn-expand.expanded:hover:after{border-color:transparent transparent #3d3d3d}.btn-expand:hover{background-color:transparent;border:none;color:#3d3d3d}.btn-expand:hover:after{border-color:#3d3d3d transparent transparent}.btn-expand:after{border-color:#303030 transparent transparent;border-style:solid;border-width:.36em .285em 0;content:'';height:0;left:100%;margin-left:.5em;margin-top:-.18em;position:absolute;top:50%;width:0}[class*=col-] .form-el-input,[class*=col-] .form-el-select{width:100%}.form-fieldset{border:none;margin:0 0 1em;padding:0}.form-row{margin-bottom:2.2rem}.form-row .form-row{margin-bottom:.4rem}.form-row .form-label{display:block;font-weight:600;padding:.6rem 2.1em 0 0;text-align:right}.form-row .form-label.required{position:relative}.form-row .form-label.required:after{color:#eb5202;content:'*';font-size:1.15em;position:absolute;right:.7em;top:.5em}.form-row .form-el-checkbox+.form-label:before,.form-row .form-el-radio+.form-label:before{top:.7rem}.form-row .form-el-checkbox+.form-label:after,.form-row .form-el-radio+.form-label:after{top:1.1rem}.form-row.form-row-text{padding-top:.6rem}.form-row.form-row-text .action-sign-out{font-size:1.2rem;margin-left:1rem}.form-note{font-size:1.2rem;font-weight:600;margin-top:1rem}.form-el-dummy{display:none}.fieldset{border:0;margin:0;min-width:0;padding:0}input:not([disabled]):focus,textarea:not([disabled]):focus{box-shadow:none}.form-el-input{border:1px solid #adadad;color:#303030;padding:.35em .55em .5em}.form-el-input:hover{border-color:#949494}.form-el-input:focus{border-color:#008bdb}.form-el-input:required{box-shadow:none}.form-label{margin-bottom:.5em}[class*=form-label][for]{cursor:pointer}.form-el-insider-wrap{display:table;width:100%}.form-el-insider-input{display:table-cell;width:100%}.form-el-insider{border-radius:2px;display:table-cell;vertical-align:top;padding:.43em .55em .5em 0}.form-legend,.form-legend-expand,.form-legend-light{display:block;margin:0}.form-legend,.form-legend-expand{margin-bottom:2.5em;padding-top:1.5em;font-weight:600;font-size:1.25em}.form-legend{width:100%;border-top:1px solid #ccc}.form-legend-light{margin-bottom:1.5em;font-size:1em}.form-legend-expand{cursor:pointer;transition:opacity .2s linear}.form-legend-expand:hover{opacity:.85}.form-legend-expand.expanded:after{content:'\e615'}.form-legend-expand:after{margin-left:.5em;font-weight:400;font-size:1.15em;font-family:Icons;content:'\e616';vertical-align:sub}.form-el-checkbox,.form-el-radio{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.form-el-checkbox.disabled+.form-label,.form-el-checkbox.disabled+.form-label:before,.form-el-checkbox[disabled]+.form-label,.form-el-checkbox[disabled]+.form-label:before,.form-el-radio.disabled+.form-label,.form-el-radio.disabled+.form-label:before,.form-el-radio[disabled]+.form-label,.form-el-radio[disabled]+.form-label:before{cursor:default;opacity:.5;pointer-events:none}.form-el-checkbox:not(.disabled)+.form-label:hover:before,.form-el-checkbox:not([disabled])+.form-label:hover:before,.form-el-radio:not(.disabled)+.form-label:hover:before,.form-el-radio:not([disabled])+.form-label:hover:before{border-color:#514943}.form-el-checkbox+.form-label,.form-el-radio+.form-label{font-weight:400;padding-left:2em;padding-right:0;position:relative;text-align:left;transition:border-color .1s linear}.form-el-checkbox+.form-label:before,.form-el-radio+.form-label:before{border:1px solid;content:'';left:0;position:absolute;top:.1rem;transition:border-color .1s linear}.form-el-checkbox+.form-label:before{background-color:#fff;border-color:#adadad;border-radius:2px;height:1.6rem;line-height:1.2;width:1.6rem;font-size:1.2rem}.form-el-checkbox:checked+.form-label::before{content:'\e62d';font-family:Icons}.form-el-radio+.form-label:before{background-color:#fff;border:1px solid #adadad;border-radius:100%;height:1.8rem;width:1.8rem}.form-el-radio+.form-label:after{background:0 0;border:.5rem solid transparent;border-radius:100%;content:'';height:0;left:.4rem;position:absolute;top:.5rem;transition:background .3s linear;width:0}.form-el-radio:checked+.form-label{cursor:default}.form-el-radio:checked+.form-label:after{border-color:#514943}.form-select-label{border:1px solid #adadad;color:#303030;cursor:pointer;display:block;overflow:hidden;position:relative;z-index:0}.form-select-label:hover,.form-select-label:hover:after{border-color:#949494}.form-select-label:active,.form-select-label:active:after,.form-select-label:focus,.form-select-label:focus:after{border-color:#008bdb}.form-select-label:after{background:#e3e3e3;border-left:1px solid #adadad;bottom:0;content:'';position:absolute;right:0;top:0;width:2.36em;z-index:-2}.ie9 .form-select-label:after{display:none}.form-select-label:before{border-color:#303030 transparent transparent;border-style:solid;border-width:5px 4px 0;content:'';height:0;margin-right:-4px;margin-top:-2.5px;position:absolute;right:1.18em;top:50%;width:0;z-index:-1}.ie9 .form-select-label:before{display:none}.form-select-label .form-el-select{background:0 0;border:none;border-radius:0;content:'';display:block;margin:0;padding:.35em calc(2.36em + 10%) .5em .55em;width:110%}.ie9 .form-select-label .form-el-select{padding-right:.55em;width:100%}.form-el-select{background:#fff;border:1px solid #adadad;border-radius:2px;color:#303030;display:block;padding:.35em .55em}.multiselect-custom{position:relative;height:45.2rem;border:1px solid #adadad;overflow:auto;margin:0 0 1.5rem}.multiselect-custom ul{margin:0;padding:0;list-style:none;min-width:29rem}.multiselect-custom .item{padding:1rem 1.4rem}.multiselect-custom .selected{background-color:#e0f6fe}.multiselect-custom .form-label{margin-bottom:0}[class*=form-el-].invalid{border-color:#e22626}[class*=form-el-].invalid+.error-container{display:block}.error-container{background-color:#fffbbb;border:1px solid #ee7d7d;color:#514943;display:none;font-size:1.19rem;margin-top:.2rem;padding:.8rem 1rem .9rem}.check-result-message{margin-left:.5em;min-height:3.68rem;-webkit-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-flex;display:-ms-flexbox;display:flex}.check-result-text{margin-left:.5em}.container{display:block;margin:0 auto 4rem;max-width:100rem;padding:0 2rem}.abs-action-delete,.action-close:before,.action-next:before,.action-previous:before,.admin-user .admin__action-dropdown:before,.admin__action-multiselect-search-label:before,.admin__control-checkbox+label:before,.admin__control-radio+label:before,.admin__control-table .action-delete:before,.admin__current-filters-list .action-remove:before,.admin__data-grid-action-bookmarks .action-delete:before,.admin__data-grid-action-bookmarks .action-edit:before,.admin__data-grid-action-bookmarks .action-submit:before,.admin__data-grid-action-bookmarks .admin__action-dropdown:before,.admin__data-grid-action-columns .admin__action-dropdown:before,.admin__data-grid-action-export .admin__action-dropdown:before,.admin__menu .level-0>a:before,.admin__page-nav-item-messages .admin__page-nav-item-message._changed .admin__page-nav-item-message-icon,.admin__page-nav-item-messages .admin__page-nav-item-message._error .admin__page-nav-item-message-icon,.admin__page-nav-title._collapsible:after,.data-grid-filters-action-wrap .action-default:before,.data-grid-row-changed:after,.data-grid-row-parent>td .data-grid-checkbox-cell-inner:before,.data-grid-search-control-wrap .action-submit:before,.icon-failed:before,.icon-success:before,.notifications-action:before,.notifications-close:before,.page-actions .page-actions-buttons>button.action-back:before,.page-actions .page-actions-buttons>button.back:before,.page-actions>button.action-back:before,.page-actions>button.back:before,.page-title-jumbo-success:before,.search-global-label:before,.selectmenu .action-delete:before,.selectmenu .action-edit:before,.selectmenu .action-save:before,.setup-home-item:before,.sticky-header .data-grid-search-control-wrap .data-grid-search-label:before,.store-switcher .dropdown-menu .dropdown-toolbar a:before,.tooltip .help a:before,.tooltip .help span:before{-webkit-font-smoothing:antialiased;font-family:Icons;line-height:1;font-style:normal;font-weight:400;speak:none}.text-stretch{margin-bottom:1.5em}.page-title-jumbo{font-size:4rem;font-weight:300;letter-spacing:-.05em;margin-bottom:2.9rem}.page-title-jumbo-success:before{color:#79a22e;content:'\e62d';font-size:3.9rem;margin-left:-.3rem;margin-right:2.4rem}.list{margin-bottom:3rem}.list-dot .list-item{display:list-item;list-style-position:inside;margin-bottom:1.2rem}.list-title{color:#333;font-size:1.4rem;font-weight:700;letter-spacing:.025em;margin-bottom:1.2rem}.list-item-failed:before,.list-item-success:before,.list-item-warning:before{font-family:Icons;font-size:1.6rem;top:0}.list-item-success:before{content:'\e62d';font-size:1.6rem}.list-item-failed:before{content:'\e632';font-size:1.4rem;left:.1rem;top:.2rem}.list-item-warning:before{content:'\e623';font-size:1.3rem;left:.2rem}.form-wrap{padding-top:2.1rem;margin-bottom:3.6rem}.form-el-label-horizontal{display:inline-block;font-size:1.3rem;font-weight:600;letter-spacing:.025em;margin-left:.4rem;margin-bottom:.4rem}.app-updater{min-width:768px}body._has-modal{height:100%;overflow:hidden;width:100%}.modals-overlay{z-index:899}.modal-popup,.modal-slide{bottom:0;min-width:0;pointer-events:none;position:fixed;right:0;top:0;visibility:hidden}.modal-popup._show,.modal-slide._show{visibility:visible}.modal-popup._show .modal-inner-wrap,.modal-slide._show .modal-inner-wrap{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.modal-popup .modal-inner-wrap,.modal-slide .modal-inner-wrap{background-color:#fff;box-shadow:0 0 12px 2px rgba(0,0,0,.35);opacity:1;pointer-events:auto}.modal-slide{left:14.8rem;z-index:900}.modal-slide._show .modal-inner-wrap{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}.modal-slide .modal-inner-wrap{height:100%;overflow-y:auto;position:static;-webkit-transform:translateX(100%);-ms-transform:translateX(100%);transform:translateX(100%);transition-duration:.3s;transition-property:-webkit-transform,visibility;transition-property:transform,visibility;transition-timing-function:ease-in-out;width:auto}.modal-slide._inner-scroll .modal-inner-wrap{overflow-y:visible;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.modal-slide._inner-scroll .modal-footer,.modal-slide._inner-scroll .modal-header{-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.modal-slide._inner-scroll .modal-content{overflow-y:auto}.modal-slide._inner-scroll .modal-footer{margin-top:auto}.modal-slide .modal-content,.modal-slide .modal-footer,.modal-slide .modal-header{padding:0 2.6rem 2.6rem}.modal-slide .modal-header{padding-bottom:2.1rem;padding-top:2.1rem}.modal-popup{left:0;overflow-y:auto;z-index:900}.modal-popup._show .modal-inner-wrap{-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}.modal-popup .modal-inner-wrap{box-sizing:border-box;height:auto;left:0;margin:5rem auto;position:absolute;right:0;-webkit-transform:translateY(-200%);-ms-transform:translateY(-200%);transform:translateY(-200%);transition-duration:.2s;transition-property:-webkit-transform,visibility;transition-property:transform,visibility;transition-timing-function:ease;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;width:75%}.modal-popup._inner-scroll{overflow-y:visible}.ie10 .modal-popup._inner-scroll,.ie9 .modal-popup._inner-scroll{overflow-y:auto}.modal-popup._inner-scroll .modal-inner-wrap{max-height:90%}.ie10 .modal-popup._inner-scroll .modal-inner-wrap,.ie9 .modal-popup._inner-scroll .modal-inner-wrap{max-height:none}.modal-popup._inner-scroll .modal-content{overflow-y:auto}.modal-popup .modal-content,.modal-popup .modal-footer,.modal-popup .modal-header{padding-left:3rem;padding-right:3rem}.modal-popup .modal-footer,.modal-popup .modal-header{-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.modal-popup .modal-header{padding-bottom:3rem;padding-top:3rem}.modal-popup .modal-footer{margin-top:auto;padding-bottom:3rem;padding-top:3rem}.modal-popup .modal-footer-actions{text-align:right}.modal-popup.confirm .modal-inner-wrap{left:50%;margin-left:-25rem;width:50rem}.modal-popup.confirm .modal-footer{text-align:right}.modal-popup._image-box .modal-inner-wrap{margin:5rem auto;max-width:78rem;position:static}.modal-popup._image-box .thumbnail-preview{padding-bottom:3rem;text-align:center}.modal-popup._image-box .thumbnail-preview .thumbnail-preview-image-block{border:1px solid #ccc;margin:0 auto 2rem;max-width:58rem;padding:2rem}.modal-popup._image-box .thumbnail-preview .thumbnail-preview-image{max-height:54rem}@media (max-width:768px){.modal-popup.modal-slide{left:14.8rem;z-index:900}.modal-popup.modal-slide._show .modal-inner-wrap{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}.modal-popup.modal-slide .modal-inner-wrap{height:100%;overflow-y:auto;position:static;-webkit-transform:translateX(100%);-ms-transform:translateX(100%);transform:translateX(100%);transition-duration:.3s;transition-property:-webkit-transform,visibility;transition-property:transform,visibility;transition-timing-function:ease-in-out;width:auto;margin:0;max-height:none}}.admin__action-dropdown-wrap{display:inline-block;position:relative}.admin__action-dropdown-wrap .admin__action-dropdown-text:after{left:-6px;right:0}.admin__action-dropdown-wrap .admin__action-dropdown-menu{left:auto;right:0}.admin__action-dropdown-wrap._active .admin__action-dropdown,.admin__action-dropdown-wrap.active .admin__action-dropdown{border-color:#007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5)}.admin__action-dropdown-wrap._active .admin__action-dropdown-text:after,.admin__action-dropdown-wrap.active .admin__action-dropdown-text:after{background-color:#fff;content:'';height:6px;position:absolute;top:100%}.admin__action-dropdown-wrap._active .admin__action-dropdown-menu,.admin__action-dropdown-wrap.active .admin__action-dropdown-menu{display:block}.admin__action-dropdown-wrap._disabled .admin__action-dropdown{cursor:default}.admin__action-dropdown-wrap._disabled:hover .admin__action-dropdown{color:#333}.admin__action-dropdown{background-color:#fff;border:1px solid transparent;border-bottom:none;border-radius:0;box-shadow:none;color:#333;display:inline-block;font-size:1.3rem;font-weight:400;letter-spacing:-.025em;padding:.7rem 3.3rem .8rem 1.5rem;position:relative;vertical-align:baseline;z-index:2}.admin__action-dropdown._active:after,.admin__action-dropdown.active:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.admin__action-dropdown:after{border-color:#000 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;top:50%;transition:all .2s linear;width:0}._active .admin__action-dropdown:after,.active .admin__action-dropdown:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.admin__action-dropdown:hover:after{border-color:#000 transparent transparent}.admin__action-dropdown:focus,.admin__action-dropdown:hover{background-color:#fff;color:#000;text-decoration:none}.admin__action-dropdown:after{right:1.5rem}.admin__action-dropdown:before{margin-right:1rem}.admin__action-dropdown-menu{background-color:#fff;border:1px solid #007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5);display:none;line-height:1.36;margin-top:-1px;min-width:120%;padding:.5rem 1rem;position:absolute;top:100%;transition:all .15s ease;z-index:1}.admin__action-dropdown-menu>li{display:block}.admin__action-dropdown-menu>li>a{color:#333;display:block;text-decoration:none;padding:.6rem .5rem}.selectmenu{display:inline-block;position:relative;text-align:left;z-index:1}.selectmenu._active{z-index:500;border-color:#007bdb}.selectmenu .action-delete,.selectmenu .action-edit,.selectmenu .action-save{background-color:transparent;border-color:transparent;box-shadow:none;padding:0 1rem}.selectmenu .action-delete:hover,.selectmenu .action-edit:hover,.selectmenu .action-save:hover{background-color:transparent;border-color:transparent;box-shadow:none}.selectmenu .action-delete:before,.selectmenu .action-edit:before,.selectmenu .action-save:before{content:'\e630'}.selectmenu .action-delete,.selectmenu .action-edit{border:0 solid #fff;border-left-width:1px;bottom:0;position:absolute;right:0;top:0;z-index:1}.selectmenu .action-delete:hover,.selectmenu .action-edit:hover{border:0 solid #fff;border-left-width:1px}.selectmenu .action-save:before{content:'\e625'}.selectmenu .action-edit:before{content:'\e631'}.selectmenu-value{display:inline-block}.selectmenu-value input[type=text]{-moz-appearance:none;-webkit-appearance:none;appearance:none;border:0;display:inline;margin:0;width:6rem}body._keyfocus .selectmenu-value input[type=text]:focus{box-shadow:none}.selectmenu-toggle{padding-right:3rem;background:0 0;border-width:0;bottom:0;float:right;position:absolute;right:0;top:0;width:0}.selectmenu-toggle._active:after,.selectmenu-toggle.active:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.selectmenu-toggle:after{border-color:#000 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;right:1.1rem;top:50%;transition:all .2s linear;width:0}._active .selectmenu-toggle:after,.active .selectmenu-toggle:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.selectmenu-toggle:hover:after{border-color:#000 transparent transparent}.selectmenu-toggle:active,.selectmenu-toggle:focus,.selectmenu-toggle:hover{background:0 0}.selectmenu._active .selectmenu-toggle:before{border-color:#007bdb}body._keyfocus .selectmenu-toggle:focus{box-shadow:none}.selectmenu-toggle:before{background:#e3e3e3;border-left:1px solid #adadad;bottom:0;content:'';display:block;position:absolute;right:0;top:0;width:3.2rem}.selectmenu-items{background:#fff;border:1px solid #007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5);display:none;float:left;left:-1px;margin-top:3px;max-width:20rem;min-width:calc(100% + 2px);position:absolute;top:100%}.selectmenu-items._active{display:block}.selectmenu-items ul{float:left;list-style-type:none;margin:0;min-width:100%;padding:0}.selectmenu-items li{display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;transition:background .2s linear}.selectmenu-items li:hover{background:#e3e3e3}.selectmenu-items li:last-child .selectmenu-item-action,.selectmenu-items li:last-child .selectmenu-item-action:visited{color:#008bdb;text-decoration:none}.selectmenu-items li:last-child .selectmenu-item-action:hover{color:#0fa7ff;text-decoration:underline}.selectmenu-items li:last-child .selectmenu-item-action:active{color:#ff5501;text-decoration:underline}.selectmenu-item{position:relative;width:100%;z-index:1}li._edit>.selectmenu-item{display:none}.selectmenu-item-edit{display:none;padding:.3rem 4rem .3rem .4rem;position:relative;white-space:nowrap;z-index:1}li:last-child .selectmenu-item-edit{padding-right:.4rem}.selectmenu-item-edit .admin__control-text{width:5.4rem;margin:0}li._edit .selectmenu-item-edit{display:block}.selectmenu-item-action{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:0 0;border:0;color:#333;display:block;font-size:1.4rem;font-weight:400;min-width:100%;padding:1rem 6rem 1rem 1.5rem;text-align:left;transition:background .2s linear;width:5rem}.selectmenu-item-action:focus,.selectmenu-item-action:hover{background:#e3e3e3}.abs-actions-split-xl .action-default,.page-actions .actions-split .action-default{margin-right:4rem}.abs-actions-split-xl .action-toggle,.page-actions .actions-split .action-toggle{padding-right:4rem}.abs-actions-split-xl .action-toggle:after,.page-actions .actions-split .action-toggle:after{border-width:.9rem .6rem 0;margin-top:-.3rem;right:1.4rem}.actions-split{position:relative;z-index:200}.actions-split._active,.actions-split.active,.actions-split:hover{box-shadow:0 0 0 1px #007bdb}.actions-split._active .action-toggle.action-primary,.actions-split._active .action-toggle.primary,.actions-split.active .action-toggle.action-primary,.actions-split.active .action-toggle.primary{background-color:#ba4000;border-color:#ba4000}.actions-split._active .dropdown-menu,.actions-split.active .dropdown-menu{opacity:1;visibility:visible;display:block}.actions-split .action-default,.actions-split .action-toggle{float:left;margin:0}.actions-split .action-default._active,.actions-split .action-default.active,.actions-split .action-default:hover,.actions-split .action-toggle._active,.actions-split .action-toggle.active,.actions-split .action-toggle:hover{box-shadow:none}.actions-split .action-default{margin-right:3.2rem;min-width:9.3rem}.actions-split .action-toggle{padding-right:3.2rem;border-left-color:rgba(0,0,0,.2);bottom:0;padding-left:0;position:absolute;right:0;top:0}.actions-split .action-toggle._active:after,.actions-split .action-toggle.active:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.actions-split .action-toggle:after{border-color:#000 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;right:1.2rem;top:50%;transition:all .2s linear;width:0}._active .actions-split .action-toggle:after,.active .actions-split .action-toggle:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.actions-split .action-toggle:hover:after{border-color:#000 transparent transparent}.actions-split .action-toggle.action-primary:after,.actions-split .action-toggle.action-secondary:after,.actions-split .action-toggle.primary:after,.actions-split .action-toggle.secondary:after{border-color:#fff transparent transparent}.actions-split .action-toggle>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.action-select-wrap{display:inline-block;position:relative}.action-select-wrap .action-select{padding-right:3.2rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;background-color:#fff;font-weight:400;text-align:left}.action-select-wrap .action-select._active:after,.action-select-wrap .action-select.active:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.action-select-wrap .action-select:after{border-color:#000 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;right:1.2rem;top:50%;transition:all .2s linear;width:0}._active .action-select-wrap .action-select:after,.active .action-select-wrap .action-select:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.action-select-wrap .action-select:hover:after{border-color:#000 transparent transparent}.action-select-wrap .action-select:hover,.action-select-wrap .action-select:hover:before{border-color:#878787}.action-select-wrap .action-select:before{background-color:#e3e3e3;border:1px solid #adadad;bottom:0;content:'';position:absolute;right:0;top:0;width:3.2rem}.action-select-wrap .action-select._active{border-color:#007bdb}.action-select-wrap .action-select._active:before{border-color:#007bdb #007bdb #007bdb #adadad}.action-select-wrap .action-select[disabled]{color:#333}.action-select-wrap .action-select[disabled]:after{border-color:#333 transparent transparent}.action-select-wrap._active{z-index:500}.action-select-wrap._active .action-select,.action-select-wrap._active .action-select:before{border-color:#007bdb}.action-select-wrap._active .action-select:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.action-select-wrap .abs-action-menu .action-submenu,.action-select-wrap .abs-action-menu .action-submenu .action-submenu,.action-select-wrap .action-menu,.action-select-wrap .action-menu .action-submenu,.action-select-wrap .actions-split .action-menu .action-submenu,.action-select-wrap .actions-split .action-menu .action-submenu .action-submenu,.action-select-wrap .actions-split .dropdown-menu .action-submenu,.action-select-wrap .actions-split .dropdown-menu .action-submenu .action-submenu{max-height:45rem;overflow-y:auto}.action-select-wrap .action-menu-items{left:0;position:absolute;right:0;top:100%}.action-select-wrap .action-menu-items>.abs-action-menu .action-submenu,.action-select-wrap .action-menu-items>.abs-action-menu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.action-menu,.action-select-wrap .action-menu-items>.action-menu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .action-menu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .action-menu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .dropdown-menu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .dropdown-menu .action-submenu .action-submenu{min-width:100%;position:static}.action-select-wrap .action-menu-items>.abs-action-menu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.abs-action-menu .action-submenu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.action-menu .action-submenu,.action-select-wrap .action-menu-items>.action-menu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .action-menu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .action-menu .action-submenu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .dropdown-menu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .dropdown-menu .action-submenu .action-submenu .action-submenu{position:absolute}.action-multicheck-wrap{display:inline-block;height:1.6rem;padding-top:1px;position:relative;width:3.1rem;z-index:200}.action-multicheck-wrap:hover .action-multicheck-toggle,.action-multicheck-wrap:hover .admin__control-checkbox+label:before{border-color:#878787}.action-multicheck-wrap._active .action-multicheck-toggle,.action-multicheck-wrap._active .admin__control-checkbox+label:before{border-color:#007bdb}.action-multicheck-wrap._active .abs-action-menu .action-submenu,.action-multicheck-wrap._active .abs-action-menu .action-submenu .action-submenu,.action-multicheck-wrap._active .action-menu,.action-multicheck-wrap._active .action-menu .action-submenu,.action-multicheck-wrap._active .actions-split .action-menu .action-submenu,.action-multicheck-wrap._active .actions-split .action-menu .action-submenu .action-submenu,.action-multicheck-wrap._active .actions-split .dropdown-menu .action-submenu,.action-multicheck-wrap._active .actions-split .dropdown-menu .action-submenu .action-submenu{opacity:1;visibility:visible;display:block}.action-multicheck-wrap._disabled .admin__control-checkbox+label:before{background-color:#fff}.action-multicheck-wrap._disabled .action-multicheck-toggle,.action-multicheck-wrap._disabled .admin__control-checkbox+label:before{border-color:#adadad;opacity:1}.action-multicheck-wrap .action-multicheck-toggle,.action-multicheck-wrap .admin__control-checkbox,.action-multicheck-wrap .admin__control-checkbox+label{float:left}.action-multicheck-wrap .action-multicheck-toggle{border-radius:0 1px 1px 0;height:1.6rem;margin-left:-1px;padding:0;position:relative;transition:border-color .1s linear;width:1.6rem}.action-multicheck-wrap .action-multicheck-toggle._active:after,.action-multicheck-wrap .action-multicheck-toggle.active:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.action-multicheck-wrap .action-multicheck-toggle:after{border-color:#000 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;top:50%;transition:all .2s linear;width:0}._active .action-multicheck-wrap .action-multicheck-toggle:after,.active .action-multicheck-wrap .action-multicheck-toggle:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.action-multicheck-wrap .action-multicheck-toggle:hover:after{border-color:#000 transparent transparent}.action-multicheck-wrap .action-multicheck-toggle:focus{border-color:#007bdb}.action-multicheck-wrap .action-multicheck-toggle:after{right:.3rem}.action-multicheck-wrap .action-multicheck-toggle>span{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.action-multicheck-wrap .abs-action-menu .action-submenu,.action-multicheck-wrap .abs-action-menu .action-submenu .action-submenu,.action-multicheck-wrap .action-menu,.action-multicheck-wrap .action-menu .action-submenu,.action-multicheck-wrap .actions-split .action-menu .action-submenu,.action-multicheck-wrap .actions-split .action-menu .action-submenu .action-submenu,.action-multicheck-wrap .actions-split .dropdown-menu .action-submenu,.action-multicheck-wrap .actions-split .dropdown-menu .action-submenu .action-submenu{left:-1.2rem;margin-top:1px;right:auto;text-align:left}.action-multicheck-wrap .action-menu-item{white-space:nowrap}.admin__action-multiselect-wrap{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.admin__action-multiselect-wrap.action-select-wrap:focus{box-shadow:none}.admin__action-multiselect-wrap.action-select-wrap .abs-action-menu .action-submenu,.admin__action-multiselect-wrap.action-select-wrap .abs-action-menu .action-submenu .action-submenu,.admin__action-multiselect-wrap.action-select-wrap .action-menu,.admin__action-multiselect-wrap.action-select-wrap .action-menu .action-submenu,.admin__action-multiselect-wrap.action-select-wrap .actions-split .action-menu .action-submenu,.admin__action-multiselect-wrap.action-select-wrap .actions-split .action-menu .action-submenu .action-submenu,.admin__action-multiselect-wrap.action-select-wrap .actions-split .dropdown-menu .action-submenu,.admin__action-multiselect-wrap.action-select-wrap .actions-split .dropdown-menu .action-submenu .action-submenu{max-height:none;overflow-y:inherit}.admin__action-multiselect-wrap .action-menu-item{transition:background-color .1s linear}.admin__action-multiselect-wrap .action-menu-item._selected{background-color:#e3e3e3}.admin__action-multiselect-wrap .action-menu-item._hover{background-color:#e0f6fe}.admin__action-multiselect-wrap .admin__action-multiselect{border:1px solid #adadad;cursor:pointer;min-height:3.2rem;padding:.7rem 3.6rem .6rem 1em;white-space:normal}.admin__action-multiselect-wrap .admin__action-multiselect:after{bottom:1.25rem;top:auto}.admin__action-multiselect-wrap .admin__action-multiselect:before{height:3.2rem;top:auto;width:3.2rem}.abs-action-menu .action-submenu,.abs-action-menu .action-submenu .action-submenu,.action-menu,.action-menu .action-submenu,.actions-split .action-menu .action-submenu,.actions-split .action-menu .action-submenu .action-submenu,.actions-split .dropdown-menu .action-submenu,.actions-split .dropdown-menu .action-submenu .action-submenu{text-align:left}.admin__action-multiselect-label{position:relative;z-index:1}.admin__action-multiselect-label:before{margin-right:.5rem}.admin__action-multiselect-search-wrap{margin-bottom:1rem;padding:1rem;position:relative}.admin__action-multiselect-search-wrap+.admin__action-multiselect-menu-inner{border-bottom:1px solid #e3e3e3;border-top:1px solid #e3e3e3;margin-bottom:1rem}.admin__action-multiselect-menu-inner{margin-bottom:0;max-height:17.2rem;overflow-y:auto}.admin__action-multiselect-search{padding-right:3rem;width:100%}.admin__action-multiselect-search-label{display:block;font-size:1.5rem;height:1em;overflow:hidden;position:absolute;right:2.2rem;top:1.7rem;width:1em}.admin__action-multiselect-search-label:before{content:'\e60c'}.admin__action-multiselect-actions-wrap{text-align:center}.admin__action-multiselect-actions-wrap .action-default{font-size:1.3rem;min-width:13rem}.admin__action-multiselect-crumb{background-color:#f5f5f5;border:1px solid #a79d95;border-radius:1px;display:inline-block;font-size:1.2rem;margin:-.3rem .9rem .5rem -1.1rem;padding:.3rem 2.4rem .4rem 1rem;position:relative;transition:border-color .1s linear}.admin__action-multiselect-crumb:hover{border-color:#908379}.admin__action-multiselect-crumb .action-close{bottom:0;font-size:.5em;position:absolute;right:0;top:0;width:2rem}.admin__action-multiselect-crumb .action-close:hover{color:#000}.admin__action-multiselect-crumb .action-close:active,.admin__action-multiselect-crumb .action-close:focus{background-color:transparent}.admin__action-multiselect-crumb .action-close:active{-webkit-transform:scale(0.9);-ms-transform:scale(0.9);transform:scale(0.9)}.abs-action-delete,.abs-action-reset,.action-close,.notifications-close,.search-global-field._active .search-global-action{background-color:transparent;border:none;border-radius:0;box-shadow:none;margin:0;padding:0}.abs-action-delete:hover,.abs-action-reset:hover,.action-close:hover,.notifications-close:hover,.search-global-field._active .search-global-action:hover{background-color:transparent;border:none;box-shadow:none}.abs-action-default,.abs-action-pattern,.abs-action-primary,.abs-action-quaternary,.abs-action-secondary,.abs-action-tertiary,.action-default,.action-primary,.action-quaternary,.action-secondary,.action-tertiary,.page-actions .page-actions-buttons>button,.page-actions .page-actions-buttons>button.action-primary,.page-actions .page-actions-buttons>button.primary,.page-actions>button,.page-actions>button.action-primary,.page-actions>button.primary,button,button.primary,button.secondary,button.tertiary{border:1px solid;border-radius:0;display:inline-block;font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.4rem;font-weight:600;line-height:1.36;padding:.6rem 1em;text-align:center;vertical-align:baseline}.abs-action-default.disabled,.abs-action-default[disabled],.abs-action-pattern.disabled,.abs-action-pattern[disabled],.abs-action-primary.disabled,.abs-action-primary[disabled],.abs-action-quaternary.disabled,.abs-action-quaternary[disabled],.abs-action-secondary.disabled,.abs-action-secondary[disabled],.abs-action-tertiary.disabled,.abs-action-tertiary[disabled],.action-default.disabled,.action-default[disabled],.action-primary.disabled,.action-primary[disabled],.action-quaternary.disabled,.action-quaternary[disabled],.action-secondary.disabled,.action-secondary[disabled],.action-tertiary.disabled,.action-tertiary[disabled],.page-actions .page-actions-buttons>button.action-primary.disabled,.page-actions .page-actions-buttons>button.action-primary[disabled],.page-actions .page-actions-buttons>button.disabled,.page-actions .page-actions-buttons>button.primary.disabled,.page-actions .page-actions-buttons>button.primary[disabled],.page-actions .page-actions-buttons>button[disabled],.page-actions>button.action-primary.disabled,.page-actions>button.action-primary[disabled],.page-actions>button.disabled,.page-actions>button.primary.disabled,.page-actions>button.primary[disabled],.page-actions>button[disabled],button.disabled,button.primary.disabled,button.primary[disabled],button.secondary.disabled,button.secondary[disabled],button.tertiary.disabled,button.tertiary[disabled],button[disabled]{cursor:default;opacity:.5;pointer-events:none}.abs-action-l,.page-actions .page-actions-buttons>button,.page-actions .page-actions-buttons>button.action-primary,.page-actions .page-actions-buttons>button.primary,.page-actions button,.page-actions>button.action-primary,.page-actions>button.primary{font-size:1.6rem;letter-spacing:.025em;padding-bottom:.6875em;padding-top:.6875em}.abs-action-delete{display:inline-block;font-size:1.6rem;margin-left:1.2rem;padding-top:.7rem;text-decoration:none;vertical-align:middle}.abs-action-delete:after{color:#666;content:'\e630'}.abs-action-delete:hover:after{color:#35302c}.abs-action-default,button{background:#e3e3e3;border-color:#adadad;color:#514943}.abs-action-default:active,.abs-action-default:focus,.abs-action-default:hover,button:active,button:focus,button:hover{background-color:#dbdbdb;color:#514943;text-decoration:none}.abs-action-primary,.page-actions .page-actions-buttons>button.action-primary,.page-actions .page-actions-buttons>button.primary,.page-actions>button.action-primary,.page-actions>button.primary,button.primary{background-color:#eb5202;border-color:#eb5202;color:#fff;text-shadow:1px 1px 0 rgba(0,0,0,.25)}.abs-action-primary:active,.abs-action-primary:focus,.abs-action-primary:hover,.page-actions .page-actions-buttons>button.action-primary:active,.page-actions .page-actions-buttons>button.action-primary:focus,.page-actions .page-actions-buttons>button.action-primary:hover,.page-actions .page-actions-buttons>button.primary:active,.page-actions .page-actions-buttons>button.primary:focus,.page-actions .page-actions-buttons>button.primary:hover,.page-actions>button.action-primary:active,.page-actions>button.action-primary:focus,.page-actions>button.action-primary:hover,.page-actions>button.primary:active,.page-actions>button.primary:focus,.page-actions>button.primary:hover,button.primary:active,button.primary:focus,button.primary:hover{background-color:#ba4000;border-color:#b84002;box-shadow:0 0 0 1px #007bdb;color:#fff;text-decoration:none}.abs-action-primary.disabled,.abs-action-primary[disabled],.page-actions .page-actions-buttons>button.action-primary.disabled,.page-actions .page-actions-buttons>button.action-primary[disabled],.page-actions .page-actions-buttons>button.primary.disabled,.page-actions .page-actions-buttons>button.primary[disabled],.page-actions>button.action-primary.disabled,.page-actions>button.action-primary[disabled],.page-actions>button.primary.disabled,.page-actions>button.primary[disabled],button.primary.disabled,button.primary[disabled]{cursor:default;opacity:.5;pointer-events:none}.abs-action-secondary,button.secondary{background-color:#514943;border-color:#514943;color:#fff;text-shadow:1px 1px 1px rgba(0,0,0,.3)}.abs-action-secondary:active,.abs-action-secondary:focus,.abs-action-secondary:hover,button.secondary:active,button.secondary:focus,button.secondary:hover{background-color:#35302c;border-color:#35302c;box-shadow:0 0 0 1px #007bdb;color:#fff;text-decoration:none}.abs-action-secondary:active,button.secondary:active{background-color:#35302c}.abs-action-tertiary,button.tertiary{background-color:transparent;border-color:transparent;text-shadow:none;color:#008bdb}.abs-action-tertiary:active,.abs-action-tertiary:focus,.abs-action-tertiary:hover,button.tertiary:active,button.tertiary:focus,button.tertiary:hover{background-color:transparent;border-color:transparent;box-shadow:none;color:#0fa7ff;text-decoration:underline}.abs-action-quaternary,.page-actions .page-actions-buttons>button,.page-actions>button{background-color:transparent;border-color:transparent;text-shadow:none;color:#333}.abs-action-quaternary:active,.abs-action-quaternary:focus,.abs-action-quaternary:hover,.page-actions .page-actions-buttons>button:active,.page-actions .page-actions-buttons>button:focus,.page-actions .page-actions-buttons>button:hover,.page-actions>button:active,.page-actions>button:focus,.page-actions>button:hover{background-color:transparent;border-color:transparent;box-shadow:none;color:#1a1a1a}.abs-action-menu,.actions-split .abs-action-menu .action-submenu,.actions-split .abs-action-menu .action-submenu .action-submenu,.actions-split .action-menu,.actions-split .action-menu .action-submenu,.actions-split .actions-split .dropdown-menu .action-submenu,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu,.actions-split .dropdown-menu{text-align:left;background-color:#fff;border:1px solid #007bdb;border-radius:1px;box-shadow:1px 1px 5px rgba(0,0,0,.5);color:#333;display:none;font-weight:400;left:0;list-style:none;margin:2px 0 0;min-width:0;padding:0;position:absolute;right:0;top:100%}.abs-action-menu._active,.actions-split .abs-action-menu .action-submenu .action-submenu._active,.actions-split .abs-action-menu .action-submenu._active,.actions-split .action-menu .action-submenu._active,.actions-split .action-menu._active,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu._active,.actions-split .actions-split .dropdown-menu .action-submenu._active,.actions-split .dropdown-menu._active{display:block}.abs-action-menu>li,.actions-split .abs-action-menu .action-submenu .action-submenu>li,.actions-split .abs-action-menu .action-submenu>li,.actions-split .action-menu .action-submenu>li,.actions-split .action-menu>li,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li,.actions-split .actions-split .dropdown-menu .action-submenu>li,.actions-split .dropdown-menu>li{border:none;display:block;padding:0;transition:background-color .1s linear}.abs-action-menu>li>a:hover,.actions-split .abs-action-menu .action-submenu .action-submenu>li>a:hover,.actions-split .abs-action-menu .action-submenu>li>a:hover,.actions-split .action-menu .action-submenu>li>a:hover,.actions-split .action-menu>li>a:hover,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li>a:hover,.actions-split .actions-split .dropdown-menu .action-submenu>li>a:hover,.actions-split .dropdown-menu>li>a:hover{text-decoration:none}.abs-action-menu>li._visible,.abs-action-menu>li:hover,.actions-split .abs-action-menu .action-submenu .action-submenu>li._visible,.actions-split .abs-action-menu .action-submenu .action-submenu>li:hover,.actions-split .abs-action-menu .action-submenu>li._visible,.actions-split .abs-action-menu .action-submenu>li:hover,.actions-split .action-menu .action-submenu>li._visible,.actions-split .action-menu .action-submenu>li:hover,.actions-split .action-menu>li._visible,.actions-split .action-menu>li:hover,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li._visible,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li:hover,.actions-split .actions-split .dropdown-menu .action-submenu>li._visible,.actions-split .actions-split .dropdown-menu .action-submenu>li:hover,.actions-split .dropdown-menu>li._visible,.actions-split .dropdown-menu>li:hover{background-color:#e3e3e3}.abs-action-menu>li:active,.actions-split .abs-action-menu .action-submenu .action-submenu>li:active,.actions-split .abs-action-menu .action-submenu>li:active,.actions-split .action-menu .action-submenu>li:active,.actions-split .action-menu>li:active,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li:active,.actions-split .actions-split .dropdown-menu .action-submenu>li:active,.actions-split .dropdown-menu>li:active{background-color:#cacaca}.abs-action-menu>li._parent,.actions-split .abs-action-menu .action-submenu .action-submenu>li._parent,.actions-split .abs-action-menu .action-submenu>li._parent,.actions-split .action-menu .action-submenu>li._parent,.actions-split .action-menu>li._parent,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li._parent,.actions-split .actions-split .dropdown-menu .action-submenu>li._parent,.actions-split .dropdown-menu>li._parent{display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.abs-action-menu>li._parent>.action-menu-item,.actions-split .abs-action-menu .action-submenu .action-submenu>li._parent>.action-menu-item,.actions-split .abs-action-menu .action-submenu>li._parent>.action-menu-item,.actions-split .action-menu .action-submenu>li._parent>.action-menu-item,.actions-split .action-menu>li._parent>.action-menu-item,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li._parent>.action-menu-item,.actions-split .actions-split .dropdown-menu .action-submenu>li._parent>.action-menu-item,.actions-split .dropdown-menu>li._parent>.action-menu-item{min-width:100%}.abs-action-menu .action-menu-item,.abs-action-menu .item,.actions-split .abs-action-menu .action-submenu .action-menu-item,.actions-split .abs-action-menu .action-submenu .action-submenu .action-menu-item,.actions-split .abs-action-menu .action-submenu .action-submenu .item,.actions-split .abs-action-menu .action-submenu .item,.actions-split .action-menu .action-menu-item,.actions-split .action-menu .action-submenu .action-menu-item,.actions-split .action-menu .action-submenu .item,.actions-split .action-menu .item,.actions-split .actions-split .dropdown-menu .action-submenu .action-menu-item,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu .action-menu-item,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu .item,.actions-split .actions-split .dropdown-menu .action-submenu .item,.actions-split .dropdown-menu .action-menu-item,.actions-split .dropdown-menu .item{display:block;padding:.6875em 1em;cursor:pointer}.abs-action-menu .action-submenu,.actions-split .action-menu .action-submenu,.actions-split .action-menu .action-submenu .action-submenu,.actions-split .dropdown-menu .action-submenu{bottom:auto;left:auto;margin-left:0;margin-top:-1px;position:absolute;right:auto;top:auto}.ie9 .abs-action-menu .action-submenu,.ie9 .actions-split .abs-action-menu .action-submenu .action-submenu,.ie9 .actions-split .abs-action-menu .action-submenu .action-submenu .action-submenu,.ie9 .actions-split .action-menu .action-submenu,.ie9 .actions-split .action-menu .action-submenu .action-submenu,.ie9 .actions-split .actions-split .dropdown-menu .action-submenu .action-submenu,.ie9 .actions-split .actions-split .dropdown-menu .action-submenu .action-submenu .action-submenu,.ie9 .actions-split .dropdown-menu .action-submenu{margin-left:99%;margin-top:-3.5rem}.abs-action-menu a.action-menu-item,.actions-split .abs-action-menu .action-submenu .action-submenu a.action-menu-item,.actions-split .abs-action-menu .action-submenu a.action-menu-item,.actions-split .action-menu .action-submenu a.action-menu-item,.actions-split .action-menu a.action-menu-item,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu a.action-menu-item,.actions-split .actions-split .dropdown-menu .action-submenu a.action-menu-item,.actions-split .dropdown-menu a.action-menu-item{color:#333}.abs-action-menu a.action-menu-item:focus,.actions-split .abs-action-menu .action-submenu .action-submenu a.action-menu-item:focus,.actions-split .abs-action-menu .action-submenu a.action-menu-item:focus,.actions-split .action-menu .action-submenu a.action-menu-item:focus,.actions-split .action-menu a.action-menu-item:focus,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu a.action-menu-item:focus,.actions-split .actions-split .dropdown-menu .action-submenu a.action-menu-item:focus,.actions-split .dropdown-menu a.action-menu-item:focus{background-color:#e3e3e3;box-shadow:none}.abs-action-wrap-triangle{position:relative}.abs-action-wrap-triangle .action-default{width:100%}.abs-action-wrap-triangle .action-default:after,.abs-action-wrap-triangle .action-default:before{border-style:solid;content:'';height:0;position:absolute;top:0;width:0}.abs-action-wrap-triangle .action-default:active,.abs-action-wrap-triangle .action-default:focus,.abs-action-wrap-triangle .action-default:hover{box-shadow:none}._keyfocus .abs-action-wrap-triangle .action-default:focus{box-shadow:0 0 0 1px #007bdb}.ie10 .abs-action-wrap-triangle .action-default.disabled,.ie10 .abs-action-wrap-triangle .action-default[disabled],.ie9 .abs-action-wrap-triangle .action-default.disabled,.ie9 .abs-action-wrap-triangle .action-default[disabled]{background-color:#fcfcfc;opacity:1;text-shadow:none}.abs-action-wrap-triangle-right{display:inline-block;padding-right:1.6rem;position:relative}.abs-action-wrap-triangle-right .action-default:after,.abs-action-wrap-triangle-right .action-default:before{border-color:transparent transparent transparent #e3e3e3;border-width:1.7rem 0 1.6rem 1.7rem;left:100%;margin-left:-1.7rem}.abs-action-wrap-triangle-right .action-default:before{border-left-color:#949494;right:-1px}.abs-action-wrap-triangle-right .action-default:active:after,.abs-action-wrap-triangle-right .action-default:focus:after,.abs-action-wrap-triangle-right .action-default:hover:after{border-left-color:#dbdbdb}.ie10 .abs-action-wrap-triangle-right .action-default.disabled:after,.ie10 .abs-action-wrap-triangle-right .action-default[disabled]:after,.ie9 .abs-action-wrap-triangle-right .action-default.disabled:after,.ie9 .abs-action-wrap-triangle-right .action-default[disabled]:after{border-color:transparent transparent transparent #fcfcfc}.abs-action-wrap-triangle-right .action-primary:after{border-color:transparent transparent transparent #eb5202}.abs-action-wrap-triangle-right .action-primary:active:after,.abs-action-wrap-triangle-right .action-primary:focus:after,.abs-action-wrap-triangle-right .action-primary:hover:after{border-left-color:#ba4000}.abs-action-wrap-triangle-left{display:inline-block;padding-left:1.6rem}.abs-action-wrap-triangle-left .action-default{text-indent:-.85rem}.abs-action-wrap-triangle-left .action-default:after,.abs-action-wrap-triangle-left .action-default:before{border-color:transparent #e3e3e3 transparent transparent;border-width:1.7rem 1.7rem 1.6rem 0;margin-right:-1.7rem;right:100%}.abs-action-wrap-triangle-left .action-default:before{border-right-color:#949494;left:-1px}.abs-action-wrap-triangle-left .action-default:active:after,.abs-action-wrap-triangle-left .action-default:focus:after,.abs-action-wrap-triangle-left .action-default:hover:after{border-right-color:#dbdbdb}.ie10 .abs-action-wrap-triangle-left .action-default.disabled:after,.ie10 .abs-action-wrap-triangle-left .action-default[disabled]:after,.ie9 .abs-action-wrap-triangle-left .action-default.disabled:after,.ie9 .abs-action-wrap-triangle-left .action-default[disabled]:after{border-color:transparent #fcfcfc transparent transparent}.abs-action-wrap-triangle-left .action-primary:after{border-color:transparent #eb5202 transparent transparent}.abs-action-wrap-triangle-left .action-primary:active:after,.abs-action-wrap-triangle-left .action-primary:focus:after,.abs-action-wrap-triangle-left .action-primary:hover:after{border-right-color:#ba4000}.action-default,button{background:#e3e3e3;border-color:#adadad;color:#514943}.action-default:active,.action-default:focus,.action-default:hover,button:active,button:focus,button:hover{background-color:#dbdbdb;color:#514943;text-decoration:none}.action-primary{background-color:#eb5202;border-color:#eb5202;color:#fff;text-shadow:1px 1px 0 rgba(0,0,0,.25)}.action-primary:active,.action-primary:focus,.action-primary:hover{background-color:#ba4000;border-color:#b84002;box-shadow:0 0 0 1px #007bdb;color:#fff;text-decoration:none}.action-primary.disabled,.action-primary[disabled]{cursor:default;opacity:.5;pointer-events:none}.action-secondary{background-color:#514943;border-color:#514943;color:#fff;text-shadow:1px 1px 1px rgba(0,0,0,.3)}.action-secondary:active,.action-secondary:focus,.action-secondary:hover{background-color:#35302c;border-color:#35302c;box-shadow:0 0 0 1px #007bdb;color:#fff;text-decoration:none}.action-secondary:active{background-color:#35302c}.action-quaternary,.action-tertiary{background-color:transparent;border-color:transparent;text-shadow:none}.action-quaternary:active,.action-quaternary:focus,.action-quaternary:hover,.action-tertiary:active,.action-tertiary:focus,.action-tertiary:hover{background-color:transparent;border-color:transparent;box-shadow:none}.action-tertiary{color:#008bdb}.action-tertiary:active,.action-tertiary:focus,.action-tertiary:hover{color:#0fa7ff;text-decoration:underline}.action-quaternary{color:#333}.action-quaternary:active,.action-quaternary:focus,.action-quaternary:hover{color:#1a1a1a}.action-close>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.action-close:active{-webkit-transform:scale(0.9);-ms-transform:scale(0.9);transform:scale(0.9)}.action-close:before{content:'\e62f';transition:color .1s linear}.action-close:hover{cursor:pointer;text-decoration:none}.abs-action-menu .action-submenu,.abs-action-menu .action-submenu .action-submenu,.action-menu,.action-menu .action-submenu,.actions-split .action-menu .action-submenu,.actions-split .action-menu .action-submenu .action-submenu,.actions-split .dropdown-menu .action-submenu,.actions-split .dropdown-menu .action-submenu .action-submenu{background-color:#fff;border:1px solid #007bdb;border-radius:1px;box-shadow:1px 1px 5px rgba(0,0,0,.5);color:#333;display:none;font-weight:400;left:0;list-style:none;margin:2px 0 0;min-width:0;padding:0;position:absolute;right:0;top:100%}.abs-action-menu .action-submenu .action-submenu._active,.abs-action-menu .action-submenu._active,.action-menu .action-submenu._active,.action-menu._active,.actions-split .action-menu .action-submenu .action-submenu._active,.actions-split .action-menu .action-submenu._active,.actions-split .dropdown-menu .action-submenu .action-submenu._active,.actions-split .dropdown-menu .action-submenu._active{display:block}.abs-action-menu .action-submenu .action-submenu>li,.abs-action-menu .action-submenu>li,.action-menu .action-submenu>li,.action-menu>li,.actions-split .action-menu .action-submenu .action-submenu>li,.actions-split .action-menu .action-submenu>li,.actions-split .dropdown-menu .action-submenu .action-submenu>li,.actions-split .dropdown-menu .action-submenu>li{border:none;display:block;padding:0;transition:background-color .1s linear}.abs-action-menu .action-submenu .action-submenu>li>a:hover,.abs-action-menu .action-submenu>li>a:hover,.action-menu .action-submenu>li>a:hover,.action-menu>li>a:hover,.actions-split .action-menu .action-submenu .action-submenu>li>a:hover,.actions-split .action-menu .action-submenu>li>a:hover,.actions-split .dropdown-menu .action-submenu .action-submenu>li>a:hover,.actions-split .dropdown-menu .action-submenu>li>a:hover{text-decoration:none}.abs-action-menu .action-submenu .action-submenu>li._visible,.abs-action-menu .action-submenu .action-submenu>li:hover,.abs-action-menu .action-submenu>li._visible,.abs-action-menu .action-submenu>li:hover,.action-menu .action-submenu>li._visible,.action-menu .action-submenu>li:hover,.action-menu>li._visible,.action-menu>li:hover,.actions-split .action-menu .action-submenu .action-submenu>li._visible,.actions-split .action-menu .action-submenu .action-submenu>li:hover,.actions-split .action-menu .action-submenu>li._visible,.actions-split .action-menu .action-submenu>li:hover,.actions-split .dropdown-menu .action-submenu .action-submenu>li._visible,.actions-split .dropdown-menu .action-submenu .action-submenu>li:hover,.actions-split .dropdown-menu .action-submenu>li._visible,.actions-split .dropdown-menu .action-submenu>li:hover{background-color:#e3e3e3}.abs-action-menu .action-submenu .action-submenu>li:active,.abs-action-menu .action-submenu>li:active,.action-menu .action-submenu>li:active,.action-menu>li:active,.actions-split .action-menu .action-submenu .action-submenu>li:active,.actions-split .action-menu .action-submenu>li:active,.actions-split .dropdown-menu .action-submenu .action-submenu>li:active,.actions-split .dropdown-menu .action-submenu>li:active{background-color:#cacaca}.abs-action-menu .action-submenu .action-submenu>li._parent,.abs-action-menu .action-submenu>li._parent,.action-menu .action-submenu>li._parent,.action-menu>li._parent,.actions-split .action-menu .action-submenu .action-submenu>li._parent,.actions-split .action-menu .action-submenu>li._parent,.actions-split .dropdown-menu .action-submenu .action-submenu>li._parent,.actions-split .dropdown-menu .action-submenu>li._parent{display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.abs-action-menu .action-submenu .action-submenu>li._parent>.action-menu-item,.abs-action-menu .action-submenu>li._parent>.action-menu-item,.action-menu .action-submenu>li._parent>.action-menu-item,.action-menu>li._parent>.action-menu-item,.actions-split .action-menu .action-submenu .action-submenu>li._parent>.action-menu-item,.actions-split .action-menu .action-submenu>li._parent>.action-menu-item,.actions-split .dropdown-menu .action-submenu .action-submenu>li._parent>.action-menu-item,.actions-split .dropdown-menu .action-submenu>li._parent>.action-menu-item{min-width:100%}.abs-action-menu .action-submenu .action-menu-item,.abs-action-menu .action-submenu .action-submenu .action-menu-item,.abs-action-menu .action-submenu .action-submenu .item,.abs-action-menu .action-submenu .item,.action-menu .action-menu-item,.action-menu .action-submenu .action-menu-item,.action-menu .action-submenu .item,.action-menu .item,.actions-split .action-menu .action-submenu .action-menu-item,.actions-split .action-menu .action-submenu .action-submenu .action-menu-item,.actions-split .action-menu .action-submenu .action-submenu .item,.actions-split .action-menu .action-submenu .item,.actions-split .dropdown-menu .action-submenu .action-menu-item,.actions-split .dropdown-menu .action-submenu .action-submenu .action-menu-item,.actions-split .dropdown-menu .action-submenu .action-submenu .item,.actions-split .dropdown-menu .action-submenu .item{display:block;padding:.6875em 1em;cursor:pointer}.abs-action-menu .action-submenu .action-submenu,.action-menu .action-submenu,.actions-split .action-menu .action-submenu .action-submenu,.actions-split .dropdown-menu .action-submenu .action-submenu{bottom:auto;left:auto;margin-left:0;margin-top:-1px;position:absolute;right:auto;top:auto}.ie9 .abs-action-menu .action-submenu .action-submenu,.ie9 .abs-action-menu .action-submenu .action-submenu .action-submenu,.ie9 .action-menu .action-submenu,.ie9 .action-menu .action-submenu .action-submenu,.ie9 .actions-split .action-menu .action-submenu .action-submenu,.ie9 .actions-split .action-menu .action-submenu .action-submenu .action-submenu,.ie9 .actions-split .dropdown-menu .action-submenu .action-submenu,.ie9 .actions-split .dropdown-menu .action-submenu .action-submenu .action-submenu{margin-left:99%;margin-top:-3.5rem}.abs-action-menu .action-submenu .action-submenu a.action-menu-item,.abs-action-menu .action-submenu a.action-menu-item,.action-menu .action-submenu a.action-menu-item,.action-menu a.action-menu-item,.actions-split .action-menu .action-submenu .action-submenu a.action-menu-item,.actions-split .action-menu .action-submenu a.action-menu-item,.actions-split .dropdown-menu .action-submenu .action-submenu a.action-menu-item,.actions-split .dropdown-menu .action-submenu a.action-menu-item{color:#333}.abs-action-menu .action-submenu .action-submenu a.action-menu-item:focus,.abs-action-menu .action-submenu a.action-menu-item:focus,.action-menu .action-submenu a.action-menu-item:focus,.action-menu a.action-menu-item:focus,.actions-split .action-menu .action-submenu .action-submenu a.action-menu-item:focus,.actions-split .action-menu .action-submenu a.action-menu-item:focus,.actions-split .dropdown-menu .action-submenu .action-submenu a.action-menu-item:focus,.actions-split .dropdown-menu .action-submenu a.action-menu-item:focus{background-color:#e3e3e3;box-shadow:none}.messages .message:last-child{margin:0 0 2rem}.message{background:#fffbbb;border:none;border-radius:0;color:#333;font-size:1.4rem;margin:0 0 1px;padding:1.8rem 4rem 1.8rem 5.5rem;position:relative;text-shadow:none}.message:before{background:0 0;border:0;color:#007bdb;content:'\e61a';font-family:Icons;font-size:1.9rem;font-style:normal;font-weight:400;height:auto;left:1.9rem;line-height:inherit;margin-top:-1.3rem;position:absolute;speak:none;text-shadow:none;top:50%;width:auto}.message-notice:before{color:#007bdb;content:'\e61a'}.message-warning:before{color:#eb5202;content:'\e623'}.message-error{background:#fcc}.message-error:before{color:#e22626;content:'\e632';font-size:1.5rem;left:2.2rem;margin-top:-1rem}.message-success:before{color:#79a22e;content:'\e62d'}.message-spinner:before{display:none}.message-spinner .spinner{font-size:2.5rem;left:1.5rem;position:absolute;top:1.5rem}.message-in-rating-edit{margin-left:1.8rem;margin-right:1.8rem}.modal-popup .action-close,.modal-slide .action-close{color:#736963;position:absolute;right:0;top:0}.modal-popup .action-close:active,.modal-slide .action-close:active{-webkit-transform:none;-ms-transform:none;transform:none}.modal-popup .action-close:active:before,.modal-slide .action-close:active:before{font-size:1.8rem}.modal-popup .action-close:hover:before,.modal-slide .action-close:hover:before{color:#58504b}.modal-popup .action-close:before,.modal-slide .action-close:before{font-size:2rem}.modal-popup .modal-title{font-size:2.4rem;margin-right:6.4rem}.modal-popup .action-close{padding:3rem}.modal-popup .action-close:active,.modal-popup .action-close:focus{background:0 0;padding-right:3.1rem;padding-top:3.1rem}.modal-slide .modal-title{font-size:2.1rem;margin-right:5.7rem}.modal-slide .action-close{padding:2.1rem 2.6rem}.modal-slide .action-close:active{padding-right:2.7rem;padding-top:2.2rem}.modal-slide .page-main-actions{margin-bottom:.6rem;margin-top:2.1rem}.modal-title{font-weight:400;margin-bottom:0;min-height:1em}.spinner{display:inline-block;font-size:4rem;height:1em;margin-right:1.5rem;position:relative;width:1em}.spinner>span:nth-child(1){-webkit-animation-delay:.27s;animation-delay:.27s;-webkit-transform:rotate(-315deg);-ms-transform:rotate(-315deg);transform:rotate(-315deg)}.spinner>span:nth-child(2){-webkit-animation-delay:.36s;animation-delay:.36s;-webkit-transform:rotate(-270deg);-ms-transform:rotate(-270deg);transform:rotate(-270deg)}.spinner>span:nth-child(3){-webkit-animation-delay:.45s;animation-delay:.45s;-webkit-transform:rotate(-225deg);-ms-transform:rotate(-225deg);transform:rotate(-225deg)}.spinner>span:nth-child(4){-webkit-animation-delay:.54s;animation-delay:.54s;-webkit-transform:rotate(-180deg);-ms-transform:rotate(-180deg);transform:rotate(-180deg)}.spinner>span:nth-child(5){-webkit-animation-delay:.63s;animation-delay:.63s;-webkit-transform:rotate(-135deg);-ms-transform:rotate(-135deg);transform:rotate(-135deg)}.spinner>span:nth-child(6){-webkit-animation-delay:.72s;animation-delay:.72s;-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);transform:rotate(-90deg)}.spinner>span:nth-child(7){-webkit-animation-delay:.81s;animation-delay:.81s;-webkit-transform:rotate(-45deg);-ms-transform:rotate(-45deg);transform:rotate(-45deg)}.spinner>span:nth-child(8){-webkit-animation-delay:.9;animation-delay:.9;-webkit-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg)}@-webkit-keyframes fade{0%{background-color:#514943}100%{background-color:#fff}}@keyframes fade{0%{background-color:#514943}100%{background-color:#fff}}.spinner>span{-webkit-transform:scale(0.4);-ms-transform:scale(0.4);transform:scale(0.4);-webkit-animation-name:fade;animation-name:fade;-webkit-animation-duration:.72s;animation-duration:.72s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-direction:linear;animation-direction:linear;background-color:#fff;border-radius:6px;clip:rect(0 .28571429em .1em 0);height:.1em;margin-top:.5em;position:absolute;width:1em}.ie9 .spinner{background:url(../images/ajax-loader.gif) center no-repeat}.ie9 .spinner>span{display:none}.popup-loading{background:rgba(255,255,255,.8);border-color:#ef672f;color:#ef672f;font-size:14px;font-weight:700;left:50%;margin-left:-100px;padding:100px 0 10px;position:fixed;text-align:center;top:40%;width:200px;z-index:1003}.popup-loading:after{background-image:url(../images/loader-1.gif);content:'';height:64px;left:50%;margin:-32px 0 0 -32px;position:absolute;top:40%;width:64px;z-index:2}.loading-mask,.loading-old{background:rgba(255,255,255,.4);bottom:0;left:0;position:fixed;right:0;top:0;z-index:2003}.loading-mask img,.loading-old img{display:none}.loading-mask p,.loading-old p{margin-top:118px}.loading-mask .loader,.loading-old .loader{background:url(../images/loader-1.gif) 50% 30% no-repeat #e5e2dd;border-radius:5px;bottom:0;color:#5e5b56;font-size:14px;font-weight:700;height:160px;left:0;margin:auto;opacity:.95;position:absolute;right:0;text-align:center;top:0;width:160px}.admin-user{float:right;line-height:1.36;margin-left:.3rem;z-index:390}.admin-user._active .admin__action-dropdown,.admin-user.active .admin__action-dropdown{border-color:#007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5)}.admin-user .admin__action-dropdown{height:3.3rem;padding:.7rem 2.8rem .4rem 4rem}.admin-user .admin__action-dropdown._active:after,.admin-user .admin__action-dropdown.active:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.admin-user .admin__action-dropdown:after{border-color:#777 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;right:1.3rem;top:50%;transition:all .2s linear;width:0}._active .admin-user .admin__action-dropdown:after,.active .admin-user .admin__action-dropdown:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.admin-user .admin__action-dropdown:hover:after{border-color:#000 transparent transparent}.admin-user .admin__action-dropdown:before{color:#777;content:'\e600';font-size:2rem;left:1.1rem;margin-top:-1.1rem;position:absolute;top:50%}.admin-user .admin__action-dropdown:hover:before{color:#333}.admin-user .admin__action-dropdown-menu{min-width:20rem;padding-left:1rem;padding-right:1rem}.admin-user .admin__action-dropdown-menu>li>a{padding-right:1.8rem;padding-left:.5em;white-space:nowrap;transition:background-color .1s linear}.admin-user .admin__action-dropdown-menu>li>a:hover{background-color:#e0f6fe;color:#333}.admin-user .admin__action-dropdown-menu>li>a:active{background-color:#c7effd;bottom:-1px;position:relative}.admin-user .admin__action-dropdown-menu .admin-user-name{text-overflow:ellipsis;white-space:nowrap;display:inline-block;max-width:20rem;overflow:hidden;vertical-align:top}.admin-user-account-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:inline-block;max-width:11.2rem}.search-global{float:right;margin-right:-.3rem;position:relative;z-index:380}.search-global-field{min-width:5rem}.search-global-field._active .search-global-input{background-color:#fff;border-color:#007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5);padding-right:4rem;width:25rem}.search-global-field._active .search-global-action{display:block;height:3.3rem;position:absolute;right:0;text-indent:-100%;top:0;width:5rem;z-index:3}.search-global-field .autocomplete-results{height:3.3rem;position:absolute;right:0;top:0;width:25rem}.search-global-field .search-global-menu{border:1px solid #007bdb;border-top-color:transparent;box-shadow:1px 1px 5px rgba(0,0,0,.5);left:0;margin-top:-2px;padding:0;position:absolute;right:0;top:100%;z-index:2}.search-global-field .search-global-menu:after{background-color:#fff;content:'';height:5px;left:0;position:absolute;right:0;top:-5px}.search-global-field .search-global-menu>li{background-color:#fff;border-top:1px solid #ddd;display:block;font-size:1.2rem;padding:.75rem 1.4rem .55rem}.search-global-field .search-global-menu>li._active{background-color:#e0f6fe}.search-global-field .search-global-menu .title{display:block;font-size:1.4rem}.search-global-field .search-global-menu .type{color:#1a1a1a;display:block}.search-global-label{cursor:pointer;height:3.3rem;padding:.75rem 1.4rem .55rem;position:absolute;right:0;top:0;z-index:2}.search-global-label:active{-webkit-transform:scale(0.9);-ms-transform:scale(0.9);transform:scale(0.9)}.search-global-label:hover:before{color:#000}.search-global-label:before{color:#777;content:'\e60c';font-size:2rem}.search-global-input{background-color:transparent;border:1px solid transparent;font-size:1.4rem;height:3.3rem;padding:.75rem 1.4rem .55rem;position:absolute;right:0;top:0;transition:all .1s linear,width .3s linear;width:5rem;z-index:1}.search-global-action{display:none}.notifications-wrapper{float:right;line-height:1;position:relative}.notifications-wrapper.active{z-index:400}.notifications-wrapper.active .notifications-action{border-color:#007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5)}.notifications-wrapper.active .notifications-action:after{border:none;background-color:#fff;content:'';display:block;height:6px;left:-6px;margin-top:0;position:absolute;right:0;top:100%;width:auto}.notifications-wrapper .admin__action-dropdown-menu{padding:1rem 0 0;width:32rem}.notifications-action{color:#777;height:3.3rem;padding:.75rem 2rem .65rem}.notifications-action:after{display:none}.notifications-action:before{content:'\e607';font-size:1.9rem;margin-right:0}.notifications-action:active:before{position:relative;top:1px}.notifications-action .notifications-counter{background-color:#e22626;border-radius:1em;color:#fff;display:inline-block;font-size:1.1rem;font-weight:700;left:50%;margin-left:.3em;margin-top:-1.1em;padding:.3em .5em;position:absolute;top:50%}.notifications-entry{line-height:1.36;padding:.6rem 2rem .8rem;position:relative;transition:background-color .1s linear}.notifications-entry:hover{background-color:#e0f6fe}.notifications-entry.notifications-entry-last{margin:0 2rem;padding:.3rem 0 1.3rem;text-align:center}.notifications-entry.notifications-entry-last:hover{background-color:transparent}.notifications-entry+.notifications-entry-last{border-top:1px solid #ddd;padding-bottom:.6rem}.notifications-entry ._cutted{cursor:pointer}.notifications-entry ._cutted .notifications-entry-description-start:after{content:'...'}.notifications-entry-title{color:#ef672f;display:block;font-size:1.1rem;font-weight:700;margin-bottom:.7rem;margin-right:1em}.notifications-entry-description{color:#333;font-size:1.1rem;margin-bottom:.8rem}.notifications-entry-description-end{display:none}.notifications-entry-description-end._show{display:inline}.notifications-entry-time{color:#777;font-size:1.1rem}.notifications-close{line-height:1;padding:1rem;position:absolute;right:0;top:.6rem}.notifications-close:before{color:#ccc;content:'\e620';transition:color .1s linear}.notifications-close:hover:before{color:#b3b3b3}.notifications-close:active{-webkit-transform:scale(0.95);-ms-transform:scale(0.95);transform:scale(0.95)}.page-header-actions{padding-top:1.1rem}.page-header-hgroup{padding-right:1.5rem}.page-title{color:#333;font-size:2.8rem;margin-bottom:0}.page-header{padding:1.5rem 3rem}.menu-wrapper{display:inline-block;position:relative;width:8.8rem;z-index:700}.menu-wrapper:before{background-color:#373330;bottom:0;content:'';left:0;position:fixed;top:0;width:8.8rem;z-index:699}.menu-wrapper._fixed{left:0;position:fixed;top:0}.menu-wrapper._fixed~.page-wrapper{margin-left:8.8rem}.menu-wrapper .logo{display:block;height:8.8rem;padding:2.4rem 0 2.2rem;position:relative;text-align:center;z-index:700}._keyfocus .menu-wrapper .logo:focus{background-color:#4a4542;box-shadow:none}._keyfocus .menu-wrapper .logo:focus+.admin__menu .level-0:first-child>a{background-color:#373330}._keyfocus .menu-wrapper .logo:focus+.admin__menu .level-0:first-child>a:after{display:none}.menu-wrapper .logo:hover .logo-img{-webkit-filter:brightness(1.1);filter:brightness(1.1)}.menu-wrapper .logo:active .logo-img{-webkit-transform:scale(0.95);-ms-transform:scale(0.95);transform:scale(0.95)}.menu-wrapper .logo .logo-img{height:4.2rem;transition:-webkit-filter .2s linear,filter .2s linear,transform .1s linear;width:3.5rem}.abs-menu-separator,.admin__menu .item-partners>a:after,.admin__menu .level-0:first-child>a:after{background-color:#736963;content:'';display:block;height:1px;left:0;margin-left:16%;position:absolute;top:0;width:68%}.admin__menu li{display:block}.admin__menu .level-0:first-child>a{position:relative}.admin__menu .level-0:first-child._active>a:after{display:none}.admin__menu .level-0._active>a,.admin__menu .level-0:hover>a{color:#f7f3eb}.admin__menu .level-0._active>a{background-color:#524d49}.admin__menu .level-0:hover>a{background-color:#4a4542}.admin__menu .level-0>a{color:#aaa6a0;display:block;font-size:1rem;letter-spacing:.025em;min-height:6.2rem;padding:1.2rem .5rem .5rem;position:relative;text-align:center;text-decoration:none;text-transform:uppercase;transition:background-color .1s linear;word-wrap:break-word;z-index:700}.admin__menu .level-0>a:focus{box-shadow:none}.admin__menu .level-0>a:before{content:'\e63a';display:block;font-size:2.2rem;height:2.2rem}.admin__menu .level-0>.submenu{background-color:#4a4542;box-shadow:0 0 3px #000;left:100%;min-height:calc(8.8rem + 2rem + 100%);padding:2rem 0 0;position:absolute;top:0;-webkit-transform:translateX(-100%);-ms-transform:translateX(-100%);transform:translateX(-100%);transition-property:-webkit-transform,visibility;transition-property:transform,visibility;transition-duration:.3s;transition-timing-function:ease-in-out;visibility:hidden;z-index:697}.admin__menu .level-0._show>.submenu{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0);visibility:visible;z-index:698}.admin__menu .level-1{margin-left:1.5rem;margin-right:1.5rem}.admin__menu [class*=level-]:not(.level-0) a{display:block;padding:1.25rem 1.5rem}.admin__menu [class*=level-]:not(.level-0) a:hover{background-color:#403934}.admin__menu [class*=level-]:not(.level-0) a:active{padding-top:1.35rem;padding-bottom:1.15rem;background-color:#322c29}.admin__menu .submenu li{min-width:23.8rem}.admin__menu .submenu a{color:#fcfcfc;transition:background-color .1s linear}.admin__menu .submenu a:focus,.admin__menu .submenu a:hover{box-shadow:none;text-decoration:none}._keyfocus .admin__menu .submenu a:focus{background-color:#403934}._keyfocus .admin__menu .submenu a:active{background-color:#322c29}.admin__menu .submenu .parent{margin-bottom:4.5rem}.admin__menu .submenu .parent .submenu-group-title,.admin__menu .submenu .parent>a{color:#a79d95;display:block;font-size:1.6rem;font-weight:600;margin-bottom:.7rem;padding:1.25rem 1.5rem;pointer-events:none}.admin__menu .submenu .column{display:table-cell}.admin__menu .submenu-title{color:#fff;display:block;font-size:2.2rem;font-weight:600;margin-bottom:4.2rem;margin-left:3rem;margin-right:5.8rem}.admin__menu .submenu-sub-title{color:#fff;display:block;font-size:1.2rem;margin:-3.8rem 5.8rem 3.8rem 3rem}.admin__menu .action-close{padding:2.4rem 2.8rem;position:absolute;right:0;top:0}.admin__menu .action-close:before{color:#a79d95;font-size:1.7rem}.admin__menu .action-close:hover:before{color:#fff}.admin__menu .item-dashboard>a:before{content:'\e604';font-size:1.8rem;padding-top:.4rem}.admin__menu .item-sales>a:before{content:'\e60b'}.admin__menu .item-catalog>a:before{content:'\e608'}.admin__menu .item-customer>a:before{content:'\e603';font-size:2.6rem;position:relative;top:-.4rem}.admin__menu .item-marketing>a:before{content:'\e609';font-size:2rem;padding-top:.2rem}.admin__menu .item-content>a:before{content:'\e602';font-size:2.4rem;position:relative;top:-.2rem}.admin__menu .item-report>a:before{content:'\e60a'}.admin__menu .item-stores>a:before{content:'\e60d';font-size:1.9rem;padding-top:.3rem}.admin__menu .item-system>a:before{content:'\e60e'}.admin__menu .item-partners>a{padding-bottom:1rem}.admin__menu .item-partners>a:before{content:'\e612'}.admin__menu-overlay{bottom:0;left:0;position:fixed;right:0;top:0;z-index:697}.store-switcher{color:#333;float:left;font-size:1.3rem;margin-top:.7rem}.store-switcher .admin__action-dropdown{margin-left:.5em;background-color:#f8f8f8}.store-switcher .dropdown{display:inline-block;position:relative}.store-switcher .dropdown:after,.store-switcher .dropdown:before{content:'';display:table}.store-switcher .dropdown:after{clear:both}.store-switcher .dropdown .action.toggle{cursor:pointer;display:inline-block;text-decoration:none}.store-switcher .dropdown .action.toggle:after{-webkit-font-smoothing:antialiased;font-size:22px;line-height:2;color:#333;content:'\e607';font-family:icons-blank-theme;margin:0;vertical-align:top;display:inline-block;font-weight:400;overflow:hidden;speak:none;text-align:center}.store-switcher .dropdown .action.toggle:active:after,.store-switcher .dropdown .action.toggle:hover:after{color:#333}.store-switcher .dropdown .action.toggle.active{display:inline-block;text-decoration:none}.store-switcher .dropdown .action.toggle.active:after{-webkit-font-smoothing:antialiased;font-size:22px;line-height:2;color:#333;content:'\e618';font-family:icons-blank-theme;margin:0;vertical-align:top;display:inline-block;font-weight:400;overflow:hidden;speak:none;text-align:center}.store-switcher .dropdown .action.toggle.active:active:after,.store-switcher .dropdown .action.toggle.active:hover:after{color:#333}.store-switcher .dropdown .dropdown-menu{background:#fff;border:1px solid #ada89e;z-index:100;margin:4px 0 0;padding:0;list-style:none;box-sizing:border-box;position:absolute;top:100%;box-shadow:1px 1px 5px rgba(0,0,0,.5);min-width:19.5rem;display:none}.store-switcher .dropdown .dropdown-menu li{margin:0;padding:0}.store-switcher .dropdown .dropdown-menu li:hover{background:0 0;cursor:pointer}.store-switcher .dropdown.active{overflow:visible}.store-switcher .dropdown.active .dropdown-menu{display:block}.store-switcher .dropdown-menu{left:0;margin-top:.5em;padding-top:.25em}.store-switcher .dropdown-menu li{border:0;cursor:default}.store-switcher .dropdown-menu li:hover{cursor:default}.store-switcher .dropdown-menu li a,.store-switcher .dropdown-menu li span{color:#333;display:block;padding:.5rem 1.3rem}.store-switcher .dropdown-menu li a{text-decoration:none}.store-switcher .dropdown-menu li a:hover{background:#e9e9e9}.store-switcher .dropdown-menu li span{color:#adadad;cursor:default}.store-switcher .dropdown-menu li.current span{background:#eee;color:#333}.store-switcher .dropdown-menu .store-switcher-store a,.store-switcher .dropdown-menu .store-switcher-store span{padding-left:2.6rem}.store-switcher .dropdown-menu .store-switcher-store-view a,.store-switcher .dropdown-menu .store-switcher-store-view span{padding-left:3.9rem}.store-switcher .dropdown-menu .dropdown-toolbar{border-top:1px solid #ebebeb;margin-top:1rem}.store-switcher .dropdown-menu .dropdown-toolbar a:before{content:'\e60e';margin-right:.25em;position:relative;top:1px}.store-switcher-label{font-weight:700}.store-switcher-alt{display:inline-block;position:relative}.store-switcher-alt.active .dropdown-menu{display:block}.store-switcher-alt .dropdown-menu{margin-top:2px;white-space:nowrap}.store-switcher-alt .dropdown-menu ul{list-style:none;margin:0;padding:0}.store-switcher-alt strong{color:#a6a098;display:block;font-size:14px;font-weight:500;line-height:1.333;padding:5px 10px}.store-switcher-alt .store-selected{color:#676056;cursor:pointer;font-size:12px;font-weight:400;line-height:1.333}.store-switcher-alt .store-selected:after{color:#b3b0ad;content:'\e02c';-webkit-font-smoothing:antialiased;font-style:normal;font-weight:400;margin:0 0 0 3px;speak:none;vertical-align:text-top}.store-switcher-alt .store-switcher-store,.store-switcher-alt .store-switcher-website{padding:0}.store-switcher-alt .store-switcher-store:hover,.store-switcher-alt .store-switcher-website:hover{background:0 0}.store-switcher-alt .manage-stores,.store-switcher-alt .store-switcher-all,.store-switcher-alt .store-switcher-store-view{padding:0}.store-switcher-alt .manage-stores>a,.store-switcher-alt .store-switcher-all>a{color:#676056;display:block;font-size:12px;padding:8px 15px;text-decoration:none}.store-switcher-website{margin:5px 0 0}.store-switcher-website>strong{padding-left:13px}.store-switcher-store{margin:1px 0 0}.store-switcher-store>strong{padding-left:20px}.store-switcher-store>ul{margin-top:1px}.store-switcher-store-view:first-child{border-top:1px solid #e5e5e5}.store-switcher-store-view>a{color:#333;display:block;font-size:13px;padding:5px 15px 5px 24px;text-decoration:none}.tooltip{margin-left:.5em}.tooltip .help a,.tooltip .help span{cursor:pointer;display:inline-block;height:22px;position:relative;vertical-align:middle;width:22px;z-index:2}.tooltip .help a:before,.tooltip .help span:before{color:#333;content:'\e633';font-size:1.7rem}.tooltip .help a span,.tooltip .help span span{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.tooltip .help a:hover{text-decoration:none}.tooltip .tooltip-content{background:#000;border-radius:3px;color:#fff;display:none;margin-left:-19px;margin-top:10px;max-width:200px;padding:4px 8px;position:absolute;text-shadow:none;z-index:20}.tooltip .tooltip-content:before{border-bottom:5px solid #000;border-left:5px solid transparent;border-right:5px solid transparent;content:'';height:0;left:20px;opacity:.8;position:absolute;top:-5px;width:0}.tooltip .tooltip-content.loading{position:absolute}.tooltip .tooltip-content.loading:before{border-bottom-color:rgba(0,0,0,.3)}.tooltip:hover>.tooltip-content{display:block}.page-actions._fixed,.page-main-actions:not(._hidden){background:#f8f8f8;border-bottom:1px solid #e3e3e3;border-top:1px solid #e3e3e3;padding:1.5rem}.page-main-actions{margin:0 0 3rem}.page-main-actions._hidden .store-switcher{display:none}.page-actions{float:right}.page-main-actions .page-actions._fixed{left:8.8rem;position:fixed;right:0;top:0;z-index:400}.page-main-actions .page-actions._fixed .page-actions-inner:before{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#333;content:attr(data-title);float:left;font-size:2.8rem;margin-top:.3rem;max-width:50%}.page-actions .page-actions-buttons>button,.page-actions>button{float:right;margin-left:1.3rem}.page-actions .page-actions-buttons>button.action-back,.page-actions .page-actions-buttons>button.back,.page-actions>button.action-back,.page-actions>button.back{float:left;-ms-flex-order:-1;-webkit-order:-1;order:-1}.page-actions .page-actions-buttons>button.action-back:before,.page-actions .page-actions-buttons>button.back:before,.page-actions>button.action-back:before,.page-actions>button.back:before{content:'\e626';margin-right:.5em;position:relative;top:1px}.page-actions .page-actions-buttons>button.action-primary,.page-actions .page-actions-buttons>button.primary,.page-actions>button.action-primary,.page-actions>button.primary{-ms-flex-order:2;-webkit-order:2;order:2}.page-actions .page-actions-buttons>button.save:not(.primary),.page-actions>button.save:not(.primary){-ms-flex-order:1;-webkit-order:1;order:1}.page-actions .page-actions-buttons>button.delete,.page-actions>button.delete{-ms-flex-order:-1;-webkit-order:-1;order:-1}.page-actions .actions-split{float:right;margin-left:1.3rem;-ms-flex-order:2;-webkit-order:2;order:2}.page-actions .actions-split .dropdown-menu .item{display:block}.page-actions-buttons{float:right;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;display:-webkit-flex;display:-ms-flexbox;display:flex}.customer-index-edit .page-actions-buttons{background-color:transparent}.admin__page-nav{background:#f1f1f1;border:1px solid #e3e3e3}.admin__page-nav._collapsed:first-child{border-bottom:none}.admin__page-nav._collapsed._show{border-bottom:1px solid #e3e3e3}.admin__page-nav._collapsed._show ._collapsible{background:#f1f1f1}.admin__page-nav._collapsed._show ._collapsible:after{content:'\e62b'}.admin__page-nav._collapsed._show ._collapsible+.admin__page-nav-items{display:block}.admin__page-nav._collapsed._hide .admin__page-nav-title-messages,.admin__page-nav._collapsed._hide .admin__page-nav-title-messages ._active{display:inline-block}.admin__page-nav+._collapsed{border-bottom:none;border-top:none}.admin__page-nav-title{border-bottom:1px solid #e3e3e3;color:#303030;display:block;font-size:1.4rem;line-height:1.2;margin:0 0 -1px;padding:1.8rem 1.5rem;position:relative;text-transform:uppercase}.admin__page-nav-title._collapsible{background:#fff;cursor:pointer;margin:0;padding-right:3.5rem;transition:border-color .1s ease-out,background-color .1s ease-out}.admin__page-nav-title._collapsible+.admin__page-nav-items{display:none;margin-top:-1px}.admin__page-nav-title._collapsible:after{content:'\e628';font-size:1.3rem;font-weight:700;position:absolute;right:1.8rem;top:2rem}.admin__page-nav-title._collapsible:hover{background:#f1f1f1}.admin__page-nav-title._collapsible:last-child{margin:0 0 -1px}.admin__page-nav-title strong{font-weight:700}.admin__page-nav-title .admin__page-nav-title-messages{display:none}.admin__page-nav-items{list-style-type:none;margin:0;padding:1rem 0 1.3rem}.admin__page-nav-item{border-left:3px solid transparent;margin-left:.7rem;padding:0;position:relative;transition:border-color .1s ease-out,background-color .1s ease-out}.admin__page-nav-item:hover{border-color:#e4e4e4}.admin__page-nav-item:hover .admin__page-nav-link{background:#e4e4e4;color:#303030;text-decoration:none}.admin__page-nav-item._active,.admin__page-nav-item.ui-state-active{border-color:#eb5202}.admin__page-nav-item._active .admin__page-nav-link,.admin__page-nav-item.ui-state-active .admin__page-nav-link{background:#fff;border-color:#e3e3e3;border-right:1px solid #fff;color:#303030;margin-right:-1px;font-weight:600}.admin__page-nav-item._loading:before,.admin__page-nav-item.ui-tabs-loading:before{display:none}.admin__page-nav-item._loading .admin__page-nav-item-message-loader,.admin__page-nav-item.ui-tabs-loading .admin__page-nav-item-message-loader{display:inline-block}.admin__page-nav-link{border:1px solid transparent;border-width:1px 0;color:#303030;display:block;font-weight:500;line-height:1.2;margin:0 0 -1px;padding:2rem 4rem 2rem 1rem;transition:border-color .1s ease-out,background-color .1s ease-out;word-wrap:break-word}.admin__page-nav-item-messages,.admin__page-nav-link._changed .admin__page-nav-item-message._changed,.admin__page-nav-link._error .admin__page-nav-item-message._error{display:inline-block}.admin__page-nav-item-messages .admin__page-nav-item-message{position:relative}.admin__page-nav-item-messages .admin__page-nav-item-message:hover{z-index:500}.admin__page-nav-item-messages .admin__page-nav-item-message:hover .admin__page-nav-item-message-tooltip{display:block}.admin__page-nav-item-messages .admin__page-nav-item-message._changed,.admin__page-nav-item-messages .admin__page-nav-item-message._error{display:none}.admin__page-nav-item-messages .admin__page-nav-item-message._changed .admin__page-nav-item-message-icon,.admin__page-nav-item-messages .admin__page-nav-item-message._error .admin__page-nav-item-message-icon{display:inline-block;font-size:1.4rem;padding-left:.8em;vertical-align:top}.admin__page-nav-item-messages .admin__page-nav-item-message._changed .admin__page-nav-item-message-icon:after,.admin__page-nav-item-messages .admin__page-nav-item-message._error .admin__page-nav-item-message-icon:after{color:#666;content:'\e631'}.admin__page-nav-item-messages .admin__page-nav-item-message._error .admin__page-nav-item-message-icon:after{color:#eb5202;content:'\e623'}.admin__page-nav-item-messages .admin__page-nav-item-message-loader{display:none;margin-top:-1rem;position:absolute;right:0;top:50%}.admin__page-nav-item-messages .admin__page-nav-item-message-loader .spinner{font-size:2rem;margin-right:1.5rem}.admin__page-nav-item-messages .admin__page-nav-item-message-tooltip{background:#f1f1f1;border:1px solid #f1f1f1;border-radius:1px;bottom:3.7rem;box-shadow:0 3px 9px 0 rgba(0,0,0,.3);display:none;font-weight:400;left:-1rem;line-height:1.36;padding:2rem;position:absolute;text-transform:none;width:27rem;word-break:normal;z-index:2}.admin__page-nav-item-messages .admin__page-nav-item-message-tooltip:after,.admin__page-nav-item-messages .admin__page-nav-item-message-tooltip:before{border:15px solid transparent;height:0;width:0;border-top-color:#f1f1f1;content:'';display:block;left:2rem;position:absolute;top:100%;z-index:3}.admin__page-nav-item-messages .admin__page-nav-item-message-tooltip:after{border-top-color:#f1f1f1;margin-top:-1px;z-index:4}.admin__page-nav-item-messages .admin__page-nav-item-message-tooltip:before{border-top-color:#bfbfbf}.admin__data-grid-wrap-static .data-grid{box-sizing:border-box}.admin__data-grid-wrap-static .data-grid thead{color:#333}.admin__data-grid-wrap-static .data-grid tr:nth-child(even) td{background-color:#f5f5f5}.admin__data-grid-wrap-static .data-grid tr:nth-child(even) td._dragging{background-color:rgba(245,245,245,.95)}.admin__data-grid-wrap-static .data-grid ul{padding-left:1rem;margin-left:1rem}.admin__data-grid-wrap-static .admin__data-grid-loading-mask{background:rgba(255,255,255,.5);bottom:0;left:0;position:absolute;right:0;top:0;z-index:401}.admin__data-grid-wrap-static .admin__data-grid-loading-mask .grid-loader{background:url(../images/loader-2.gif) 50% 50% no-repeat;bottom:0;height:149px;left:0;margin:auto;position:absolute;right:0;top:0;width:218px}.data-grid-filters-actions-wrap{float:right}.data-grid-search-control-wrap{float:left;max-width:45.5rem;position:relative;width:50%}.data-grid-search-control-wrap :-ms-input-placeholder{font-style:italic}.data-grid-search-control-wrap ::-webkit-input-placeholder{font-style:italic}.data-grid-search-control-wrap ::-moz-placeholder{font-style:italic}.data-grid-search-control-wrap .action-submit{background-color:transparent;border:none;border-radius:0;box-shadow:none;margin:0;padding:.6rem 2rem .2rem;position:absolute;right:0;top:1px}.data-grid-search-control-wrap .action-submit:hover{background-color:transparent;border:none;box-shadow:none}.data-grid-search-control-wrap .action-submit:active{-webkit-transform:scale(0.9);-ms-transform:scale(0.9);transform:scale(0.9)}.data-grid-search-control-wrap .action-submit:hover:before{color:#1a1a1a}._keyfocus .data-grid-search-control-wrap .action-submit:focus{box-shadow:0 0 0 1px #008bdb}.data-grid-search-control-wrap .action-submit:before{content:'\e60c';font-size:2rem;transition:color .1s linear}.data-grid-search-control-wrap .action-submit>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.data-grid-search-control-wrap .abs-action-menu .action-submenu,.data-grid-search-control-wrap .abs-action-menu .action-submenu .action-submenu,.data-grid-search-control-wrap .action-menu,.data-grid-search-control-wrap .action-menu .action-submenu,.data-grid-search-control-wrap .actions-split .action-menu .action-submenu,.data-grid-search-control-wrap .actions-split .action-menu .action-submenu .action-submenu,.data-grid-search-control-wrap .actions-split .dropdown-menu .action-submenu,.data-grid-search-control-wrap .actions-split .dropdown-menu .action-submenu .action-submenu{z-index:400;max-height:19.25rem;overflow-y:auto}.data-grid-search-control-wrap .action-menu-item._selected{background-color:#e0f6fe}.data-grid-search-control-wrap .data-grid-search-label{display:none}.data-grid-search-control{padding-right:6rem;width:100%}.data-grid-filters-action-wrap{float:left;padding-left:2rem}.data-grid-filters-action-wrap .action-default{font-size:1.3rem;margin-bottom:1rem;padding-left:1.7rem;padding-right:2.1rem;padding-top:.7rem}.data-grid-filters-action-wrap .action-default._active{background-color:#fff;border-bottom-color:#fff;border-right-color:#ccc;font-weight:600;margin:-.1rem 0 0;padding-bottom:1.6rem;padding-top:.8rem;position:relative;z-index:281}.data-grid-filters-action-wrap .action-default._active:after{background-color:#eb5202;bottom:100%;content:'';height:3px;left:-1px;position:absolute;right:-1px}.data-grid-filters-action-wrap .action-default:before{color:#333;content:'\e605';font-size:1.8rem;margin-right:.4rem;position:relative;top:-1px;vertical-align:top}.data-grid-filters-action-wrap .filters-active{display:none}.admin__data-grid-filters-wrap{opacity:0;visibility:hidden;clear:both;font-size:1.3rem;transition:opacity .3s ease}.admin__data-grid-filters-wrap._show{opacity:1;visibility:visible;border-bottom:1px solid #ccc;border-top:1px solid #ccc;margin-bottom:.7rem;padding:3.6rem 0 3rem;position:relative;top:-1px;z-index:280}.admin__data-grid-filters-wrap._show .admin__data-grid-filters,.admin__data-grid-filters-wrap._show .admin__data-grid-filters-footer{display:block}.admin__data-grid-filters-wrap .admin__form-field-label,.admin__data-grid-filters-wrap .admin__form-field-legend{display:block;font-weight:700;margin:0 0 .3rem;text-align:left}.admin__data-grid-filters-wrap .admin__form-field{display:inline-block;margin-bottom:2em;margin-left:0;padding-left:2rem;padding-right:2rem;vertical-align:top;width:calc(100% / 4 - 4px)}.admin__data-grid-filters-wrap .admin__form-field .admin__form-field{display:block;float:none;margin-bottom:1.5rem;padding-left:0;padding-right:0;width:auto}.admin__data-grid-filters-wrap .admin__form-field .admin__form-field:last-child{margin-bottom:0}.admin__data-grid-filters-wrap .admin__form-field .admin__form-field .admin__form-field-label{border:1px solid transparent;float:left;font-weight:400;line-height:1.36;margin-bottom:0;padding-bottom:.6rem;padding-right:1em;padding-top:.6rem;width:25%}.admin__data-grid-filters-wrap .admin__form-field .admin__form-field .admin__form-field-control{margin-left:25%}.admin__data-grid-filters-wrap .admin__action-multiselect,.admin__data-grid-filters-wrap .admin__control-select,.admin__data-grid-filters-wrap .admin__control-text,.admin__data-grid-filters-wrap .admin__form-field-label{font-size:1.3rem}.admin__data-grid-filters-wrap .admin__control-select{padding-top:.5rem;height:3.2rem}.admin__data-grid-filters-wrap .admin__control-select,.admin__data-grid-filters-wrap .admin__control-text.hasDatepicker{width:100%}.admin__data-grid-filters{display:none;margin-left:-2rem;margin-right:-2rem}.admin__filters-legend{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.admin__data-grid-filters-footer{display:none;font-size:1.4rem}.admin__data-grid-filters-footer .admin__footer-main-actions{margin-left:25%;text-align:right}.admin__data-grid-filters-footer .admin__footer-secondary-actions{float:left;width:50%}.admin__data-grid-filters-current{border-bottom:.1rem solid #ccc;border-top:.1rem solid #ccc;display:none;font-size:1.3rem;margin-bottom:.9rem;padding-bottom:.8rem;padding-top:1.1rem;width:100%}.admin__data-grid-filters-current._show{display:table;position:relative;top:-1px;z-index:3}.admin__data-grid-filters-current._show+.admin__data-grid-filters-wrap._show{margin-top:-1rem}.admin__current-filters-actions-wrap,.admin__current-filters-list-wrap,.admin__current-filters-title-wrap{display:table-cell;vertical-align:top}.admin__current-filters-title{margin-right:1em;white-space:nowrap}.admin__current-filters-list-wrap{width:100%}.admin__current-filters-list{margin-bottom:0}.admin__current-filters-list>li{display:inline-block;font-weight:600;margin:0 1rem .5rem;padding-right:2.6rem;position:relative}.admin__current-filters-list .action-remove{background-color:transparent;border:none;border-radius:0;box-shadow:none;margin:0;padding:0;line-height:1;position:absolute;right:0;top:1px}.admin__current-filters-list .action-remove:hover{background-color:transparent;border:none;box-shadow:none}.admin__current-filters-list .action-remove:hover:before{color:#949494}.admin__current-filters-list .action-remove:active{-webkit-transform:scale(0.9);-ms-transform:scale(0.9);transform:scale(0.9)}.admin__current-filters-list .action-remove:before{color:#adadad;content:'\e620';font-size:1.6rem;transition:color .1s linear}.admin__current-filters-list .action-remove>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.admin__current-filters-actions-wrap .action-clear{border:none;padding-bottom:0;padding-top:0;white-space:nowrap}.admin__data-grid-pager-wrap{text-align:right}.admin__data-grid-pager{display:inline-block;margin-left:3rem}.admin__data-grid-pager .admin__control-text::-webkit-inner-spin-button,.admin__data-grid-pager .admin__control-text::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.admin__data-grid-pager .admin__control-text{-moz-appearance:textfield;text-align:center;width:4.4rem}.action-next,.action-previous{width:4.4rem}.action-next:before,.action-previous:before{font-weight:700}.action-next>span,.action-previous>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.action-previous{margin-right:2.5rem;text-indent:-.25em}.action-previous:before{content:'\e629'}.action-next{margin-left:1.5rem;text-indent:.1em}.action-next:before{content:'\e62a'}.admin__data-grid-action-bookmarks{opacity:.98}.admin__data-grid-action-bookmarks .admin__action-dropdown-text:after{right:-6px;left:0}.admin__data-grid-action-bookmarks._active{z-index:290}.admin__data-grid-action-bookmarks .admin__action-dropdown .admin__action-dropdown-text{display:inline-block;max-width:15rem;min-width:4.9rem;vertical-align:top;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.admin__data-grid-action-bookmarks .admin__action-dropdown:before{content:'\e60f'}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu{font-size:1.3rem;left:0;padding:1rem 0;right:auto}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu>li{padding:0 5rem 0 0;position:relative;white-space:nowrap}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu>li:not(.action-dropdown-menu-action){transition:background-color .1s linear}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu>li:not(.action-dropdown-menu-action):hover{background-color:#e3e3e3}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-item{max-width:23rem;min-width:18rem;white-space:normal;word-break:break-all}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-item-edit{display:none;padding-bottom:1rem;padding-left:1rem;padding-top:1rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-item-edit .action-dropdown-menu-item-actions{padding-bottom:1rem;padding-top:1rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-action{padding-left:1rem;padding-top:1rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-action+.action-dropdown-menu-item-last{padding-top:.5rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-action>a{color:#008bdb;text-decoration:none;display:inline-block;padding-left:1.1rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-action>a:hover{color:#0fa7ff;text-decoration:underline}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-item-last{padding-bottom:0}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu ._edit .action-dropdown-menu-item{display:none}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu ._edit .action-dropdown-menu-item-edit{display:block}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu ._active .action-dropdown-menu-link{font-weight:600}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .admin__control-text{font-size:1.3rem;min-width:15rem;width:calc(100% - 4rem)}.ie9 .admin__data-grid-action-bookmarks .admin__action-dropdown-menu .admin__control-text{width:15rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-item-actions{border-left:1px solid #fff;bottom:0;position:absolute;right:0;top:0;width:5rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-link{color:#333;display:block;text-decoration:none;padding:1rem 1rem 1rem 2.1rem}.admin__data-grid-action-bookmarks .action-delete,.admin__data-grid-action-bookmarks .action-edit,.admin__data-grid-action-bookmarks .action-submit{background-color:transparent;border:none;border-radius:0;box-shadow:none;margin:0;vertical-align:top}.admin__data-grid-action-bookmarks .action-delete:hover,.admin__data-grid-action-bookmarks .action-edit:hover,.admin__data-grid-action-bookmarks .action-submit:hover{background-color:transparent;border:none;box-shadow:none}.admin__data-grid-action-bookmarks .action-delete:before,.admin__data-grid-action-bookmarks .action-edit:before,.admin__data-grid-action-bookmarks .action-submit:before{font-size:1.7rem}.admin__data-grid-action-bookmarks .action-delete>span,.admin__data-grid-action-bookmarks .action-edit>span,.admin__data-grid-action-bookmarks .action-submit>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.admin__data-grid-action-bookmarks .action-delete,.admin__data-grid-action-bookmarks .action-edit{padding:.6rem 1.4rem}.admin__data-grid-action-bookmarks .action-delete:active,.admin__data-grid-action-bookmarks .action-edit:active{-webkit-transform:scale(0.9);-ms-transform:scale(0.9);transform:scale(0.9)}.admin__data-grid-action-bookmarks .action-submit{padding:.6rem 1rem .6rem .8rem}.admin__data-grid-action-bookmarks .action-submit:active{position:relative;right:-1px}.admin__data-grid-action-bookmarks .action-submit:before{content:'\e625'}.admin__data-grid-action-bookmarks .action-delete:before{content:'\e630'}.admin__data-grid-action-bookmarks .action-edit{padding-top:.8rem}.admin__data-grid-action-bookmarks .action-edit:before{content:'\e631'}.admin__data-grid-action-columns._active{opacity:.98;z-index:290}.admin__data-grid-action-columns .admin__action-dropdown:before{content:'\e60e';font-size:1.8rem;margin-right:.7rem;vertical-align:top}.admin__data-grid-action-columns-menu{color:#303030;font-size:1.3rem;overflow:hidden;padding:2.2rem 3.5rem 1rem;z-index:1}.admin__data-grid-action-columns-menu._overflow .admin__action-dropdown-menu-header{border-bottom:1px solid #d1d1d1}.admin__data-grid-action-columns-menu._overflow .admin__action-dropdown-menu-content{width:49.2rem}.admin__data-grid-action-columns-menu._overflow .admin__action-dropdown-menu-footer{border-top:1px solid #d1d1d1;padding-top:2.5rem}.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-content{max-height:22.85rem;overflow-y:auto;padding-top:1.5rem;position:relative;width:47.4rem}.admin__data-grid-action-columns-menu .admin__field-option{height:1.9rem;float:left;margin-bottom:1.5rem;padding:0 1rem 0 0;width:15.8rem}.admin__data-grid-action-columns-menu .admin__field-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block}.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-header{padding-bottom:1.5rem}.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-footer{padding:1rem 0 2rem}.admin__data-grid-action-columns-menu .admin__action-dropdown-footer-main-actions{margin-left:25%;text-align:right}.admin__data-grid-action-columns-menu .admin__action-dropdown-footer-secondary-actions{float:left;margin-left:-1em}.admin__data-grid-action-export._active{opacity:.98;z-index:290}.admin__data-grid-action-export .admin__action-dropdown:before{content:'\e635';font-size:1.7rem;left:.3rem;margin-right:.7rem;vertical-align:top}.admin__data-grid-action-export-menu{padding-left:2rem;padding-right:2rem;padding-top:1rem}.admin__data-grid-action-export-menu .admin__action-dropdown-footer-main-actions{padding-bottom:2rem;padding-top:2.5rem;white-space:nowrap}.sticky-header{background-color:#f8f8f8;border-bottom:1px solid #e3e3e3;box-shadow:0 5px 5px 0 rgba(0,0,0,.25);left:8.8rem;right:0;margin-top:-1px;padding:.5rem 3rem 0;position:fixed;top:77px;z-index:400}.sticky-header .admin__data-grid-wrap{margin-bottom:0;overflow-x:visible;padding-bottom:0}.sticky-header .admin__data-grid-header-row{position:relative;text-align:right}.sticky-header .admin__data-grid-header-row:last-child{margin:0}.sticky-header .admin__data-grid-actions-wrap,.sticky-header .admin__data-grid-filters-wrap,.sticky-header .admin__data-grid-pager-wrap,.sticky-header .data-grid-filters-actions-wrap,.sticky-header .data-grid-search-control-wrap{display:inline-block;float:none;vertical-align:top}.sticky-header .action-select-wrap{float:left;margin-right:1.5rem;width:16.66666667%}.sticky-header .admin__control-support-text{float:left}.sticky-header .data-grid-search-control-wrap{margin:-.5rem 0 0 1.1rem;width:auto}.sticky-header .data-grid-search-control-wrap .data-grid-search-label{box-sizing:border-box;cursor:pointer;display:block;min-width:3.8rem;padding:1.2rem .6rem 1.7rem;position:relative;text-align:center}.sticky-header .data-grid-search-control-wrap .data-grid-search-label:before{color:#333;content:'\e60c';font-size:2rem;transition:color .1s linear}.sticky-header .data-grid-search-control-wrap .data-grid-search-label:hover:before{color:#000}.sticky-header .data-grid-search-control-wrap .data-grid-search-label span{display:none}.sticky-header .data-grid-filters-actions-wrap{margin:-.5rem 0 0 1.1rem;padding-left:0;position:relative}.sticky-header .data-grid-filters-actions-wrap .action-default{background-color:transparent;border:1px solid transparent;box-sizing:border-box;min-width:3.8rem;padding:1.2rem .6rem 1.7rem;text-align:center;transition:all .15s ease}.sticky-header .data-grid-filters-actions-wrap .action-default span{display:none}.sticky-header .data-grid-filters-actions-wrap .action-default:before{margin:0}.sticky-header .data-grid-filters-actions-wrap .action-default._active{background-color:#fff;border-color:#adadad #adadad #fff;box-shadow:1px 1px 5px rgba(0,0,0,.5);z-index:210}.sticky-header .data-grid-filters-actions-wrap .action-default._active:after{background-color:#fff;content:'';height:6px;left:-2px;position:absolute;right:-6px;top:100%}.sticky-header .data-grid-filters-action-wrap{padding:0}.sticky-header .admin__data-grid-filters-wrap{background-color:#fff;border:1px solid #adadad;box-shadow:0 5px 5px 0 rgba(0,0,0,.25);left:0;padding-left:3.5rem;padding-right:3.5rem;position:absolute;top:100%;width:100%;z-index:209}.sticky-header .admin__data-grid-filters-current+.admin__data-grid-filters-wrap._show{margin-top:-6px}.sticky-header .filters-active{background-color:#e04f00;border-radius:10px;color:#fff;display:block;font-size:1.4rem;font-weight:700;padding:.1rem .7rem;position:absolute;right:-7px;top:0;z-index:211}.sticky-header .filters-active:empty{padding-top:0;padding-bottom:0}.sticky-header .admin__data-grid-actions-wrap{margin:-.5rem 0 0 1.1rem;padding-right:.3rem}.sticky-header .admin__data-grid-actions-wrap .admin__action-dropdown{background-color:transparent;box-sizing:border-box;min-width:3.8rem;padding-left:.6rem;padding-right:.6rem;text-align:center}.sticky-header .admin__data-grid-actions-wrap .admin__action-dropdown .admin__action-dropdown-text{display:inline-block;min-width:0;max-width:0;overflow:hidden}.sticky-header .admin__data-grid-actions-wrap .admin__action-dropdown:before{margin:0}.sticky-header .admin__data-grid-actions-wrap .admin__action-dropdown-wrap{margin-right:1.1rem}.sticky-header .admin__data-grid-actions-wrap .admin__action-dropdown-wrap:after,.sticky-header .admin__data-grid-actions-wrap .admin__action-dropdown:after{display:none}.sticky-header .admin__data-grid-actions-wrap ._active .admin__action-dropdown{background-color:#fff}.sticky-header .admin__data-grid-action-bookmarks .admin__action-dropdown:before{position:relative;top:-3px}.sticky-header .admin__data-grid-filters-current{border-top:0;border-bottom:0;margin-bottom:0;padding-bottom:0;padding-top:0}.sticky-header .admin__data-grid-pager .admin__control-text,.sticky-header .admin__data-grid-pager-wrap .admin__control-support-text,.sticky-header .data-grid-search-control-wrap .action-submit,.sticky-header .data-grid-search-control-wrap .data-grid-search-control{display:none}.sticky-header .action-next{margin:0}.sticky-header .data-grid{margin-bottom:-1px}.data-grid-cap-left,.data-grid-cap-right{background-color:#f8f8f8;bottom:-2px;position:absolute;top:6rem;width:3rem;z-index:201}.data-grid-cap-left{left:0}.data-grid-cap-right{right:0}.admin__data-grid-header{font-size:1.4rem}.admin__data-grid-header-row+.admin__data-grid-header-row{margin-top:1.1rem}.admin__data-grid-header-row:last-child{margin-bottom:0}.admin__data-grid-header-row .action-select-wrap{display:block}.admin__data-grid-header-row .action-select{width:100%}.admin__data-grid-actions-wrap{float:right;margin-left:1.1rem;margin-top:-.5rem;text-align:right}.admin__data-grid-actions-wrap .admin__action-dropdown-wrap{position:relative;text-align:left}.admin__data-grid-actions-wrap .admin__action-dropdown-wrap._active+.admin__action-dropdown-wrap:after,.admin__data-grid-actions-wrap .admin__action-dropdown-wrap._active:after,.admin__data-grid-actions-wrap .admin__action-dropdown-wrap._hide+.admin__action-dropdown-wrap:after,.admin__data-grid-actions-wrap .admin__action-dropdown-wrap:first-child:after{display:none}.admin__data-grid-actions-wrap .admin__action-dropdown-wrap._active .admin__action-dropdown,.admin__data-grid-actions-wrap .admin__action-dropdown-wrap._active .admin__action-dropdown-menu{border-color:#adadad}.admin__data-grid-actions-wrap .admin__action-dropdown-wrap:after{border-left:1px solid #ccc;content:'';height:3.2rem;left:0;position:absolute;top:.5rem;z-index:3}.admin__data-grid-actions-wrap .admin__action-dropdown{padding-bottom:1.7rem;padding-top:1.2rem}.admin__data-grid-actions-wrap .admin__action-dropdown:after{margin-top:-.4rem}.admin__data-grid-outer-wrap{min-height:8rem;position:relative}.admin__data-grid-wrap{margin-bottom:2rem;max-width:100%;overflow-x:auto;padding-bottom:1rem;padding-top:2rem}.admin__data-grid-loading-mask{background:rgba(255,255,255,.5);bottom:0;left:-3rem;position:absolute;right:-3rem;top:0;z-index:401}.admin__data-grid-loading-mask .spinner{font-size:4rem;left:50%;margin-left:-2rem;margin-top:-2rem;position:absolute;top:50%}.ie9 .admin__data-grid-loading-mask .spinner{background:url(../images/loader-2.gif) 50% 50% no-repeat;bottom:0;height:149px;left:0;margin:auto;position:absolute;right:0;top:0;width:218px}.data-grid-cell-content{overflow:hidden;width:100%;display:inline-block}body._in-resize{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:col-resize}body._in-resize *,body._in-resize .data-grid-th,body._in-resize .data-grid-th._draggable,body._in-resize .data-grid-th._sortable{cursor:col-resize!important}._layout-fixed{table-layout:fixed}.data-grid{border:none;font-size:1.3rem;margin-bottom:0;max-width:100%;width:100%}.data-grid:not(._dragging-copy) ._odd-row td._dragging{background-color:#d0d0d0}.data-grid:not(._dragging-copy) ._dragging{background-color:#d9d9d9;color:rgba(48,48,48,.95)}.data-grid:not(._dragging-copy) ._dragging a{color:rgba(0,139,219,.95)}.data-grid:not(._dragging-copy) ._dragging a:hover{color:rgba(15,167,255,.95)}.data-grid thead{background-color:transparent}.data-grid tfoot th{padding:1rem}.data-grid tr._odd-row td{background-color:#f5f5f5}.data-grid tr.data-grid-tr-no-data:hover td{background-color:#fff;cursor:default}.data-grid tr:active td{background-color:#e0f6fe}.data-grid tr:hover td{background-color:#e5f7fe}.data-grid tr:not(.data-grid-editable-row):last-child td{border-bottom:.1rem solid #d6d6d6}.data-grid tr ._clickable,.data-grid tr._clickable{cursor:pointer}.data-grid td,.data-grid th{font-size:1.3rem;line-height:1.36;transition:background-color .1s linear;vertical-align:top}.data-grid td._resizing,.data-grid th._resizing{border-left:1px solid #007bdb;border-right:1px solid #007bdb}.data-grid td{background-color:#fff;border-left:.1rem dashed #d6d6d6;border-right:.1rem dashed #d6d6d6;color:#303030;padding:1rem}.data-grid td:first-child{border-left-style:solid}.data-grid td:last-child{border-right-style:solid}.data-grid td .action-select-wrap{position:static}.data-grid td .action-select{background-color:transparent;border:none;font-size:1.3rem;position:relative;color:#008bdb;text-decoration:none;padding:0 3rem 0 0}.data-grid td .action-select:hover{color:#0fa7ff;text-decoration:underline}.data-grid td .action-select:hover:after{border-color:#0fa7ff transparent transparent}.data-grid td .action-select:after{border-color:#008bdb transparent transparent;margin:.6rem 0 0 .7rem;right:auto;top:auto}.data-grid td .action-select:before{display:none}.data-grid td .abs-action-menu .action-submenu,.data-grid td .abs-action-menu .action-submenu .action-submenu,.data-grid td .action-menu,.data-grid td .action-menu .action-submenu,.data-grid td .actions-split .action-menu .action-submenu,.data-grid td .actions-split .action-menu .action-submenu .action-submenu,.data-grid td .actions-split .dropdown-menu .action-submenu,.data-grid td .actions-split .dropdown-menu .action-submenu .action-submenu{left:auto;min-width:10rem;right:0;text-align:left;top:auto;z-index:1}.data-grid th{background-color:#514943;border:.1rem solid #8a837f;border-left-color:transparent;color:#fff;font-weight:600;padding:0;text-align:left}.data-grid th:first-child{border-left-color:#8a837f}.data-grid th._dragover-left{box-shadow:inset 3px 0 0 0 #fff;z-index:2}.data-grid th._dragover-right{box-shadow:inset -3px 0 0 0 #fff}.data-grid .shadow-div{cursor:col-resize;height:100%;margin-right:-5px;position:absolute;right:0;top:0;width:10px}.data-grid .data-grid-th{background-clip:padding-box;color:#fff;padding:1rem;position:relative;vertical-align:middle}.data-grid .data-grid-th._resize-visible .shadow-div{cursor:auto;display:none}.data-grid .data-grid-th._draggable{cursor:-webkit-grab;cursor:grab}.data-grid .data-grid-th._sortable{cursor:pointer;transition:background-color .1s linear;z-index:1}.data-grid .data-grid-th._sortable:focus,.data-grid .data-grid-th._sortable:hover{background-color:#5f564f}.data-grid .data-grid-th._sortable:active{padding-bottom:.9rem;padding-top:1.1rem}.data-grid .data-grid-th.required>span:after{color:#f38a5e;content:'*';margin-left:.3rem}.data-grid .data-grid-checkbox-cell{padding:0;vertical-align:top;width:5.2rem}.data-grid .data-grid-checkbox-cell:hover{cursor:default}.data-grid .data-grid-thumbnail-cell{text-align:center;width:7rem}.data-grid .data-grid-thumbnail-cell img{border:1px solid #d6d6d6;max-width:5rem}.data-grid .data-grid-multicheck-cell{padding:1rem 1rem .9rem;text-align:center;vertical-align:middle}.data-grid .data-grid-actions-cell{padding-left:2rem;padding-right:2rem;text-align:center;width:1%}.data-grid._hidden{display:none}.data-grid._dragging-copy{box-shadow:1px 1px 5px rgba(0,0,0,.5);left:0;opacity:.95;position:fixed;top:0;z-index:1000}.data-grid._dragging-copy .data-grid-th{border:1px solid #007bdb;border-bottom:none}.data-grid._dragging-copy .data-grid-th,.data-grid._dragging-copy .data-grid-th._sortable{cursor:-webkit-grabbing;cursor:grabbing}.data-grid._dragging-copy tr:last-child td{border-bottom:1px solid #007bdb}.data-grid._dragging-copy td{border-left:1px solid #007bdb;border-right:1px solid #007bdb}.data-grid._dragging-copy._in-edit .data-grid-editable-row.data-grid-bulk-edit-panel td,.data-grid._dragging-copy._in-edit .data-grid-editable-row.data-grid-bulk-edit-panel td:before,.data-grid._dragging-copy._in-edit .data-grid-editable-row.data-grid-bulk-edit-panel:hover td{background-color:rgba(255,251,230,.95)}.data-grid._dragging-copy._in-edit .data-grid-editable-row td,.data-grid._dragging-copy._in-edit .data-grid-editable-row:hover td{background-color:rgba(255,255,255,.95)}.data-grid._dragging-copy._in-edit .data-grid-editable-row td:after,.data-grid._dragging-copy._in-edit .data-grid-editable-row td:before{left:0;right:0}.data-grid._dragging-copy._in-edit .data-grid-editable-row td:before{background-color:rgba(255,255,255,.95)}.data-grid._dragging-copy._in-edit .data-grid-editable-row td:only-child{border-left:1px solid #007bdb;border-right:1px solid #007bdb;left:0}.data-grid._dragging-copy._in-edit .data-grid-editable-row .admin__control-select,.data-grid._dragging-copy._in-edit .data-grid-editable-row .admin__control-text{opacity:.5}.data-grid._in-edit tr:hover td{background-color:#e6e6e6}.data-grid._in-edit ._odd-row.data-grid-editable-row td,.data-grid._in-edit ._odd-row.data-grid-editable-row:hover td{background-color:#fff}.data-grid._in-edit ._odd-row td,.data-grid._in-edit ._odd-row:hover td{background-color:#dcdcdc}.data-grid._in-edit .data-grid-editable-row-actions td,.data-grid._in-edit .data-grid-editable-row-actions:hover td{background-color:#fff}.data-grid._in-edit td{background-color:#e6e6e6;pointer-events:none}.data-grid._in-edit .data-grid-checkbox-cell{pointer-events:auto}.data-grid._in-edit .data-grid-editable-row{border:.1rem solid #adadad;border-bottom-color:#c2c2c2}.data-grid._in-edit .data-grid-editable-row:hover td{background-color:#fff}.data-grid._in-edit .data-grid-editable-row td{background-color:#fff;border-bottom-color:#fff;border-left-style:hidden;border-right-style:hidden;border-top-color:#fff;pointer-events:auto;vertical-align:middle}.data-grid._in-edit .data-grid-editable-row td:first-child{border-left-color:#adadad;border-left-style:solid}.data-grid._in-edit .data-grid-editable-row td:first-child:after,.data-grid._in-edit .data-grid-editable-row td:first-child:before{left:0}.data-grid._in-edit .data-grid-editable-row td:last-child{border-right-color:#adadad;border-right-style:solid;left:-.1rem}.data-grid._in-edit .data-grid-editable-row td:last-child:after,.data-grid._in-edit .data-grid-editable-row td:last-child:before{right:0}.data-grid._in-edit .data-grid-editable-row .admin__control-select,.data-grid._in-edit .data-grid-editable-row .admin__control-text{width:100%}.data-grid._in-edit .data-grid-bulk-edit-panel td{vertical-align:bottom}.data-grid .data-grid-editable-row td{border-left-color:#fff;border-left-style:solid;position:relative;z-index:1}.data-grid .data-grid-editable-row td:after{bottom:0;box-shadow:0 5px 5px rgba(0,0,0,.25);content:'';height:.9rem;left:0;margin-top:-1rem;position:absolute;right:0}.data-grid .data-grid-editable-row td:before{background-color:#fff;bottom:0;content:'';height:1rem;left:-10px;position:absolute;right:-10px;z-index:1}.data-grid .data-grid-editable-row.data-grid-editable-row-actions td,.data-grid .data-grid-editable-row.data-grid-editable-row-actions:hover td{background-color:#fff}.data-grid .data-grid-editable-row.data-grid-editable-row-actions td:first-child{border-left-color:#fff;border-right-color:#fff}.data-grid .data-grid-editable-row.data-grid-editable-row-actions td:last-child{left:0}.data-grid .data-grid-editable-row.data-grid-bulk-edit-panel td,.data-grid .data-grid-editable-row.data-grid-bulk-edit-panel td:before,.data-grid .data-grid-editable-row.data-grid-bulk-edit-panel:hover td{background-color:#fffbe6}.data-grid .data-grid-editable-row-actions{left:50%;margin-left:-12.5rem;margin-top:-2px;position:absolute;text-align:center}.data-grid .data-grid-editable-row-actions td{width:25rem}.data-grid .data-grid-editable-row-actions [class*=action-]{min-width:9rem}.data-grid-th._sortable._ascend,.data-grid-th._sortable._descend{padding-right:2.7rem}.data-grid-th._sortable._ascend:before,.data-grid-th._sortable._descend:before{margin-top:-1em;position:absolute;right:1rem;top:50%}.data-grid-th._sortable._ascend:before{content:'\2193'}.data-grid-th._sortable._descend:before{content:'\2191'}.data-grid-checkbox-cell-inner{display:block;padding:1.1rem 1.8rem .9rem;text-align:right}.data-grid-checkbox-cell-inner:hover{cursor:pointer}.data-grid-row-parent._active>td .data-grid-checkbox-cell-inner:before{content:'\e62b'}.data-grid-row-parent>td .data-grid-checkbox-cell-inner{padding-left:3.7rem;position:relative}.data-grid-row-parent>td .data-grid-checkbox-cell-inner:before{content:'\e628';font-size:1rem;font-weight:700;left:1.35rem;position:absolute;top:1.6rem}.data-grid-th._col-xs{width:1%}.data-grid-info-panel{box-shadow:0 0 5px rgba(0,0,0,.5);margin:2rem .1rem -2rem;padding:1rem}.data-grid-info-panel .messages{margin-bottom:1rem}.data-grid-info-panel-actions{text-align:right}.data-grid-editable-row .admin__field-control{position:relative}.data-grid-editable-row .admin__field-control._error:after{border-color:transparent #ee7d7d transparent transparent;border-style:solid;border-width:0 12px 12px 0;content:'';position:absolute;right:0;top:0}.data-grid-editable-row .admin__field-control._error .admin__control-text{border-color:#ee7d7d}.data-grid-editable-row .admin__field-control._focus:after{display:none}.data-grid-editable-row .admin__field-error{bottom:100%;box-shadow:1px 1px 5px rgba(0,0,0,.5);left:0;margin:0 auto 1.5rem;max-width:32rem;position:absolute;right:0}.data-grid-editable-row .admin__field-error:after,.data-grid-editable-row .admin__field-error:before{border-style:solid;content:'';left:50%;position:absolute;top:100%}.data-grid-editable-row .admin__field-error:after{border-color:#fffbbb transparent transparent;border-width:10px 10px 0;margin-left:-10px;z-index:1}.data-grid-editable-row .admin__field-error:before{border-color:#ee7d7d transparent transparent;border-width:11px 12px 0;margin-left:-12px}.data-grid-bulk-edit-panel .admin__field-label-vertical{display:block;font-size:1.2rem;margin-bottom:.5rem;text-align:left}.data-grid-row-changed{cursor:default;display:block;opacity:.5;position:relative;width:100%;z-index:1}.data-grid-row-changed:after{content:'\e631';display:inline-block}.data-grid-row-changed .data-grid-row-changed-tooltip{background:#f1f1f1;border-radius:1px;border:1px solid #f1f1f1;bottom:100%;box-shadow:0 3px 9px 0 rgba(0,0,0,.3);display:none;font-weight:400;line-height:1.36;margin-bottom:1.5rem;padding:1rem;position:absolute;right:-1rem;text-transform:none;width:27rem;word-break:normal;z-index:2}.data-grid-row-changed._changed{opacity:1;z-index:3}.data-grid-row-changed._changed:hover .data-grid-row-changed-tooltip{display:block}.data-grid-row-changed._changed:hover:before{background:#f1f1f1;border:1px solid #f1f1f1;bottom:100%;box-shadow:4px 4px 3px -1px rgba(0,0,0,.15);content:'';display:block;height:1.6rem;left:50%;margin:0 0 .7rem -.8rem;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:1.6rem;z-index:3}.ie9 .data-grid-row-changed._changed:hover:before{display:none}.admin__control-addon [class*=admin__control-][type]+[class*=admin__addon-]:before,.admin__control-file-label :before,.admin__control-multiselect,.admin__control-select,.admin__control-text,.admin__control-textarea,.selectmenu{background-color:#fff;border-radius:1px;border:1px solid #adadad;color:#303030;font-size:1.4rem;font-weight:400;line-height:1.36;height:auto;width:auto;padding:.6rem 1rem;transition:border-color .1s linear;vertical-align:baseline}.admin__control-multiselect:hover,.admin__control-select:hover,.admin__control-text:hover,.admin__control-textarea:hover,.selectmenu:hover,.selectmenu:hover .selectmenu-toggle:before{border-color:#878787}.admin__control-addon [class*=admin__control-][type]:focus+[class*=admin__addon-]:before,.admin__control-file:active+.admin__control-file-label :before,.admin__control-file:focus+.admin__control-file-label :before,.admin__control-multiselect:focus,.admin__control-select:focus,.admin__control-text:focus,.admin__control-textarea:focus,.selectmenu._focus,.selectmenu._focus .selectmenu-toggle:before{border-color:#007bdb;box-shadow:none;outline:0}.admin__control-addon [class*=admin__control-][type][disabled]+[class*=admin__addon-]:before,.admin__control-file[disabled]+.admin__control-file-label :before,.admin__control-multiselect[disabled],.admin__control-select[disabled],.admin__control-text[disabled],.admin__control-textarea[disabled]{background-color:#e9e9e9;border-color:#adadad;color:#303030;opacity:.5;cursor:not-allowed}.admin__fieldset>.admin__field.admin__field-wide[class]>.admin__field-control{float:none;clear:left;text-align:left;width:auto}.admin__fieldset>.admin__field.admin__field-wide[class]:not(.admin__field-option)>.admin__field-label{display:block;line-height:1.4rem;margin-bottom:.86rem;margin-top:-.14rem;text-align:left;width:auto}.admin__fieldset>.admin__field.admin__field-wide[class]:not(.admin__field-option)>.admin__field-label:before{display:none}.admin__fieldset>.admin__field.admin__field-wide[class]:not(.admin__field-option)._required>.admin__field-label span{padding-left:1.5rem}.admin__fieldset>.admin__field.admin__field-wide[class]:not(.admin__field-option)._required>.admin__field-label span:after{left:0;margin-left:30px;top:.2rem}.admin__legend{font-size:1.8rem;font-weight:600;margin-bottom:3rem}.admin__control-checkbox,.admin__control-radio{cursor:pointer;opacity:.01;overflow:hidden;position:absolute;vertical-align:top}.admin__control-checkbox:after,.admin__control-radio:after{display:none}.admin__control-checkbox+label,.admin__control-radio+label{cursor:pointer;display:inline-block}.admin__control-checkbox+label:before,.admin__control-radio+label:before{background-color:#fff;border:1px solid #adadad;color:transparent;float:left;height:1.6rem;text-align:center;vertical-align:top;width:1.6rem}.admin__control-checkbox+.admin__field-label,.admin__control-radio+.admin__field-label{padding-left:2.6rem}.admin__control-checkbox+.admin__field-label:before,.admin__control-radio+.admin__field-label:before{margin:1px 1rem 0 -2.6rem}.admin__control-checkbox:checked+label:before,.admin__control-radio:checked+label:before{color:#514943}.admin__control-checkbox.disabled+label,.admin__control-checkbox[disabled]+label,.admin__control-radio.disabled+label,.admin__control-radio[disabled]+label{cursor:default;color:#303030;opacity:.5}.admin__control-checkbox.disabled+label:before,.admin__control-checkbox[disabled]+label:before,.admin__control-radio.disabled+label:before,.admin__control-radio[disabled]+label:before{background-color:#e9e9e9;border-color:#adadad;cursor:default}._keyfocus .admin__control-checkbox:not(.disabled):focus+label:before,._keyfocus .admin__control-checkbox:not([disabled]):focus+label:before,._keyfocus .admin__control-radio:not(.disabled):focus+label:before,._keyfocus .admin__control-radio:not([disabled]):focus+label:before{border-color:#007bdb}.admin__control-checkbox:not(.disabled):hover+label:before,.admin__control-checkbox:not([disabled]):hover+label:before,.admin__control-radio:not(.disabled):hover+label:before,.admin__control-radio:not([disabled]):hover+label:before{border-color:#878787}.admin__control-radio+label:before{border-radius:1.6rem;content:'\e637';font-size:1rem;transition:border-color .1s linear,color .1s ease-in}.admin__control-radio.admin__control-radio+label:before{line-height:140%}.admin__control-radio:checked:not(.disabled):hover,.admin__control-radio:checked:not(.disabled):hover+label,.admin__control-radio:checked:not([disabled]):hover,.admin__control-radio:checked:not([disabled]):hover+label{cursor:default}.admin__control-radio:checked:not(.disabled):hover+label:before,.admin__control-radio:checked:not([disabled]):hover+label:before{border-color:#adadad}.admin__control-checkbox+label:before{border-radius:1px;content:'';font-size:0;transition:font-size .1s ease-out,color .1s ease-out,border-color .1s linear}.admin__control-checkbox:checked+label:before{content:'\e62d';font-size:1.1rem;line-height:125%}.admin__control-checkbox:not(:checked)._indeterminate+label:before,.admin__control-checkbox:not(:checked):indeterminate+label:before{color:#514943;content:'-';font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.4rem;font-weight:700}input[type=checkbox].admin__control-checkbox,input[type=radio].admin__control-checkbox{position:absolute;margin:0}.admin__control-select{-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;background-repeat:no-repeat;background-image:url(../images/arrows-bg.svg),linear-gradient(#e3e3e3,#e3e3e3),linear-gradient(#adadad,#adadad);background-position:calc(100% - 12px) -34px,100%,calc(100% - 3.2rem) 0;background-size:auto,3.2rem 100%,1px 100%;padding-bottom:.5rem;padding-right:4.4rem;padding-top:.5rem;transition:border-color .1s linear}.admin__control-select:hover{border-color:#878787;cursor:pointer}.admin__control-select:focus{background-image:url(../images/arrows-bg.svg),linear-gradient(#e3e3e3,#e3e3e3),linear-gradient(#007bdb,#007bdb);background-position:calc(100% - 12px) 13px,100%,calc(100% - 3.2rem) 0;border-color:#007bdb}.admin__control-select::-ms-expand{display:none}.ie9 .admin__control-select{background-image:none;padding-right:1rem}option:empty{display:none}.admin__control-multiselect{height:auto;padding:.6rem 1rem}.admin__control-file-wrapper{display:inline-block;padding:.5rem 1rem;position:relative;z-index:1}.admin__control-file-label :before{content:'';left:0;position:absolute;top:0;width:100%;z-index:0}.admin__control-file{position:relative;z-index:1;background:0 0;border:0;width:auto}.admin__control-support-text{border:1px solid transparent;display:inline-block;font-size:1.4rem;line-height:1.36;padding-top:.6rem;padding-bottom:.6rem}.admin__control-support-text+[class*=admin__control-],[class*=admin__control-]+.admin__control-support-text{margin-left:.7rem}.admin__control-textarea{height:8.48rem;line-height:1.18;padding-top:.8rem;resize:vertical}.admin__control-addon{-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;display:inline-flex;-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap;position:relative;width:100%;z-index:1}.admin__control-addon>[class*=admin__addon-],.admin__control-addon>[class*=admin__control-]{-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;position:relative;z-index:1}.admin__control-addon [class*=admin__control-][type]{appearence:none;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;box-shadow:none;background-color:transparent;border-color:transparent;-webkit-order:1;-ms-flex-order:1;order:1;vertical-align:top;width:auto}.admin__control-addon [class*=admin__control-][type] :focus{box-shadow:0}.admin__control-addon [class*=admin__control-][type]+[class*=admin__addon-]{padding-left:1rem;position:static!important;z-index:0}.admin__control-addon [class*=admin__control-][type]+[class*=admin__addon-]>*{position:relative;vertical-align:top;z-index:2}.admin__control-addon [class*=admin__control-][type]+[class*=admin__addon-]:before{bottom:0;box-sizing:border-box;content:'';left:0;position:absolute;top:0;width:100%;z-index:0}.admin__addon-prefix,.admin__addon-suffix{border:0;box-sizing:border-box;color:#858585;display:inline-block;font-size:1.4rem;font-weight:400;height:3.2rem;line-height:3.2rem;padding:0}.admin__addon-suffix{-webkit-order:3;-ms-flex-order:3;order:3}.admin__addon-suffix:last-child{padding-right:1rem}.admin__addon-prefix{-webkit-order:0;-ms-flex-order:0;order:0}.ie9 .admin__control-addon:after{clear:both;content:'';display:block;height:0;overflow:hidden}.ie9 .admin__addon{min-width:0;overflow:hidden;text-align:right;white-space:nowrap;width:auto}.ie9 .admin__addon [class*=admin__control-]{display:inline}.ie9 .admin__addon-prefix{float:left}.ie9 .admin__addon-suffix{float:right}.admin__control-table-wrapper{max-width:100%;overflow-x:auto;overflow-y:hidden}.admin__control-table{width:100%}.admin__control-table thead{background-color:transparent}.admin__control-table tbody td{vertical-align:middle}.admin__control-table tfoot th{padding-bottom:1.3rem}.admin__control-table tr:last-child td,.admin__control-table tr:last-child th{border-bottom:none}.admin__control-table td,.admin__control-table th{background-color:#efefef;border:0;border-bottom:1px solid #fff;padding:1.3rem 2.5rem 1.3rem 0;text-align:left;vertical-align:top}.admin__control-table td:first-child,.admin__control-table th:first-child{padding-left:1.5rem}.admin__control-table th{border:0;vertical-align:bottom;color:#303030;font-size:1.4rem;font-weight:600;padding-bottom:0}.admin__control-table th._required span:after{color:#eb5202;content:'*'}.admin__control-table .control-table-actions-th{white-space:nowrap}.admin__control-table .control-table-actions-cell{padding-top:1.8rem;text-align:center;width:1%}.admin__control-table .col-draggable{padding-top:2.2rem;width:1%}.admin__control-table .action-delete,.admin__control-table .action-delete:hover{background-color:transparent;border-color:transparent;box-shadow:none}.admin__control-table .action-delete:before{content:'\e630'}.admin__control-table .action-delete>span{display:none}.admin__field-tooltip{display:inline-block;margin-top:5px;overflow:visible;vertical-align:top;width:0}.admin__field-tooltip:hover{position:relative;z-index:500}.admin__field-option .admin__field-tooltip{margin-top:10px}.admin__field-tooltip .admin__field-tooltip-action{margin-left:20px;display:inline-block;text-decoration:none}.admin__field-tooltip .admin__field-tooltip-action:before{-webkit-font-smoothing:antialiased;font-size:2.2rem;line-height:1;color:#514943;content:'\e633';font-family:Icons;vertical-align:middle;display:inline-block;font-weight:400;overflow:hidden;speak:none;text-align:center}.admin__field-tooltip .admin__control-text:focus+.admin__field-tooltip-content,.admin__field-tooltip:hover .admin__field-tooltip-content{display:block}.admin__field-tooltip .admin__field-tooltip-content{bottom:42px;display:none;right:-70px}.admin__field-tooltip .admin__field-tooltip-content:after,.admin__field-tooltip .admin__field-tooltip-content:before{border:16px solid transparent;height:0;width:0;border-top-color:#afadac;content:"";display:block;position:absolute;right:20px;top:100%;z-index:3}.admin__field-tooltip .admin__field-tooltip-content:after{border-top-color:#fffbbb;margin-top:-1px;z-index:4}.abs-admin__field-tooltip-content,.admin__field-tooltip .admin__field-tooltip-content{box-shadow:0 2px 8px 0 rgba(0,0,0,.3);background:#fffbbb;border-radius:1px;border:1px solid #afadac;padding:15px 25px;position:absolute;width:320px;z-index:1}.admin__fieldset{border:0;margin:0;min-width:0;padding:0}.admin__fieldset>.admin__field{border:0;margin:0 0 0 -30px;padding:0}.admin__fieldset>.admin__field:after{clear:both;content:'';display:table}.admin__fieldset>.admin__field>.admin__field-control{width:calc((100%) * .4444444444444444 - 30px);float:left;margin-left:30px}.admin__fieldset>.admin__field>.admin__field-label{width:calc((100%) * .3333333333333333 - 30px);float:left;margin-left:30px}.admin__form-field{border:0;margin:0;padding:0}.admin__field-control .admin__control-text,.admin__field-control .admin__control-textarea,.admin__form-field-control .admin__control-text,.admin__form-field-control .admin__control-textarea{width:100%}.admin__field-label{color:#303030;margin:0;text-align:right}.admin__field-label+br{display:none}.admin__field:not(.admin__field-option)>.admin__field-label{font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.4rem;font-weight:600;line-height:3.2rem;padding:0;white-space:nowrap;word-wrap:break-word}.admin__field:not(.admin__field-option)>.admin__field-label:before{opacity:0;visibility:hidden;content:'.';margin-left:-7px;overflow:hidden}.admin__field:not(.admin__field-option)>.admin__field-label span{display:inline-block;line-height:1.2;vertical-align:middle;white-space:normal}._required>.admin__field-label span:after{color:#eb5202;content:'*';display:inline-block;font-size:1.6rem;font-weight:500;line-height:1;margin-left:10px;position:absolute;top:1.2rem;z-index:1}._disabled>.admin__field-label{color:#999}.admin__field{margin-bottom:0}.admin__field+.admin__field{margin-top:1.5rem}.admin__field:not(.admin__field-option)~.admin__field-option{margin-top:.5rem}.admin__field.admin__field-option~.admin__field-option{margin-top:.9rem}.admin__field~.admin__field-option:last-child{margin-bottom:.8rem}.admin__fieldset>.admin__field{margin-bottom:3rem;position:relative}.admin__field[data-config-scope]:before{color:gray;content:attr(data-config-scope);display:inline-block;font-size:1.2rem;left:calc((100%) * .7777777777777778 - 30px);line-height:3.2rem;margin-left:60px;position:absolute;width:calc((100%) * .2222222222222222 - 30px)}.admin__field-control .admin__field[data-config-scope]:nth-child(n+2):before{content:''}.admin__field._error .admin__field-control [class*=admin__addon-]:before,.admin__field._error .admin__field-control>[class*=admin__control-]{border-color:#e22626}.admin__field-control+.admin__field-control{margin-top:1.5rem}.admin__field-error{background:#fffbbb;border:1px solid #ee7d7d;box-sizing:border-box;color:#555;display:block;font-size:1.2rem;font-weight:400;line-height:1.2;margin:.2rem 0 0;padding:.8rem 1rem .9rem}.admin__field-note{color:#303030;font-size:1.2rem;margin:10px 0 0;padding:0}.admin__field-option{padding-top:.8rem}.admin__field-option .admin__field-label{text-align:left}.admin__field-control>.admin__field-option:nth-child(1):nth-last-child(2),.admin__field-control>.admin__field-option:nth-child(2):nth-last-child(1){display:inline-block}.admin__field-control>.admin__field-option:nth-child(1):nth-last-child(2)+.admin__field-option,.admin__field-control>.admin__field-option:nth-child(2):nth-last-child(1)+.admin__field-option{display:inline-block;margin-left:41px;margin-top:0}.admin__field-control>.admin__field-option:nth-child(1):nth-last-child(2)+.admin__field-option:before,.admin__field-control>.admin__field-option:nth-child(2):nth-last-child(1)+.admin__field-option:before{background:#cacaca;content:'';display:inline-block;height:20px;margin-left:-20px;position:absolute;width:1px}.admin__field-value{padding-top:.8rem}.admin__control-fields>.admin__field:first-child,[class*=admin__control-grouped]>.admin__field:first-child{position:static}.admin__control-fields>.admin__field:first-child>.admin__field-label,[class*=admin__control-grouped]>.admin__field:first-child>.admin__field-label{width:calc((100%) * .3333333333333333 - 30px);float:left;margin-left:30px;cursor:pointer;left:0;opacity:0;position:absolute;top:0}.admin__control-fields .admin__field-label~.admin__field-control{width:100%}[class*=admin__control-grouped]{box-sizing:border-box;display:table;table-layout:fixed;width:100%}[class*=admin__control-grouped]>.admin__field{display:table-cell;vertical-align:top;width:50%}[class*=admin__control-grouped]>.admin__field>.admin__field-control{float:none;width:100%}[class*=admin__control-grouped]>.admin__field:nth-child(n+2){padding-left:20px}[class*=admin__control-grouped]>.admin__field:nth-child(n+2):not(.admin__field-option) .admin__field-label{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.admin__field-control-group{margin-top:.8rem}.admin__field-control-group>.admin__field{padding:0}.admin__legend{float:left;position:static;width:100%}.admin__legend+br{display:block;height:0;overflow:hidden;clear:left}.message{margin-bottom:3rem}.message-icon-top:before{margin-top:0;top:1.8rem}.nav{background-color:#f8f8f8;border-bottom:1px solid #e3e3e3;border-top:1px solid #e3e3e3;display:none;padding:2.2rem 1.5rem 0 0}.nav .btn-group,.nav-bar-outer-actions{float:right;margin-bottom:1.7rem}.nav .btn-group .btn-wrap,.nav-bar-outer-actions .btn-wrap{float:right;margin-left:.5rem;margin-right:.5rem}.nav .btn-group .btn-wrap .btn,.nav-bar-outer-actions .btn-wrap .btn{padding-left:.5rem;padding-right:.5rem}.nav-bar-outer-actions{margin-top:-10.6rem;padding-right:1.5rem}.btn-wrap-try-again{width:9.5rem}.btn-wrap-next,.btn-wrap-prev{width:8.5rem}.nav-bar{counter-reset:i;float:left;margin:0 1rem 1.7rem 0;padding:0;position:relative;white-space:nowrap}.nav-bar:before{background-color:#d4d4d4;background-repeat:repeat-x;background-image:linear-gradient(to bottom,#d1d1d1 0,#d4d4d4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#d1d1d1', endColorstr='#d4d4d4', GradientType=0);border-bottom:1px solid #d9d9d9;border-top:1px solid #bfbfbf;content:'';height:1rem;left:5.15rem;position:absolute;right:5.15rem;top:.7rem}.nav-bar>li{display:inline-block;font-size:0;position:relative;vertical-align:top;width:10.3rem}.nav-bar>li:first-child:after{display:none}.nav-bar>li:after{background-color:#514943;content:'';height:.5rem;left:calc(-50% + .25rem);position:absolute;right:calc(50% + .7rem);top:.9rem}.nav-bar>li.disabled:before,.nav-bar>li.ui-state-disabled:before{bottom:0;content:'';left:0;position:absolute;right:0;top:0;z-index:1}.nav-bar>li.active~li:after,.nav-bar>li.ui-state-active~li:after{display:none}.nav-bar>li.active~li a:after,.nav-bar>li.ui-state-active~li a:after{background-color:transparent;border-color:transparent;color:#a6a6a6}.nav-bar>li.active a,.nav-bar>li.ui-state-active a{color:#000}.nav-bar>li.active a:hover,.nav-bar>li.ui-state-active a:hover{cursor:default}.nav-bar>li.active a:after,.nav-bar>li.ui-state-active a:after{background-color:#fff;content:''}.nav-bar a{color:#514943;display:block;font-size:1.2rem;font-weight:600;line-height:1.2;overflow:hidden;padding:3rem .5em 0;position:relative;text-align:center;text-overflow:ellipsis}.nav-bar a:hover{text-decoration:none}.nav-bar a:after{background-color:#514943;border:.4rem solid #514943;border-radius:100%;color:#fff;content:counter(i);counter-increment:i;height:1.5rem;left:50%;line-height:.6;margin-left:-.8rem;position:absolute;right:auto;text-align:center;top:.4rem;width:1.5rem}.nav-bar a:before{background-color:#d6d6d6;border:1px solid transparent;border-bottom-color:#d9d9d9;border-radius:100%;border-top-color:#bfbfbf;content:'';height:2.3rem;left:50%;line-height:1;margin-left:-1.2rem;position:absolute;top:0;width:2.3rem}.tooltip{display:block;font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.19rem;font-weight:400;line-height:1.4;opacity:0;position:absolute;visibility:visible;z-index:10}.tooltip.in{opacity:.9}.tooltip.top{margin-top:-4px;padding:8px 0}.tooltip.right{margin-left:4px;padding:0 8px}.tooltip.bottom{margin-top:4px;padding:8px 0}.tooltip.left{margin-left:-4px;padding:0 8px}.tooltip-inner{background-color:#fff;border:1px solid #adadad;border-radius:0;box-shadow:1px 1px 1px #ccc;color:#41362f;max-width:20rem;padding:.5em 1em;text-decoration:none}.tooltip-arrow,.tooltip-arrow:after{border:solid transparent;height:0;position:absolute;width:0}.tooltip-arrow:after{content:'';position:absolute}.tooltip.top .tooltip-arrow,.tooltip.top .tooltip-arrow:after{border-top-color:#949494;border-width:8px 8px 0;bottom:0;left:50%;margin-left:-8px}.tooltip.top-left .tooltip-arrow,.tooltip.top-left .tooltip-arrow:after{border-top-color:#949494;border-width:8px 8px 0;bottom:0;margin-bottom:-8px;right:8px}.tooltip.top-right .tooltip-arrow,.tooltip.top-right .tooltip-arrow:after{border-top-color:#949494;border-width:8px 8px 0;bottom:0;left:8px;margin-bottom:-8px}.tooltip.right .tooltip-arrow,.tooltip.right .tooltip-arrow:after{border-right-color:#949494;border-width:8px 8px 8px 0;left:1px;margin-top:-8px;top:50%}.tooltip.right .tooltip-arrow:after{border-right-color:#fff;border-width:6px 7px 6px 0;margin-left:0;margin-top:-6px}.tooltip.left .tooltip-arrow,.tooltip.left .tooltip-arrow:after{border-left-color:#949494;border-width:8px 0 8px 8px;margin-top:-8px;right:0;top:50%}.tooltip.bottom .tooltip-arrow,.tooltip.bottom .tooltip-arrow:after{border-bottom-color:#949494;border-width:0 8px 8px;left:50%;margin-left:-8px;top:0}.tooltip.bottom-left .tooltip-arrow,.tooltip.bottom-left .tooltip-arrow:after{border-bottom-color:#949494;border-width:0 8px 8px;margin-top:-8px;right:8px;top:0}.tooltip.bottom-right .tooltip-arrow,.tooltip.bottom-right .tooltip-arrow:after{border-bottom-color:#949494;border-width:0 8px 8px;left:8px;margin-top:-8px;top:0}.password-strength{display:block;margin:0 -.3rem 1em;white-space:nowrap}.password-strength.password-strength-too-short .password-strength-item:first-child,.password-strength.password-strength-weak .password-strength-item:first-child,.password-strength.password-strength-weak .password-strength-item:first-child+.password-strength-item{background-color:#e22626}.password-strength.password-strength-fair .password-strength-item:first-child,.password-strength.password-strength-fair .password-strength-item:first-child+.password-strength-item,.password-strength.password-strength-fair .password-strength-item:first-child+.password-strength-item+.password-strength-item{background-color:#ef672f}.password-strength.password-strength-good .password-strength-item:first-child,.password-strength.password-strength-good .password-strength-item:first-child+.password-strength-item,.password-strength.password-strength-good .password-strength-item:first-child+.password-strength-item+.password-strength-item,.password-strength.password-strength-good .password-strength-item:first-child+.password-strength-item+.password-strength-item+.password-strength-item,.password-strength.password-strength-strong .password-strength-item{background-color:#79a22e}.password-strength .password-strength-item{background-color:#ccc;display:inline-block;font-size:0;height:1.4rem;margin-right:.3rem;width:calc(20% - .6rem)}@-webkit-keyframes progress-bar-stripes{from{background-position:4rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:4rem 0}to{background-position:0 0}}.progress{background-color:#fafafa;border:1px solid #ccc;clear:left;height:3rem;margin-bottom:3rem;overflow:hidden}.progress-bar{background-color:#79a22e;color:#fff;float:left;font-size:1.19rem;height:100%;line-height:3rem;text-align:center;transition:width .6s ease;width:0}.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-text-description{margin-bottom:1.6rem}.progress-bar-text-progress{text-align:right}.page-columns .page-inner-sidebar{margin:0 0 3rem}.page-header{margin-bottom:2.7rem;padding-bottom:2.9rem;position:relative}.page-header:before{border-bottom:1px solid #e3e3e3;bottom:0;content:'';display:block;height:1px;left:3rem;position:absolute;right:3rem}.container .page-header:before{content:normal}.page-header .message{margin-bottom:1.8rem}.page-header .message+.message{margin-top:-1.5rem}.page-header .admin__action-dropdown,.page-header .search-global-input{transition:none}.container .page-header{margin-bottom:0}.page-title-wrapper{margin-top:1.1rem}.container .page-title-wrapper{background:url(../../pub/images/logo.svg) no-repeat;min-height:41px;padding:4px 0 0 45px}.admin__menu .level-0:first-child>a{margin-top:1.6rem}.admin__menu .level-0:first-child>a:after{top:-1.6rem}.admin__menu .level-0>a{padding-top:1.3rem;padding-bottom:1.3rem}.admin__menu .level-0>a:before{margin-bottom:.7rem}.admin__menu .item-home>a:before{content:'\e611';font-size:2.3rem;padding-top:-.1rem}.admin__menu .item-component>a:before{content:'\e612'}.admin__menu .item-upgrade>a:before{content:'\e614'}.admin__menu .item-system-config>a:before{content:'\e610'}.admin__menu .item-tools>a:before{content:'\e613'}.modal-sub-title{font-size:1.7rem;font-weight:600}.modal-connect-signin .modal-inner-wrap{max-width:80rem}@-webkit-keyframes ngdialog-fadeout{0%{opacity:1}100%{opacity:0}}@keyframes ngdialog-fadeout{0%{opacity:1}100%{opacity:0}}@-webkit-keyframes ngdialog-fadein{0%{opacity:0}100%{opacity:1}}@keyframes ngdialog-fadein{0%{opacity:0}100%{opacity:1}}.ngdialog{-webkit-overflow-scrolling:touch;bottom:0;box-sizing:border-box;left:0;overflow:auto;position:fixed;right:0;top:0;z-index:999}.ngdialog *,.ngdialog:after,.ngdialog:before{box-sizing:inherit}.ngdialog.ngdialog-disabled-animation *{-webkit-animation:none!important;animation:none!important}.ngdialog.ngdialog-closing .ngdialog-content,.ngdialog.ngdialog-closing .ngdialog-overlay{-webkit-backface-visibility:hidden;-webkit-animation:ngdialog-fadeout .5s;animation:ngdialog-fadeout .5s}.ngdialog-overlay{-webkit-backface-visibility:hidden;-webkit-animation:ngdialog-fadein .5s;animation:ngdialog-fadein .5s;background:rgba(0,0,0,.4);bottom:0;left:0;position:fixed;right:0;top:0}.ngdialog-content{-webkit-backface-visibility:hidden;-webkit-animation:ngdialog-fadein .5s;animation:ngdialog-fadein .5s}body.ngdialog-open{overflow:hidden}.component-indicator{border-radius:50%;cursor:help;display:inline-block;height:20px;text-align:center;width:20px}.component-indicator::after,.component-indicator::before{background:#fff;display:block;opacity:0;position:absolute;transition:opacity .2s linear .1s;visibility:hidden}.component-indicator::before{border-radius:1px;border:1px solid #adadad;box-shadow:0 0 2px rgba(0,0,0,.4);content:attr(data-label);font-size:1.2rem;margin:34px 0 0 -10px;min-width:50px;padding:4px 5px}.component-indicator::after{border:1px solid #999;border-width:1px 0 0 1px;box-shadow:-1px -1px 1px rgba(0,0,0,.1);content:'';height:10px;margin:9px 0 0 5px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:10px}.component-indicator:hover::after,.component-indicator:hover::before{opacity:1;transition:opacity .2s linear;visibility:visible}.component-indicator span{display:block;height:20px;overflow:hidden;width:20px}.component-indicator span:before{content:'';display:block;font-family:Icons;font-size:20px;height:100%;line-height:20px;width:100%}.component-indicator._on{background:#79a22e}.component-indicator._off{background:#e22626}.component-indicator._off span:before{background:#fff;height:4px;margin:8px auto 20px;width:12px}.component-indicator._info{background:0 0}.component-indicator._info span{width:21px}.component-indicator._info span:before{color:#008bdb;content:'\e61a';font-family:Icons;font-size:21px}.app-updater .nav{display:block;margin-bottom:3.1rem;margin-top:-2.8rem}.app-updater .nav-bar-outer-actions{margin-top:1rem;padding-right:0}.app-updater .nav-bar-outer-actions .btn-wrap-cancel{margin-right:2.6rem}.main{padding-bottom:2rem;padding-top:3rem}.header{display:none}.header .logo{float:left;height:4.1rem;width:3.5rem}.header-title{font-size:2.8rem;letter-spacing:.02em;line-height:1.4;margin:2.5rem 0 3.5rem 5rem}.page-sub-title{font-size:2rem}.accent-box{margin-bottom:2rem}.accent-box .btn-prime{margin-top:1.5rem}.page-landing{margin:7.6% auto 0;max-width:44rem;text-align:center}.page-landing .logo{height:5.6rem;margin-bottom:2rem;width:19.2rem}.page-landing .text-version{margin-bottom:3rem}.page-landing .text-welcome{margin-bottom:6.5rem}.page-landing .text-terms{margin-bottom:2.5rem;text-align:center}.page-landing .btn-submit,.page-license .license-text{margin-bottom:2rem}.page-license .page-license-footer{text-align:right}.readiness-check-item{margin-bottom:4rem}.readiness-check-title{font-size:1.4rem;font-weight:700;margin-bottom:.1rem;margin-left:7.5rem}.readiness-check-content{margin-left:7.5rem;margin-right:22rem}.readiness-check-content .readiness-check-title{margin-left:0}.readiness-check-content .list{margin-top:-.3rem}.readiness-check-side{float:right;padding-left:2.4rem;width:22rem}.readiness-check-side .side-title{margin-bottom:0}.readiness-check-icon{float:left}.page-web-configuration .form-el-insider-wrap{width:auto}.page-web-configuration .form-el-insider{width:15.4rem}.page-web-configuration .form-el-insider-input .form-el-input{width:16.5rem}.customize-your-store .customize-your-store-default .legend{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.customize-your-store .advanced-modules-count,.customize-your-store .advanced-modules-select{padding-left:1.5rem}.customize-your-store .customize-your-store-advanced{min-width:0}.customize-your-store .message-error:before{margin-top:0;top:1.8rem}.customize-your-store .message-error a{color:#333;text-decoration:underline}.customize-your-store .message-error .form-label:before{background:#fff}.customize-your-store .customize-database-clean p{margin-top:2.5rem}.content-install{margin-bottom:2rem}.console{border:1px solid #ccc;font-family:'Courier New',Courier,monospace;font-weight:300;height:20rem;margin:1rem 0 2rem;overflow-y:auto;padding:1.5rem 2rem 2rem;resize:vertical}.console .text-danger{color:#e22626}.console .text-success{color:#090}.console .hidden{display:none}.content-success .btn-prime{margin-top:1.5rem}.jumbo-title{font-size:3.6rem}.jumbo-title .jumbo-icon{font-size:3.8rem;margin-right:.25em;position:relative;top:.15em}.install-database-clean{margin-top:4rem}.install-database-clean .btn{margin-right:1rem}.page-sub-title{margin-bottom:2.1rem}.multiselect-custom{max-width:71.1rem}.content-install{margin-top:3.7rem}.home-page-inner-wrap{margin:0 auto;max-width:91rem}.setup-home-title{margin-bottom:3.9rem;padding-top:1.8rem;text-align:center}.setup-home-item{background-color:#fafafa;border:1px solid #ccc;color:#333;display:block;margin-bottom:2rem;margin-left:1.3rem;margin-right:1.3rem;min-height:30rem;padding:2rem;text-align:center}.setup-home-item:hover{border-color:#8c8c8c;color:#333;text-decoration:none;transition:border-color .1s linear}.setup-home-item:active{-webkit-transform:scale(0.99);-ms-transform:scale(0.99);transform:scale(0.99)}.setup-home-item:before{display:block;font-size:7rem;margin-bottom:3.3rem;margin-top:4rem}.setup-home-item-component:before{content:'\e612'}.setup-home-item-upgrade:before{content:'\e614'}.setup-home-item-configuration:before{content:'\e610'}.setup-home-item-title{display:block;font-size:1.8rem;letter-spacing:.025em;margin-bottom:1rem}.setup-home-item-description{display:block}.readiness-check-item{padding-top:.3rem}.readiness-check-icon{margin-left:2.4rem;margin-top:-.1rem}.readiness-check-icon.icon-success{font-size:2rem}.readiness-check-icon.icon-failed{font-size:1.6rem}.componenet-manager-wrap{border:1px solid #bbb;margin:0 0 4rem}.componenet-manager-wrap .componenet-manager-account{font-size:1.4rem;float:right;padding:.6rem 0 0}.componenet-manager-wrap .componenet-manager-account .sign-in-out{margin-left:2rem}.component-manager-title{background-color:#f8f8f8;border-bottom:1px solid #e3e3e3;color:#41362f;font-size:2rem;line-height:1.2;padding:2rem}.component-manager-content{padding:2.5rem 2rem 2rem}.componenet-manager-items{list-style:none;margin:0;text-align:center}.componenet-manager-items .btn{border:1px solid #adadad}.componenet-manager-items .item-title{margin:0 0 1.5rem}.componenet-manager-items .item-number{font-size:6rem;line-height:.8;margin:0 0 1.5rem}.componenet-manager-items .item-date{margin:0 0 3.7rem}.componenet-manager-items .item-install{margin:0 0 2rem}.componenet-manager-items .item-install .btn{line-height:1.36;margin:0;padding:0;color:#008bdb;text-decoration:none;background:0 0;border:0;display:inline;font-size:1.4rem;font-weight:400}.componenet-manager-items .item-install .btn:visited{color:#008bdb;text-decoration:none}.componenet-manager-items .item-install .btn:hover{text-decoration:underline}.componenet-manager-items .item-install .btn:active{color:#ff5501;text-decoration:underline}.componenet-manager-items .item-install .btn:hover{color:#0fa7ff}.componenet-manager-items .item-install .btn:active,.componenet-manager-items .item-install .btn:focus,.componenet-manager-items .item-install .btn:hover{background:0 0;border:0}.componenet-manager-items .item-install .btn.disabled,.componenet-manager-items .item-install .btn[disabled],fieldset[disabled] .componenet-manager-items .item-install .btn{color:#008bdb;opacity:.5;cursor:default;pointer-events:none;text-decoration:underline}.componenet-manager-items .item-install .btn.disabled{text-decoration:none}.sync-login-wrap{margin:-2.5rem 0 0;padding:0 10% 4rem}.sync-login-wrap .legend{font-size:2.6rem;color:#eb5202;float:left;font-weight:300;line-height:1.2;margin:-1rem 0 2.5rem;position:static;width:100%}.sync-login-wrap .legend._hidden{display:none}.sync-login-wrap .login-header{font-size:3.4rem;font-weight:300;margin:0 0 2rem}.sync-login-wrap .login-header span{display:inline-block;padding:.9rem 0 0;vertical-align:top}.sync-login-wrap .form-row .form-label{display:inline-block}.sync-login-wrap .form-row .form-label.required{padding-left:1.5rem}.sync-login-wrap .form-row .form-label.required:after{left:0;position:absolute;right:auto}.sync-login-wrap .form-row{max-width:28rem}.sync-login-wrap .form-actions{display:table;margin-top:-1.3rem}.sync-login-wrap .form-actions .links{display:table-header-group}.sync-login-wrap .form-actions .actions{padding:3rem 0 0}@media all and (max-width:1047px){.admin__menu .submenu li{min-width:19.8rem}.nav{padding-bottom:5.38rem;padding-left:1.5rem;text-align:center}.nav-bar{display:inline-block;float:none;margin-right:0;vertical-align:top}.nav .btn-group,.nav-bar-outer-actions{display:inline-block;float:none;margin-top:-8.48rem;text-align:center;vertical-align:top;width:100%}.nav-bar-outer-actions{padding-right:0}.nav-bar-outer-actions .outer-actions-inner-wrap{display:inline-block}.app-updater .nav{padding-bottom:1.7rem}.app-updater .nav-bar-outer-actions{margin-top:2rem}}@media all and (min-width:768px){.page-layout-admin-2columns-left .page-columns{margin-left:-30px}.page-layout-admin-2columns-left .page-columns:after{clear:both;content:'';display:table}.page-layout-admin-2columns-left .page-columns .main-col{width:calc((100%) * .75 - 30px);float:right}.page-layout-admin-2columns-left .page-columns .side-col{width:calc((100%) * .25 - 30px);float:left;margin-left:30px}.col-m-1,.col-m-10,.col-m-11,.col-m-12,.col-m-2,.col-m-3,.col-m-4,.col-m-5,.col-m-6,.col-m-7,.col-m-8,.col-m-9{float:left}.col-m-12{width:100%}.col-m-11{width:91.66666667%}.col-m-10{width:83.33333333%}.col-m-9{width:75%}.col-m-8{width:66.66666667%}.col-m-7{width:58.33333333%}.col-m-6{width:50%}.col-m-5{width:41.66666667%}.col-m-4{width:33.33333333%}.col-m-3{width:25%}.col-m-2{width:16.66666667%}.col-m-1{width:8.33333333%}.col-m-pull-12{right:100%}.col-m-pull-11{right:91.66666667%}.col-m-pull-10{right:83.33333333%}.col-m-pull-9{right:75%}.col-m-pull-8{right:66.66666667%}.col-m-pull-7{right:58.33333333%}.col-m-pull-6{right:50%}.col-m-pull-5{right:41.66666667%}.col-m-pull-4{right:33.33333333%}.col-m-pull-3{right:25%}.col-m-pull-2{right:16.66666667%}.col-m-pull-1{right:8.33333333%}.col-m-pull-0{right:auto}.col-m-push-12{left:100%}.col-m-push-11{left:91.66666667%}.col-m-push-10{left:83.33333333%}.col-m-push-9{left:75%}.col-m-push-8{left:66.66666667%}.col-m-push-7{left:58.33333333%}.col-m-push-6{left:50%}.col-m-push-5{left:41.66666667%}.col-m-push-4{left:33.33333333%}.col-m-push-3{left:25%}.col-m-push-2{left:16.66666667%}.col-m-push-1{left:8.33333333%}.col-m-push-0{left:auto}.col-m-offset-12{margin-left:100%}.col-m-offset-11{margin-left:91.66666667%}.col-m-offset-10{margin-left:83.33333333%}.col-m-offset-9{margin-left:75%}.col-m-offset-8{margin-left:66.66666667%}.col-m-offset-7{margin-left:58.33333333%}.col-m-offset-6{margin-left:50%}.col-m-offset-5{margin-left:41.66666667%}.col-m-offset-4{margin-left:33.33333333%}.col-m-offset-3{margin-left:25%}.col-m-offset-2{margin-left:16.66666667%}.col-m-offset-1{margin-left:8.33333333%}.col-m-offset-0{margin-left:0}.page-columns{margin-left:-30px}.page-columns:after{clear:both;content:'';display:table}.page-columns .page-inner-content{width:calc((100%) * .75 - 30px);float:right}.page-columns .page-inner-sidebar{width:calc((100%) * .25 - 30px);float:left;margin-left:30px}}@media all and (min-width:1048px){.col-l-1,.col-l-10,.col-l-11,.col-l-12,.col-l-2,.col-l-3,.col-l-4,.col-l-5,.col-l-6,.col-l-7,.col-l-8,.col-l-9{float:left}.col-l-12{width:100%}.col-l-11{width:91.66666667%}.col-l-10{width:83.33333333%}.col-l-9{width:75%}.col-l-8{width:66.66666667%}.col-l-7{width:58.33333333%}.col-l-6{width:50%}.col-l-5{width:41.66666667%}.col-l-4{width:33.33333333%}.col-l-3{width:25%}.col-l-2{width:16.66666667%}.col-l-1{width:8.33333333%}.col-l-pull-12{right:100%}.col-l-pull-11{right:91.66666667%}.col-l-pull-10{right:83.33333333%}.col-l-pull-9{right:75%}.col-l-pull-8{right:66.66666667%}.col-l-pull-7{right:58.33333333%}.col-l-pull-6{right:50%}.col-l-pull-5{right:41.66666667%}.col-l-pull-4{right:33.33333333%}.col-l-pull-3{right:25%}.col-l-pull-2{right:16.66666667%}.col-l-pull-1{right:8.33333333%}.col-l-pull-0{right:auto}.col-l-push-12{left:100%}.col-l-push-11{left:91.66666667%}.col-l-push-10{left:83.33333333%}.col-l-push-9{left:75%}.col-l-push-8{left:66.66666667%}.col-l-push-7{left:58.33333333%}.col-l-push-6{left:50%}.col-l-push-5{left:41.66666667%}.col-l-push-4{left:33.33333333%}.col-l-push-3{left:25%}.col-l-push-2{left:16.66666667%}.col-l-push-1{left:8.33333333%}.col-l-push-0{left:auto}.col-l-offset-12{margin-left:100%}.col-l-offset-11{margin-left:91.66666667%}.col-l-offset-10{margin-left:83.33333333%}.col-l-offset-9{margin-left:75%}.col-l-offset-8{margin-left:66.66666667%}.col-l-offset-7{margin-left:58.33333333%}.col-l-offset-6{margin-left:50%}.col-l-offset-5{margin-left:41.66666667%}.col-l-offset-4{margin-left:33.33333333%}.col-l-offset-3{margin-left:25%}.col-l-offset-2{margin-left:16.66666667%}.col-l-offset-1{margin-left:8.33333333%}.col-l-offset-0{margin-left:0}}@media all and (min-width:1440px){.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9{float:left}.col-xl-12{width:100%}.col-xl-11{width:91.66666667%}.col-xl-10{width:83.33333333%}.col-xl-9{width:75%}.col-xl-8{width:66.66666667%}.col-xl-7{width:58.33333333%}.col-xl-6{width:50%}.col-xl-5{width:41.66666667%}.col-xl-4{width:33.33333333%}.col-xl-3{width:25%}.col-xl-2{width:16.66666667%}.col-xl-1{width:8.33333333%}.col-xl-pull-12{right:100%}.col-xl-pull-11{right:91.66666667%}.col-xl-pull-10{right:83.33333333%}.col-xl-pull-9{right:75%}.col-xl-pull-8{right:66.66666667%}.col-xl-pull-7{right:58.33333333%}.col-xl-pull-6{right:50%}.col-xl-pull-5{right:41.66666667%}.col-xl-pull-4{right:33.33333333%}.col-xl-pull-3{right:25%}.col-xl-pull-2{right:16.66666667%}.col-xl-pull-1{right:8.33333333%}.col-xl-pull-0{right:auto}.col-xl-push-12{left:100%}.col-xl-push-11{left:91.66666667%}.col-xl-push-10{left:83.33333333%}.col-xl-push-9{left:75%}.col-xl-push-8{left:66.66666667%}.col-xl-push-7{left:58.33333333%}.col-xl-push-6{left:50%}.col-xl-push-5{left:41.66666667%}.col-xl-push-4{left:33.33333333%}.col-xl-push-3{left:25%}.col-xl-push-2{left:16.66666667%}.col-xl-push-1{left:8.33333333%}.col-xl-push-0{left:auto}.col-xl-offset-12{margin-left:100%}.col-xl-offset-11{margin-left:91.66666667%}.col-xl-offset-10{margin-left:83.33333333%}.col-xl-offset-9{margin-left:75%}.col-xl-offset-8{margin-left:66.66666667%}.col-xl-offset-7{margin-left:58.33333333%}.col-xl-offset-6{margin-left:50%}.col-xl-offset-5{margin-left:41.66666667%}.col-xl-offset-4{margin-left:33.33333333%}.col-xl-offset-3{margin-left:25%}.col-xl-offset-2{margin-left:16.66666667%}.col-xl-offset-1{margin-left:8.33333333%}.col-xl-offset-0{margin-left:0}}@media all and (max-width:767px){.list-definition>dt{float:none}.list-definition>dd{margin-left:0}.form-row .form-label{text-align:left}.form-row .form-label.required:after{position:static}.nav{padding-bottom:0;padding-left:0;padding-right:0}.nav-bar-outer-actions{margin-top:0}.nav-bar{display:block;margin-bottom:0;margin-left:auto;margin-right:auto;width:30.9rem}.nav-bar:before{display:none}.nav-bar>li{float:left;min-height:9rem}.nav-bar>li:after{display:none}.nav-bar>li:nth-child(4n){clear:both}.nav-bar a{line-height:1.4}.tooltip{display:none!important}.readiness-check-content{margin-right:2rem}.form-el-insider,.form-el-insider-wrap,.page-web-configuration .form-el-insider-input,.page-web-configuration .form-el-insider-input .form-el-input{display:block;width:100%}}@media all and (max-width:479px){.nav-bar{width:23.175rem}.nav-bar>li{width:7.725rem}.nav .btn-group .btn-wrap-try-again,.nav-bar-outer-actions .btn-wrap-try-again{clear:both;display:block;float:none;margin-left:auto;margin-right:auto;margin-top:1rem;padding-top:1rem}} +.abs-action-delete,.abs-icon,.action-close:before,.action-next:before,.action-previous:before,.admin-user .admin__action-dropdown:before,.admin__action-multiselect-search-label:before,.admin__control-checkbox+label:before,.admin__control-radio+label:before,.admin__control-table .action-delete:before,.admin__current-filters-list .action-remove:before,.admin__data-grid-action-bookmarks .action-delete:before,.admin__data-grid-action-bookmarks .action-edit:before,.admin__data-grid-action-bookmarks .action-submit:before,.admin__data-grid-action-bookmarks .admin__action-dropdown:before,.admin__data-grid-action-columns .admin__action-dropdown:before,.admin__data-grid-action-export .admin__action-dropdown:before,.admin__menu .level-0>a:before,.admin__page-nav-item-messages .admin__page-nav-item-message._changed .admin__page-nav-item-message-icon,.admin__page-nav-item-messages .admin__page-nav-item-message._error .admin__page-nav-item-message-icon,.admin__page-nav-title._collapsible:after,.data-grid-filters-action-wrap .action-default:before,.data-grid-row-changed:after,.data-grid-row-parent>td .data-grid-checkbox-cell-inner:before,.data-grid-search-control-wrap .action-submit:before,.icon-failed:before,.icon-success:before,.notifications-action:before,.notifications-close:before,.page-actions .page-actions-buttons>button.action-back:before,.page-actions .page-actions-buttons>button.back:before,.page-actions>button.action-back:before,.page-actions>button.back:before,.page-title-jumbo-success:before,.search-global-label:before,.selectmenu .action-delete:before,.selectmenu .action-edit:before,.selectmenu .action-save:before,.setup-home-item:before,.sticky-header .data-grid-search-control-wrap .data-grid-search-label:before,.store-switcher .dropdown-menu .dropdown-toolbar a:before,.tooltip .help a:before,.tooltip .help span:before{-webkit-font-smoothing:antialiased;font-family:Icons;line-height:1;font-style:normal;font-weight:400;speak:none}.validation-symbol:after{content:'*';color:#e22626;font-weight:400;margin-left:3px}.abs-modal-overlay,.modals-overlay{background:rgba(0,0,0,.35);bottom:0;left:0;position:fixed;right:0;top:0}.abs-action-delete>span,.abs-visually-hidden,.admin__control-fields .admin__field:nth-child(n+2):not(.admin__field-option)>.admin__field-label,.admin__field-tooltip .admin__field-tooltip-action span,.selectmenu .action-delete>span,.selectmenu .action-edit>span,.selectmenu .action-save>span,.selectmenu-toggle span{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.abs-visually-hidden-reset{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.abs-clearfix:after,.abs-clearfix:before,.action-multicheck-wrap:after,.action-multicheck-wrap:before,.actions-split:after,.actions-split:before,.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-content:after,.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-content:before,.admin__data-grid-filters-footer:after,.admin__data-grid-filters-footer:before,.admin__data-grid-filters:after,.admin__data-grid-filters:before,.admin__data-grid-header-row:after,.admin__data-grid-header-row:before,.page-actions._fixed:after,.page-actions._fixed:before,.page-content:after,.page-content:before,.page-header-actions:after,.page-header-actions:before,.page-main-actions:not(._hidden):after,.page-main-actions:not(._hidden):before{content:'';display:table}.abs-clearfix:after,.action-multicheck-wrap:after,.actions-split:after,.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-content:after,.admin__data-grid-filters-footer:after,.admin__data-grid-filters:after,.admin__data-grid-header-row:after,.page-actions._fixed:after,.page-content:after,.page-header-actions:after,.page-main-actions:not(._hidden):after{clear:both}.abs-list-reset-styles{margin:0;padding:0;list-style:none}.abs-draggable-handle{cursor:-webkit-grab;cursor:move;font-size:0;margin-top:-4px;padding:0 1rem 0 0;vertical-align:middle;display:inline-block;text-decoration:none}.abs-draggable-handle:before{-webkit-font-smoothing:antialiased;font-size:1.8rem;line-height:inherit;color:#9e9e9e;content:'\e617';font-family:Icons;vertical-align:middle;display:inline-block;font-weight:400;overflow:hidden;speak:none;text-align:center}.abs-draggable-handle:hover:before{color:#858585}html{box-sizing:border-box;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}*,:after,:before{box-sizing:inherit}:focus{box-shadow:none;outline:0}._keyfocus :focus{box-shadow:0 0 0 1px #008bdb}body{margin:0}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}mark{background:#ff0;color:#000}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}embed,img,object,video{max-width:100%}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}@font-face{font-family:'Open Sans';src:url(../fonts/opensans/light/opensans-300.eot);src:url(../fonts/opensans/light/opensans-300.eot?#iefix) format('embedded-opentype'),url(../fonts/opensans/light/opensans-300.woff2) format('woff2'),url(../fonts/opensans/light/opensans-300.woff) format('woff'),url(../fonts/opensans/light/opensans-300.ttf) format('truetype'),url('../fonts/opensans/light/opensans-300.svg#Open Sans') format('svg');font-weight:300;font-style:normal}@font-face{font-family:'Open Sans';src:url(../fonts/opensans/regular/opensans-400.eot);src:url(../fonts/opensans/regular/opensans-400.eot?#iefix) format('embedded-opentype'),url(../fonts/opensans/regular/opensans-400.woff2) format('woff2'),url(../fonts/opensans/regular/opensans-400.woff) format('woff'),url(../fonts/opensans/regular/opensans-400.ttf) format('truetype'),url('../fonts/opensans/regular/opensans-400.svg#Open Sans') format('svg');font-weight:400;font-style:normal}@font-face{font-family:'Open Sans';src:url(../fonts/opensans/semibold/opensans-600.eot);src:url(../fonts/opensans/semibold/opensans-600.eot?#iefix) format('embedded-opentype'),url(../fonts/opensans/semibold/opensans-600.woff2) format('woff2'),url(../fonts/opensans/semibold/opensans-600.woff) format('woff'),url(../fonts/opensans/semibold/opensans-600.ttf) format('truetype'),url('../fonts/opensans/semibold/opensans-600.svg#Open Sans') format('svg');font-weight:600;font-style:normal}@font-face{font-family:'Open Sans';src:url(../fonts/opensans/bold/opensans-700.eot);src:url(../fonts/opensans/bold/opensans-700.eot?#iefix) format('embedded-opentype'),url(../fonts/opensans/bold/opensans-700.woff2) format('woff2'),url(../fonts/opensans/bold/opensans-700.woff) format('woff'),url(../fonts/opensans/bold/opensans-700.ttf) format('truetype'),url('../fonts/opensans/bold/opensans-700.svg#Open Sans') format('svg');font-weight:700;font-style:normal}html{font-size:62.5%}body{color:#333;font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;line-height:1.36;font-size:1.4rem}h1{margin:0 0 2rem;color:#41362f;font-weight:400;line-height:1.2;font-size:2.8rem}h2{margin:0 0 2rem;color:#41362f;font-weight:400;line-height:1.2;font-size:2rem}h3{margin:0 0 2rem;color:#41362f;font-weight:600;line-height:1.2;font-size:1.7rem}h4,h5,h6{font-weight:600;margin-top:0}p{margin:0 0 1em}small{font-size:1.2rem}a{color:#008bdb;text-decoration:none}a:hover{color:#0fa7ff;text-decoration:underline}dl,ol,ul{padding-left:0}nav ol,nav ul{list-style:none;margin:0;padding:0}html{height:100%}body{background-color:#fff;min-height:100%;min-width:102.4rem}.page-wrapper{background-color:#fff;display:inline-block;margin-left:-4px;vertical-align:top;width:calc(100% - 8.8rem)}.page-content{padding-bottom:3rem;padding-left:3rem;padding-right:3rem}.notices-wrapper{margin:0 3rem}.notices-wrapper .messages{margin-bottom:0}@media (min-width:1024px){html{width:100vw}body{overflow-x:hidden}}.row{margin-left:0;margin-right:0}.row:after{clear:both;content:'';display:table}.col-l-1,.col-l-10,.col-l-11,.col-l-12,.col-l-2,.col-l-3,.col-l-4,.col-l-5,.col-l-6,.col-l-7,.col-l-8,.col-l-9,.col-m-1,.col-m-10,.col-m-11,.col-m-12,.col-m-2,.col-m-3,.col-m-4,.col-m-5,.col-m-6,.col-m-7,.col-m-8,.col-m-9,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-left:0;padding-right:0}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}.row-gutter{margin-left:-1.5rem;margin-right:-1.5rem}.row-gutter>[class*=col-]{padding-left:1.5rem;padding-right:1.5rem}.abs-clearer:after,.component-manager-content:after,.component-manager-title:after,.form-row:after,.header:after,.nav:after,body:after{clear:both;content:'';display:table}.ng-cloak{display:none!important}.hide.hide{display:none}.show.show{display:block}.text-center{text-align:center}.text-right{text-align:right}@font-face{font-family:Icons;src:url(../fonts/icons/icons.eot);src:url(../fonts/icons/icons.eot?#iefix) format('embedded-opentype'),url(../fonts/icons/icons.woff2) format('woff2'),url(../fonts/icons/icons.woff) format('woff'),url(../fonts/icons/icons.ttf) format('truetype'),url(../fonts/icons/icons.svg#Icons) format('svg');font-weight:400;font-style:normal}[class*=icon-]{display:inline-block;line-height:1}.icon-failed:before,.icon-success:before,[class*=icon-]:after{font-family:Icons}.icon-success{color:#79a22e}.icon-success:before{content:'\e62d'}.icon-failed{color:#e22626}.icon-failed:before{content:'\e632'}.icon-success-thick:after{content:'\e62d'}.icon-collapse:after{content:'\e615'}.icon-failed-thick:after{content:'\e632'}.icon-expand:after{content:'\e616'}.icon-warning:after{content:'\e623'}.icon-failed-round,.icon-success-round{border-radius:100%;color:#fff;font-size:2.5rem;height:1em;position:relative;text-align:center;width:1em}.icon-failed-round:after,.icon-success-round:after{bottom:0;font-size:.5em;left:0;position:absolute;right:0;top:.45em}.icon-success-round{background-color:#79a22e}.icon-success-round:after{content:'\e62d'}.icon-failed-round{background-color:#e22626}.icon-failed-round:after{content:'\e632'}dl,ol,ul{margin-top:0}.list{padding-left:0}.list>li{display:block;margin-bottom:.75em;position:relative}.list>li>.icon-failed,.list>li>.icon-success{font-size:1.6em;left:-.1em;position:absolute;top:0}.list>li>.icon-success{color:#79a22e}.list>li>.icon-failed{color:#e22626}.list-item-failed,.list-item-icon,.list-item-success,.list-item-warning{padding-left:3.5rem}.list-item-failed:before,.list-item-success:before,.list-item-warning:before{left:-.1em;position:absolute}.list-item-success:before{color:#79a22e}.list-item-failed:before{color:#e22626}.list-item-warning:before{color:#ef672f}.list-definition{margin:0 0 3rem;padding:0}.list-definition>dt{clear:left;float:left}.list-definition>dd{margin-bottom:1em;margin-left:20rem}.btn-wrap{margin:0 auto}.btn-wrap .btn{width:100%}.btn{background:#e3e3e3;border:none;color:#514943;display:inline-block;font-size:1.6rem;font-weight:600;padding:.45em .9em;text-align:center}.btn:hover{background-color:#dbdbdb;color:#514943;text-decoration:none}.btn:active{background-color:#d6d6d6}.btn.disabled,.btn[disabled]{cursor:default;opacity:.5;pointer-events:none}.ie9 .btn.disabled,.ie9 .btn[disabled]{background-color:#f0f0f0;opacity:1;text-shadow:none}.btn-large{padding:.75em 1.25em}.btn-medium{font-size:1.4rem;padding:.5em 1.5em .6em}.btn-link{background-color:transparent;border:none;color:#008bdb;font-family:1.6rem;font-size:1.5rem}.btn-link:active,.btn-link:focus,.btn-link:hover{background-color:transparent;color:#0fa7ff}.btn-prime{background-color:#eb5202;color:#fff;text-shadow:1px 1px 0 rgba(0,0,0,.25)}.btn-prime:focus,.btn-prime:hover{background-color:#f65405;background-repeat:repeat-x;background-image:linear-gradient(to right,#e04f00 0,#f65405 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e04f00', endColorstr='#f65405', GradientType=1);color:#fff}.btn-prime:active{background-color:#e04f00;background-repeat:repeat-x;background-image:linear-gradient(to right,#f65405 0,#e04f00 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f65405', endColorstr='#e04f00', GradientType=1);color:#fff}.ie9 .btn-prime.disabled,.ie9 .btn-prime[disabled]{background-color:#fd6e23}.ie9 .btn-prime.disabled:active,.ie9 .btn-prime.disabled:hover,.ie9 .btn-prime[disabled]:active,.ie9 .btn-prime[disabled]:hover{background-color:#fd6e23;-webkit-filter:none;filter:none}.btn-secondary{background-color:#514943;color:#fff}.btn-secondary:hover{background-color:#5f564f;color:#fff}.btn-secondary:active,.btn-secondary:focus{background-color:#574e48;color:#fff}.ie9 .btn-secondary.disabled,.ie9 .btn-secondary[disabled]{background-color:#514943}.ie9 .btn-secondary.disabled:active,.ie9 .btn-secondary[disabled]:active{background-color:#514943;-webkit-filter:none;filter:none}[class*=btn-wrap-triangle]{overflow:hidden;position:relative}[class*=btn-wrap-triangle] .btn:after{border-style:solid;content:'';height:0;position:absolute;top:0;width:0}.btn-wrap-triangle-right{display:inline-block;padding-right:1.74rem;position:relative}.btn-wrap-triangle-right .btn{text-indent:.92rem}.btn-wrap-triangle-right .btn:after{border-color:transparent transparent transparent #e3e3e3;border-width:1.84rem 0 1.84rem 1.84rem;left:100%;margin-left:-1.74rem}.btn-wrap-triangle-right .btn:focus:after,.btn-wrap-triangle-right .btn:hover:after{border-left-color:#dbdbdb}.btn-wrap-triangle-right .btn:active:after{border-left-color:#d6d6d6}.btn-wrap-triangle-right .btn:not(.disabled):active,.btn-wrap-triangle-right .btn:not([disabled]):active{left:1px}.ie9 .btn-wrap-triangle-right .btn.disabled:after,.ie9 .btn-wrap-triangle-right .btn[disabled]:after{border-color:transparent transparent transparent #f0f0f0}.ie9 .btn-wrap-triangle-right .btn.disabled:active:after,.ie9 .btn-wrap-triangle-right .btn.disabled:focus:after,.ie9 .btn-wrap-triangle-right .btn.disabled:hover:after,.ie9 .btn-wrap-triangle-right .btn[disabled]:active:after,.ie9 .btn-wrap-triangle-right .btn[disabled]:focus:after,.ie9 .btn-wrap-triangle-right .btn[disabled]:hover:after{border-left-color:#f0f0f0}.btn-wrap-triangle-right .btn-prime:after{border-color:transparent transparent transparent #eb5202}.btn-wrap-triangle-right .btn-prime:focus:after,.btn-wrap-triangle-right .btn-prime:hover:after{border-left-color:#f65405}.btn-wrap-triangle-right .btn-prime:active:after{border-left-color:#e04f00}.btn-wrap-triangle-right .btn-prime:not(.disabled):active,.btn-wrap-triangle-right .btn-prime:not([disabled]):active{left:1px}.ie9 .btn-wrap-triangle-right .btn-prime.disabled:after,.ie9 .btn-wrap-triangle-right .btn-prime[disabled]:after{border-color:transparent transparent transparent #fd6e23}.ie9 .btn-wrap-triangle-right .btn-prime.disabled:active:after,.ie9 .btn-wrap-triangle-right .btn-prime.disabled:hover:after,.ie9 .btn-wrap-triangle-right .btn-prime[disabled]:active:after,.ie9 .btn-wrap-triangle-right .btn-prime[disabled]:hover:after{border-left-color:#fd6e23}.btn-wrap-triangle-left{display:inline-block;padding-left:1.74rem}.btn-wrap-triangle-left .btn{text-indent:-.92rem}.btn-wrap-triangle-left .btn:after{border-color:transparent #e3e3e3 transparent transparent;border-width:1.84rem 1.84rem 1.84rem 0;margin-right:-1.74rem;right:100%}.btn-wrap-triangle-left .btn:focus:after,.btn-wrap-triangle-left .btn:hover:after{border-right-color:#dbdbdb}.btn-wrap-triangle-left .btn:active:after{border-right-color:#d6d6d6}.btn-wrap-triangle-left .btn:not(.disabled):active,.btn-wrap-triangle-left .btn:not([disabled]):active{right:1px}.ie9 .btn-wrap-triangle-left .btn.disabled:after,.ie9 .btn-wrap-triangle-left .btn[disabled]:after{border-color:transparent #f0f0f0 transparent transparent}.ie9 .btn-wrap-triangle-left .btn.disabled:active:after,.ie9 .btn-wrap-triangle-left .btn.disabled:hover:after,.ie9 .btn-wrap-triangle-left .btn[disabled]:active:after,.ie9 .btn-wrap-triangle-left .btn[disabled]:hover:after{border-right-color:#f0f0f0}.btn-wrap-triangle-left .btn-prime:after{border-color:transparent #eb5202 transparent transparent}.btn-wrap-triangle-left .btn-prime:focus:after,.btn-wrap-triangle-left .btn-prime:hover:after{border-right-color:#e04f00}.btn-wrap-triangle-left .btn-prime:active:after{border-right-color:#f65405}.btn-wrap-triangle-left .btn-prime:not(.disabled):active,.btn-wrap-triangle-left .btn-prime:not([disabled]):active{right:1px}.ie9 .btn-wrap-triangle-left .btn-prime.disabled:after,.ie9 .btn-wrap-triangle-left .btn-prime[disabled]:after{border-color:transparent #fd6e23 transparent transparent}.ie9 .btn-wrap-triangle-left .btn-prime.disabled:active:after,.ie9 .btn-wrap-triangle-left .btn-prime.disabled:hover:after,.ie9 .btn-wrap-triangle-left .btn-prime[disabled]:active:after,.ie9 .btn-wrap-triangle-left .btn-prime[disabled]:hover:after{border-right-color:#fd6e23}.btn-expand{background-color:transparent;border:none;color:#303030;font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.4rem;font-weight:700;padding:0;position:relative}.btn-expand.expanded:after{border-color:transparent transparent #303030;border-width:0 .285em .36em}.btn-expand.expanded:hover:after{border-color:transparent transparent #3d3d3d}.btn-expand:hover{background-color:transparent;border:none;color:#3d3d3d}.btn-expand:hover:after{border-color:#3d3d3d transparent transparent}.btn-expand:after{border-color:#303030 transparent transparent;border-style:solid;border-width:.36em .285em 0;content:'';height:0;left:100%;margin-left:.5em;margin-top:-.18em;position:absolute;top:50%;width:0}[class*=col-] .form-el-input,[class*=col-] .form-el-select{width:100%}.form-fieldset{border:none;margin:0 0 1em;padding:0}.form-row{margin-bottom:2.2rem}.form-row .form-row{margin-bottom:.4rem}.form-row .form-label{display:block;font-weight:600;padding:.6rem 2.1em 0 0;text-align:right}.form-row .form-label.required{position:relative}.form-row .form-label.required:after{color:#eb5202;content:'*';font-size:1.15em;position:absolute;right:.7em;top:.5em}.form-row .form-el-checkbox+.form-label:before,.form-row .form-el-radio+.form-label:before{top:.7rem}.form-row .form-el-checkbox+.form-label:after,.form-row .form-el-radio+.form-label:after{top:1.1rem}.form-row.form-row-text{padding-top:.6rem}.form-row.form-row-text .action-sign-out{font-size:1.2rem;margin-left:1rem}.form-note{font-size:1.2rem;font-weight:600;margin-top:1rem}.form-el-dummy{display:none}.fieldset{border:0;margin:0;min-width:0;padding:0}input:not([disabled]):focus,textarea:not([disabled]):focus{box-shadow:none}.form-el-input{border:1px solid #adadad;color:#303030;padding:.35em .55em .5em}.form-el-input:hover{border-color:#949494}.form-el-input:focus{border-color:#008bdb}.form-el-input:required{box-shadow:none}.form-label{margin-bottom:.5em}[class*=form-label][for]{cursor:pointer}.form-el-insider-wrap{display:table;width:100%}.form-el-insider-input{display:table-cell;width:100%}.form-el-insider{border-radius:2px;display:table-cell;vertical-align:top;padding:.43em .55em .5em 0}.form-legend,.form-legend-expand,.form-legend-light{display:block;margin:0}.form-legend,.form-legend-expand{margin-bottom:2.5em;padding-top:1.5em;font-weight:600;font-size:1.25em}.form-legend{width:100%;border-top:1px solid #ccc}.form-legend-light{margin-bottom:1.5em;font-size:1em}.form-legend-expand{cursor:pointer;transition:opacity .2s linear}.form-legend-expand:hover{opacity:.85}.form-legend-expand.expanded:after{content:'\e615'}.form-legend-expand:after{margin-left:.5em;font-weight:400;font-size:1.15em;font-family:Icons;content:'\e616';vertical-align:sub}.form-el-checkbox,.form-el-radio{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.form-el-checkbox.disabled+.form-label,.form-el-checkbox.disabled+.form-label:before,.form-el-checkbox[disabled]+.form-label,.form-el-checkbox[disabled]+.form-label:before,.form-el-radio.disabled+.form-label,.form-el-radio.disabled+.form-label:before,.form-el-radio[disabled]+.form-label,.form-el-radio[disabled]+.form-label:before{cursor:default;opacity:.5;pointer-events:none}.form-el-checkbox:not(.disabled)+.form-label:hover:before,.form-el-checkbox:not([disabled])+.form-label:hover:before,.form-el-radio:not(.disabled)+.form-label:hover:before,.form-el-radio:not([disabled])+.form-label:hover:before{border-color:#514943}.form-el-checkbox+.form-label,.form-el-radio+.form-label{font-weight:400;padding-left:2em;padding-right:0;position:relative;text-align:left;transition:border-color .1s linear}.form-el-checkbox+.form-label:before,.form-el-radio+.form-label:before{border:1px solid;content:'';left:0;position:absolute;top:.1rem;transition:border-color .1s linear}.form-el-checkbox+.form-label:before{background-color:#fff;border-color:#adadad;border-radius:2px;height:1.6rem;line-height:1.2;width:1.6rem;font-size:1.2rem}.form-el-checkbox:checked+.form-label::before{content:'\e62d';font-family:Icons}.form-el-radio+.form-label:before{background-color:#fff;border:1px solid #adadad;border-radius:100%;height:1.8rem;width:1.8rem}.form-el-radio+.form-label:after{background:0 0;border:.5rem solid transparent;border-radius:100%;content:'';height:0;left:.4rem;position:absolute;top:.5rem;transition:background .3s linear;width:0}.form-el-radio:checked+.form-label{cursor:default}.form-el-radio:checked+.form-label:after{border-color:#514943}.form-select-label{border:1px solid #adadad;color:#303030;cursor:pointer;display:block;overflow:hidden;position:relative;z-index:0}.form-select-label:hover,.form-select-label:hover:after{border-color:#949494}.form-select-label:active,.form-select-label:active:after,.form-select-label:focus,.form-select-label:focus:after{border-color:#008bdb}.form-select-label:after{background:#e3e3e3;border-left:1px solid #adadad;bottom:0;content:'';position:absolute;right:0;top:0;width:2.36em;z-index:-2}.ie9 .form-select-label:after{display:none}.form-select-label:before{border-color:#303030 transparent transparent;border-style:solid;border-width:5px 4px 0;content:'';height:0;margin-right:-4px;margin-top:-2.5px;position:absolute;right:1.18em;top:50%;width:0;z-index:-1}.ie9 .form-select-label:before{display:none}.form-select-label .form-el-select{background:0 0;border:none;border-radius:0;content:'';display:block;margin:0;padding:.35em calc(2.36em + 10%) .5em .55em;width:110%}.ie9 .form-select-label .form-el-select{padding-right:.55em;width:100%}.form-el-select{background:#fff;border:1px solid #adadad;border-radius:2px;color:#303030;display:block;padding:.35em .55em}.multiselect-custom{position:relative;height:45.2rem;border:1px solid #adadad;overflow:auto;margin:0 0 1.5rem}.multiselect-custom ul{margin:0;padding:0;list-style:none;min-width:29rem}.multiselect-custom .item{padding:1rem 1.4rem}.multiselect-custom .selected{background-color:#e0f6fe}.multiselect-custom .form-label{margin-bottom:0}[class*=form-el-].invalid{border-color:#e22626}[class*=form-el-].invalid+.error-container{display:block}.error-container{background-color:#fffbbb;border:1px solid #ee7d7d;color:#514943;display:none;font-size:1.19rem;margin-top:.2rem;padding:.8rem 1rem .9rem}.check-result-message{margin-left:.5em;min-height:3.68rem;-webkit-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-flex;display:-ms-flexbox;display:flex}.check-result-text{margin-left:.5em}body:not([class]){min-width:0}.container{display:block;margin:0 auto 4rem;max-width:100rem;padding:0}.abs-action-delete,.action-close:before,.action-next:before,.action-previous:before,.admin-user .admin__action-dropdown:before,.admin__action-multiselect-search-label:before,.admin__control-checkbox+label:before,.admin__control-radio+label:before,.admin__control-table .action-delete:before,.admin__current-filters-list .action-remove:before,.admin__data-grid-action-bookmarks .action-delete:before,.admin__data-grid-action-bookmarks .action-edit:before,.admin__data-grid-action-bookmarks .action-submit:before,.admin__data-grid-action-bookmarks .admin__action-dropdown:before,.admin__data-grid-action-columns .admin__action-dropdown:before,.admin__data-grid-action-export .admin__action-dropdown:before,.admin__menu .level-0>a:before,.admin__page-nav-item-messages .admin__page-nav-item-message._changed .admin__page-nav-item-message-icon,.admin__page-nav-item-messages .admin__page-nav-item-message._error .admin__page-nav-item-message-icon,.admin__page-nav-title._collapsible:after,.data-grid-filters-action-wrap .action-default:before,.data-grid-row-changed:after,.data-grid-row-parent>td .data-grid-checkbox-cell-inner:before,.data-grid-search-control-wrap .action-submit:before,.icon-failed:before,.icon-success:before,.notifications-action:before,.notifications-close:before,.page-actions .page-actions-buttons>button.action-back:before,.page-actions .page-actions-buttons>button.back:before,.page-actions>button.action-back:before,.page-actions>button.back:before,.page-title-jumbo-success:before,.search-global-label:before,.selectmenu .action-delete:before,.selectmenu .action-edit:before,.selectmenu .action-save:before,.setup-home-item:before,.sticky-header .data-grid-search-control-wrap .data-grid-search-label:before,.store-switcher .dropdown-menu .dropdown-toolbar a:before,.tooltip .help a:before,.tooltip .help span:before{-webkit-font-smoothing:antialiased;font-family:Icons;line-height:1;font-style:normal;font-weight:400;speak:none}.text-stretch{margin-bottom:1.5em}.page-title-jumbo{font-size:4rem;font-weight:300;letter-spacing:-.05em;margin-bottom:2.9rem}.page-title-jumbo-success:before{color:#79a22e;content:'\e62d';font-size:3.9rem;margin-left:-.3rem;margin-right:2.4rem}.list{margin-bottom:3rem}.list-dot .list-item{display:list-item;list-style-position:inside;margin-bottom:1.2rem}.list-title{color:#333;font-size:1.4rem;font-weight:700;letter-spacing:.025em;margin-bottom:1.2rem}.list-item-failed:before,.list-item-success:before,.list-item-warning:before{font-family:Icons;font-size:1.6rem;top:0}.list-item-success:before{content:'\e62d';font-size:1.6rem}.list-item-failed:before{content:'\e632';font-size:1.4rem;left:.1rem;top:.2rem}.list-item-warning:before{content:'\e623';font-size:1.3rem;left:.2rem}.form-wrap{padding-top:2.1rem;margin-bottom:3.6rem}.form-el-label-horizontal{display:inline-block;font-size:1.3rem;font-weight:600;letter-spacing:.025em;margin-left:.4rem;margin-bottom:.4rem}.app-updater{min-width:768px}body._has-modal{height:100%;overflow:hidden;width:100%}.modals-overlay{z-index:899}.modal-popup,.modal-slide{bottom:0;min-width:0;pointer-events:none;position:fixed;right:0;top:0;visibility:hidden}.modal-popup._show,.modal-slide._show{visibility:visible}.modal-popup._show .modal-inner-wrap,.modal-slide._show .modal-inner-wrap{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.modal-popup .modal-inner-wrap,.modal-slide .modal-inner-wrap{background-color:#fff;box-shadow:0 0 12px 2px rgba(0,0,0,.35);opacity:1;pointer-events:auto}.modal-slide{left:14.8rem;z-index:900}.modal-slide._show .modal-inner-wrap{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}.modal-slide .modal-inner-wrap{height:100%;overflow-y:auto;position:static;-webkit-transform:translateX(100%);-ms-transform:translateX(100%);transform:translateX(100%);transition-duration:.3s;transition-property:-webkit-transform,visibility;transition-property:transform,visibility;transition-timing-function:ease-in-out;width:auto}.modal-slide._inner-scroll .modal-inner-wrap{overflow-y:visible;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.modal-slide._inner-scroll .modal-footer,.modal-slide._inner-scroll .modal-header{-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.modal-slide._inner-scroll .modal-content{overflow-y:auto}.modal-slide._inner-scroll .modal-footer{margin-top:auto}.modal-slide .modal-content,.modal-slide .modal-footer,.modal-slide .modal-header{padding:0 2.6rem 2.6rem}.modal-slide .modal-header{padding-bottom:2.1rem;padding-top:2.1rem}.modal-popup{left:0;overflow-y:auto;z-index:900}.modal-popup._show .modal-inner-wrap{-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}.modal-popup .modal-inner-wrap{box-sizing:border-box;height:auto;left:0;margin:5rem auto;position:absolute;right:0;-webkit-transform:translateY(-200%);-ms-transform:translateY(-200%);transform:translateY(-200%);transition-duration:.2s;transition-property:-webkit-transform,visibility;transition-property:transform,visibility;transition-timing-function:ease;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;width:75%}.modal-popup._inner-scroll{overflow-y:visible}.ie10 .modal-popup._inner-scroll,.ie9 .modal-popup._inner-scroll{overflow-y:auto}.modal-popup._inner-scroll .modal-inner-wrap{max-height:90%}.ie10 .modal-popup._inner-scroll .modal-inner-wrap,.ie9 .modal-popup._inner-scroll .modal-inner-wrap{max-height:none}.modal-popup._inner-scroll .modal-content{overflow-y:auto}.modal-popup .modal-content,.modal-popup .modal-footer,.modal-popup .modal-header{padding-left:3rem;padding-right:3rem}.modal-popup .modal-footer,.modal-popup .modal-header{-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.modal-popup .modal-header{padding-bottom:3rem;padding-top:3rem}.modal-popup .modal-footer{margin-top:auto;padding-bottom:3rem;padding-top:3rem}.modal-popup .modal-footer-actions{text-align:right}.modal-popup.confirm .modal-inner-wrap{left:50%;margin-left:-25rem;width:50rem}.modal-popup.confirm .modal-footer{text-align:right}.modal-popup._image-box .modal-inner-wrap{margin:5rem auto;max-width:78rem;position:static}.modal-popup._image-box .thumbnail-preview{padding-bottom:3rem;text-align:center}.modal-popup._image-box .thumbnail-preview .thumbnail-preview-image-block{border:1px solid #ccc;margin:0 auto 2rem;max-width:58rem;padding:2rem}.modal-popup._image-box .thumbnail-preview .thumbnail-preview-image{max-height:54rem}@media (max-width:768px){.modal-popup.modal-slide{left:14.8rem;z-index:900}.modal-popup.modal-slide._show .modal-inner-wrap{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}.modal-popup.modal-slide .modal-inner-wrap{height:100%;overflow-y:auto;position:static;-webkit-transform:translateX(100%);-ms-transform:translateX(100%);transform:translateX(100%);transition-duration:.3s;transition-property:-webkit-transform,visibility;transition-property:transform,visibility;transition-timing-function:ease-in-out;width:auto;margin:0;max-height:none}}.admin__action-dropdown-wrap{display:inline-block;position:relative}.admin__action-dropdown-wrap .admin__action-dropdown-text:after{left:-6px;right:0}.admin__action-dropdown-wrap .admin__action-dropdown-menu{left:auto;right:0}.admin__action-dropdown-wrap._active .admin__action-dropdown,.admin__action-dropdown-wrap.active .admin__action-dropdown{border-color:#007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5)}.admin__action-dropdown-wrap._active .admin__action-dropdown-text:after,.admin__action-dropdown-wrap.active .admin__action-dropdown-text:after{background-color:#fff;content:'';height:6px;position:absolute;top:100%}.admin__action-dropdown-wrap._active .admin__action-dropdown-menu,.admin__action-dropdown-wrap.active .admin__action-dropdown-menu{display:block}.admin__action-dropdown-wrap._disabled .admin__action-dropdown{cursor:default}.admin__action-dropdown-wrap._disabled:hover .admin__action-dropdown{color:#333}.admin__action-dropdown{background-color:#fff;border:1px solid transparent;border-bottom:none;border-radius:0;box-shadow:none;color:#333;display:inline-block;font-size:1.3rem;font-weight:400;letter-spacing:-.025em;padding:.7rem 3.3rem .8rem 1.5rem;position:relative;vertical-align:baseline;z-index:2}.admin__action-dropdown._active:after,.admin__action-dropdown.active:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.admin__action-dropdown:after{border-color:#000 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;top:50%;transition:all .2s linear;width:0}._active .admin__action-dropdown:after,.active .admin__action-dropdown:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.admin__action-dropdown:hover:after{border-color:#000 transparent transparent}.admin__action-dropdown:focus,.admin__action-dropdown:hover{background-color:#fff;color:#000;text-decoration:none}.admin__action-dropdown:after{right:1.5rem}.admin__action-dropdown:before{margin-right:1rem}.admin__action-dropdown-menu{background-color:#fff;border:1px solid #007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5);display:none;line-height:1.36;margin-top:-1px;min-width:120%;padding:.5rem 1rem;position:absolute;top:100%;transition:all .15s ease;z-index:1}.admin__action-dropdown-menu>li{display:block}.admin__action-dropdown-menu>li>a{color:#333;display:block;text-decoration:none;padding:.6rem .5rem}.selectmenu{display:inline-block;position:relative;text-align:left;z-index:1}.selectmenu._active{z-index:500;border-color:#007bdb}.selectmenu .action-delete,.selectmenu .action-edit,.selectmenu .action-save{background-color:transparent;border-color:transparent;box-shadow:none;padding:0 1rem}.selectmenu .action-delete:hover,.selectmenu .action-edit:hover,.selectmenu .action-save:hover{background-color:transparent;border-color:transparent;box-shadow:none}.selectmenu .action-delete:before,.selectmenu .action-edit:before,.selectmenu .action-save:before{content:'\e630'}.selectmenu .action-delete,.selectmenu .action-edit{border:0 solid #fff;border-left-width:1px;bottom:0;position:absolute;right:0;top:0;z-index:1}.selectmenu .action-delete:hover,.selectmenu .action-edit:hover{border:0 solid #fff;border-left-width:1px}.selectmenu .action-save:before{content:'\e625'}.selectmenu .action-edit:before{content:'\e631'}.selectmenu-value{display:inline-block}.selectmenu-value input[type=text]{-moz-appearance:none;-webkit-appearance:none;appearance:none;border:0;display:inline;margin:0;width:6rem}body._keyfocus .selectmenu-value input[type=text]:focus{box-shadow:none}.selectmenu-toggle{padding-right:3rem;background:0 0;border-width:0;bottom:0;float:right;position:absolute;right:0;top:0;width:0}.selectmenu-toggle._active:after,.selectmenu-toggle.active:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.selectmenu-toggle:after{border-color:#000 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;right:1.1rem;top:50%;transition:all .2s linear;width:0}._active .selectmenu-toggle:after,.active .selectmenu-toggle:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.selectmenu-toggle:hover:after{border-color:#000 transparent transparent}.selectmenu-toggle:active,.selectmenu-toggle:focus,.selectmenu-toggle:hover{background:0 0}.selectmenu._active .selectmenu-toggle:before{border-color:#007bdb}body._keyfocus .selectmenu-toggle:focus{box-shadow:none}.selectmenu-toggle:before{background:#e3e3e3;border-left:1px solid #adadad;bottom:0;content:'';display:block;position:absolute;right:0;top:0;width:3.2rem}.selectmenu-items{background:#fff;border:1px solid #007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5);display:none;float:left;left:-1px;margin-top:3px;max-width:20rem;min-width:calc(100% + 2px);position:absolute;top:100%}.selectmenu-items._active{display:block}.selectmenu-items ul{float:left;list-style-type:none;margin:0;min-width:100%;padding:0}.selectmenu-items li{display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;transition:background .2s linear}.selectmenu-items li:hover{background:#e3e3e3}.selectmenu-items li:last-child .selectmenu-item-action,.selectmenu-items li:last-child .selectmenu-item-action:visited{color:#008bdb;text-decoration:none}.selectmenu-items li:last-child .selectmenu-item-action:hover{color:#0fa7ff;text-decoration:underline}.selectmenu-items li:last-child .selectmenu-item-action:active{color:#ff5501;text-decoration:underline}.selectmenu-item{position:relative;width:100%;z-index:1}li._edit>.selectmenu-item{display:none}.selectmenu-item-edit{display:none;padding:.3rem 4rem .3rem .4rem;position:relative;white-space:nowrap;z-index:1}li:last-child .selectmenu-item-edit{padding-right:.4rem}.selectmenu-item-edit .admin__control-text{width:5.4rem;margin:0}li._edit .selectmenu-item-edit{display:block}.selectmenu-item-action{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:0 0;border:0;color:#333;display:block;font-size:1.4rem;font-weight:400;min-width:100%;padding:1rem 6rem 1rem 1.5rem;text-align:left;transition:background .2s linear;width:5rem}.selectmenu-item-action:focus,.selectmenu-item-action:hover{background:#e3e3e3}.abs-actions-split-xl .action-default,.page-actions .actions-split .action-default{margin-right:4rem}.abs-actions-split-xl .action-toggle,.page-actions .actions-split .action-toggle{padding-right:4rem}.abs-actions-split-xl .action-toggle:after,.page-actions .actions-split .action-toggle:after{border-width:.9rem .6rem 0;margin-top:-.3rem;right:1.4rem}.actions-split{position:relative;z-index:200}.actions-split._active,.actions-split.active,.actions-split:hover{box-shadow:0 0 0 1px #007bdb}.actions-split._active .action-toggle.action-primary,.actions-split._active .action-toggle.primary,.actions-split.active .action-toggle.action-primary,.actions-split.active .action-toggle.primary{background-color:#ba4000;border-color:#ba4000}.actions-split._active .dropdown-menu,.actions-split.active .dropdown-menu{opacity:1;visibility:visible;display:block}.actions-split .action-default,.actions-split .action-toggle{float:left;margin:0}.actions-split .action-default._active,.actions-split .action-default.active,.actions-split .action-default:hover,.actions-split .action-toggle._active,.actions-split .action-toggle.active,.actions-split .action-toggle:hover{box-shadow:none}.actions-split .action-default{margin-right:3.2rem;min-width:9.3rem}.actions-split .action-toggle{padding-right:3.2rem;border-left-color:rgba(0,0,0,.2);bottom:0;padding-left:0;position:absolute;right:0;top:0}.actions-split .action-toggle._active:after,.actions-split .action-toggle.active:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.actions-split .action-toggle:after{border-color:#000 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;right:1.2rem;top:50%;transition:all .2s linear;width:0}._active .actions-split .action-toggle:after,.active .actions-split .action-toggle:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.actions-split .action-toggle:hover:after{border-color:#000 transparent transparent}.actions-split .action-toggle.action-primary:after,.actions-split .action-toggle.action-secondary:after,.actions-split .action-toggle.primary:after,.actions-split .action-toggle.secondary:after{border-color:#fff transparent transparent}.actions-split .action-toggle>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.action-select-wrap{display:inline-block;position:relative}.action-select-wrap .action-select{padding-right:3.2rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;background-color:#fff;font-weight:400;text-align:left}.action-select-wrap .action-select._active:after,.action-select-wrap .action-select.active:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.action-select-wrap .action-select:after{border-color:#000 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;right:1.2rem;top:50%;transition:all .2s linear;width:0}._active .action-select-wrap .action-select:after,.active .action-select-wrap .action-select:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.action-select-wrap .action-select:hover:after{border-color:#000 transparent transparent}.action-select-wrap .action-select:hover,.action-select-wrap .action-select:hover:before{border-color:#878787}.action-select-wrap .action-select:before{background-color:#e3e3e3;border:1px solid #adadad;bottom:0;content:'';position:absolute;right:0;top:0;width:3.2rem}.action-select-wrap .action-select._active{border-color:#007bdb}.action-select-wrap .action-select._active:before{border-color:#007bdb #007bdb #007bdb #adadad}.action-select-wrap .action-select[disabled]{color:#333}.action-select-wrap .action-select[disabled]:after{border-color:#333 transparent transparent}.action-select-wrap._active{z-index:500}.action-select-wrap._active .action-select,.action-select-wrap._active .action-select:before{border-color:#007bdb}.action-select-wrap._active .action-select:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.action-select-wrap .abs-action-menu .action-submenu,.action-select-wrap .abs-action-menu .action-submenu .action-submenu,.action-select-wrap .action-menu,.action-select-wrap .action-menu .action-submenu,.action-select-wrap .actions-split .action-menu .action-submenu,.action-select-wrap .actions-split .action-menu .action-submenu .action-submenu,.action-select-wrap .actions-split .dropdown-menu .action-submenu,.action-select-wrap .actions-split .dropdown-menu .action-submenu .action-submenu{max-height:45rem;overflow-y:auto}.action-select-wrap .action-menu-items{left:0;position:absolute;right:0;top:100%}.action-select-wrap .action-menu-items>.abs-action-menu .action-submenu,.action-select-wrap .action-menu-items>.abs-action-menu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.action-menu,.action-select-wrap .action-menu-items>.action-menu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .action-menu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .action-menu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .dropdown-menu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .dropdown-menu .action-submenu .action-submenu{min-width:100%;position:static}.action-select-wrap .action-menu-items>.abs-action-menu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.abs-action-menu .action-submenu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.action-menu .action-submenu,.action-select-wrap .action-menu-items>.action-menu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .action-menu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .action-menu .action-submenu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .dropdown-menu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .dropdown-menu .action-submenu .action-submenu .action-submenu{position:absolute}.action-multicheck-wrap{display:inline-block;height:1.6rem;padding-top:1px;position:relative;width:3.1rem;z-index:200}.action-multicheck-wrap:hover .action-multicheck-toggle,.action-multicheck-wrap:hover .admin__control-checkbox+label:before{border-color:#878787}.action-multicheck-wrap._active .action-multicheck-toggle,.action-multicheck-wrap._active .admin__control-checkbox+label:before{border-color:#007bdb}.action-multicheck-wrap._active .abs-action-menu .action-submenu,.action-multicheck-wrap._active .abs-action-menu .action-submenu .action-submenu,.action-multicheck-wrap._active .action-menu,.action-multicheck-wrap._active .action-menu .action-submenu,.action-multicheck-wrap._active .actions-split .action-menu .action-submenu,.action-multicheck-wrap._active .actions-split .action-menu .action-submenu .action-submenu,.action-multicheck-wrap._active .actions-split .dropdown-menu .action-submenu,.action-multicheck-wrap._active .actions-split .dropdown-menu .action-submenu .action-submenu{opacity:1;visibility:visible;display:block}.action-multicheck-wrap._disabled .admin__control-checkbox+label:before{background-color:#fff}.action-multicheck-wrap._disabled .action-multicheck-toggle,.action-multicheck-wrap._disabled .admin__control-checkbox+label:before{border-color:#adadad;opacity:1}.action-multicheck-wrap .action-multicheck-toggle,.action-multicheck-wrap .admin__control-checkbox,.action-multicheck-wrap .admin__control-checkbox+label{float:left}.action-multicheck-wrap .action-multicheck-toggle{border-radius:0 1px 1px 0;height:1.6rem;margin-left:-1px;padding:0;position:relative;transition:border-color .1s linear;width:1.6rem}.action-multicheck-wrap .action-multicheck-toggle._active:after,.action-multicheck-wrap .action-multicheck-toggle.active:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.action-multicheck-wrap .action-multicheck-toggle:after{border-color:#000 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;top:50%;transition:all .2s linear;width:0}._active .action-multicheck-wrap .action-multicheck-toggle:after,.active .action-multicheck-wrap .action-multicheck-toggle:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.action-multicheck-wrap .action-multicheck-toggle:hover:after{border-color:#000 transparent transparent}.action-multicheck-wrap .action-multicheck-toggle:focus{border-color:#007bdb}.action-multicheck-wrap .action-multicheck-toggle:after{right:.3rem}.action-multicheck-wrap .action-multicheck-toggle>span{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.action-multicheck-wrap .abs-action-menu .action-submenu,.action-multicheck-wrap .abs-action-menu .action-submenu .action-submenu,.action-multicheck-wrap .action-menu,.action-multicheck-wrap .action-menu .action-submenu,.action-multicheck-wrap .actions-split .action-menu .action-submenu,.action-multicheck-wrap .actions-split .action-menu .action-submenu .action-submenu,.action-multicheck-wrap .actions-split .dropdown-menu .action-submenu,.action-multicheck-wrap .actions-split .dropdown-menu .action-submenu .action-submenu{left:-1.2rem;margin-top:1px;right:auto;text-align:left}.action-multicheck-wrap .action-menu-item{white-space:nowrap}.admin__action-multiselect-wrap{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.admin__action-multiselect-wrap.action-select-wrap:focus{box-shadow:none}.admin__action-multiselect-wrap.action-select-wrap .abs-action-menu .action-submenu,.admin__action-multiselect-wrap.action-select-wrap .abs-action-menu .action-submenu .action-submenu,.admin__action-multiselect-wrap.action-select-wrap .action-menu,.admin__action-multiselect-wrap.action-select-wrap .action-menu .action-submenu,.admin__action-multiselect-wrap.action-select-wrap .actions-split .action-menu .action-submenu,.admin__action-multiselect-wrap.action-select-wrap .actions-split .action-menu .action-submenu .action-submenu,.admin__action-multiselect-wrap.action-select-wrap .actions-split .dropdown-menu .action-submenu,.admin__action-multiselect-wrap.action-select-wrap .actions-split .dropdown-menu .action-submenu .action-submenu{max-height:none;overflow-y:inherit}.admin__action-multiselect-wrap .action-menu-item{transition:background-color .1s linear}.admin__action-multiselect-wrap .action-menu-item._selected{background-color:#e3e3e3}.admin__action-multiselect-wrap .action-menu-item._hover{background-color:#e0f6fe}.admin__action-multiselect-wrap .admin__action-multiselect{border:1px solid #adadad;cursor:pointer;min-height:3.2rem;padding:.7rem 3.6rem .6rem 1em;white-space:normal}.admin__action-multiselect-wrap .admin__action-multiselect:after{bottom:1.25rem;top:auto}.admin__action-multiselect-wrap .admin__action-multiselect:before{height:3.2rem;top:auto;width:3.2rem}.abs-action-menu .action-submenu,.abs-action-menu .action-submenu .action-submenu,.action-menu,.action-menu .action-submenu,.actions-split .action-menu .action-submenu,.actions-split .action-menu .action-submenu .action-submenu,.actions-split .dropdown-menu .action-submenu,.actions-split .dropdown-menu .action-submenu .action-submenu{text-align:left}.admin__action-multiselect-label{position:relative;z-index:1}.admin__action-multiselect-label:before{margin-right:.5rem}.admin__action-multiselect-search-wrap{margin-bottom:1rem;padding:1rem;position:relative}.admin__action-multiselect-search-wrap+.admin__action-multiselect-menu-inner{border-bottom:1px solid #e3e3e3;border-top:1px solid #e3e3e3;margin-bottom:1rem}.admin__action-multiselect-menu-inner{margin-bottom:0;max-height:17.2rem;overflow-y:auto}.admin__action-multiselect-search{padding-right:3rem;width:100%}.admin__action-multiselect-search-label{display:block;font-size:1.5rem;height:1em;overflow:hidden;position:absolute;right:2.2rem;top:1.7rem;width:1em}.admin__action-multiselect-search-label:before{content:'\e60c'}.admin__action-multiselect-actions-wrap{text-align:center}.admin__action-multiselect-actions-wrap .action-default{font-size:1.3rem;min-width:13rem}.admin__action-multiselect-crumb{background-color:#f5f5f5;border:1px solid #a79d95;border-radius:1px;display:inline-block;font-size:1.2rem;margin:-.3rem .9rem .5rem -1.1rem;padding:.3rem 2.4rem .4rem 1rem;position:relative;transition:border-color .1s linear}.admin__action-multiselect-crumb:hover{border-color:#908379}.admin__action-multiselect-crumb .action-close{bottom:0;font-size:.5em;position:absolute;right:0;top:0;width:2rem}.admin__action-multiselect-crumb .action-close:hover{color:#000}.admin__action-multiselect-crumb .action-close:active,.admin__action-multiselect-crumb .action-close:focus{background-color:transparent}.admin__action-multiselect-crumb .action-close:active{-webkit-transform:scale(0.9);-ms-transform:scale(0.9);transform:scale(0.9)}.abs-action-delete,.abs-action-reset,.action-close,.notifications-close,.search-global-field._active .search-global-action{background-color:transparent;border:none;border-radius:0;box-shadow:none;margin:0;padding:0}.abs-action-delete:hover,.abs-action-reset:hover,.action-close:hover,.notifications-close:hover,.search-global-field._active .search-global-action:hover{background-color:transparent;border:none;box-shadow:none}.abs-action-default,.abs-action-pattern,.abs-action-primary,.abs-action-quaternary,.abs-action-secondary,.abs-action-tertiary,.action-default,.action-primary,.action-quaternary,.action-secondary,.action-tertiary,.page-actions .page-actions-buttons>button,.page-actions .page-actions-buttons>button.action-primary,.page-actions .page-actions-buttons>button.primary,.page-actions>button,.page-actions>button.action-primary,.page-actions>button.primary,button,button.primary,button.secondary,button.tertiary{border:1px solid;border-radius:0;display:inline-block;font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.4rem;font-weight:600;line-height:1.36;padding:.6rem 1em;text-align:center;vertical-align:baseline}.abs-action-default.disabled,.abs-action-default[disabled],.abs-action-pattern.disabled,.abs-action-pattern[disabled],.abs-action-primary.disabled,.abs-action-primary[disabled],.abs-action-quaternary.disabled,.abs-action-quaternary[disabled],.abs-action-secondary.disabled,.abs-action-secondary[disabled],.abs-action-tertiary.disabled,.abs-action-tertiary[disabled],.action-default.disabled,.action-default[disabled],.action-primary.disabled,.action-primary[disabled],.action-quaternary.disabled,.action-quaternary[disabled],.action-secondary.disabled,.action-secondary[disabled],.action-tertiary.disabled,.action-tertiary[disabled],.page-actions .page-actions-buttons>button.action-primary.disabled,.page-actions .page-actions-buttons>button.action-primary[disabled],.page-actions .page-actions-buttons>button.disabled,.page-actions .page-actions-buttons>button.primary.disabled,.page-actions .page-actions-buttons>button.primary[disabled],.page-actions .page-actions-buttons>button[disabled],.page-actions>button.action-primary.disabled,.page-actions>button.action-primary[disabled],.page-actions>button.disabled,.page-actions>button.primary.disabled,.page-actions>button.primary[disabled],.page-actions>button[disabled],button.disabled,button.primary.disabled,button.primary[disabled],button.secondary.disabled,button.secondary[disabled],button.tertiary.disabled,button.tertiary[disabled],button[disabled]{cursor:default;opacity:.5;pointer-events:none}.abs-action-l,.page-actions .page-actions-buttons>button,.page-actions .page-actions-buttons>button.action-primary,.page-actions .page-actions-buttons>button.primary,.page-actions button,.page-actions>button.action-primary,.page-actions>button.primary{font-size:1.6rem;letter-spacing:.025em;padding-bottom:.6875em;padding-top:.6875em}.abs-action-delete{display:inline-block;font-size:1.6rem;margin-left:1.2rem;padding-top:.7rem;text-decoration:none;vertical-align:middle}.abs-action-delete:after{color:#666;content:'\e630'}.abs-action-delete:hover:after{color:#35302c}.abs-action-default,button{background:#e3e3e3;border-color:#adadad;color:#514943}.abs-action-default:active,.abs-action-default:focus,.abs-action-default:hover,button:active,button:focus,button:hover{background-color:#dbdbdb;color:#514943;text-decoration:none}.abs-action-primary,.page-actions .page-actions-buttons>button.action-primary,.page-actions .page-actions-buttons>button.primary,.page-actions>button.action-primary,.page-actions>button.primary,button.primary{background-color:#eb5202;border-color:#eb5202;color:#fff;text-shadow:1px 1px 0 rgba(0,0,0,.25)}.abs-action-primary:active,.abs-action-primary:focus,.abs-action-primary:hover,.page-actions .page-actions-buttons>button.action-primary:active,.page-actions .page-actions-buttons>button.action-primary:focus,.page-actions .page-actions-buttons>button.action-primary:hover,.page-actions .page-actions-buttons>button.primary:active,.page-actions .page-actions-buttons>button.primary:focus,.page-actions .page-actions-buttons>button.primary:hover,.page-actions>button.action-primary:active,.page-actions>button.action-primary:focus,.page-actions>button.action-primary:hover,.page-actions>button.primary:active,.page-actions>button.primary:focus,.page-actions>button.primary:hover,button.primary:active,button.primary:focus,button.primary:hover{background-color:#ba4000;border-color:#b84002;box-shadow:0 0 0 1px #007bdb;color:#fff;text-decoration:none}.abs-action-primary.disabled,.abs-action-primary[disabled],.page-actions .page-actions-buttons>button.action-primary.disabled,.page-actions .page-actions-buttons>button.action-primary[disabled],.page-actions .page-actions-buttons>button.primary.disabled,.page-actions .page-actions-buttons>button.primary[disabled],.page-actions>button.action-primary.disabled,.page-actions>button.action-primary[disabled],.page-actions>button.primary.disabled,.page-actions>button.primary[disabled],button.primary.disabled,button.primary[disabled]{cursor:default;opacity:.5;pointer-events:none}.abs-action-secondary,button.secondary{background-color:#514943;border-color:#514943;color:#fff;text-shadow:1px 1px 1px rgba(0,0,0,.3)}.abs-action-secondary:active,.abs-action-secondary:focus,.abs-action-secondary:hover,button.secondary:active,button.secondary:focus,button.secondary:hover{background-color:#35302c;border-color:#35302c;box-shadow:0 0 0 1px #007bdb;color:#fff;text-decoration:none}.abs-action-secondary:active,button.secondary:active{background-color:#35302c}.abs-action-tertiary,button.tertiary{background-color:transparent;border-color:transparent;text-shadow:none;color:#008bdb}.abs-action-tertiary:active,.abs-action-tertiary:focus,.abs-action-tertiary:hover,button.tertiary:active,button.tertiary:focus,button.tertiary:hover{background-color:transparent;border-color:transparent;box-shadow:none;color:#0fa7ff;text-decoration:underline}.abs-action-quaternary,.page-actions .page-actions-buttons>button,.page-actions>button{background-color:transparent;border-color:transparent;text-shadow:none;color:#333}.abs-action-quaternary:active,.abs-action-quaternary:focus,.abs-action-quaternary:hover,.page-actions .page-actions-buttons>button:active,.page-actions .page-actions-buttons>button:focus,.page-actions .page-actions-buttons>button:hover,.page-actions>button:active,.page-actions>button:focus,.page-actions>button:hover{background-color:transparent;border-color:transparent;box-shadow:none;color:#1a1a1a}.abs-action-menu,.actions-split .abs-action-menu .action-submenu,.actions-split .abs-action-menu .action-submenu .action-submenu,.actions-split .action-menu,.actions-split .action-menu .action-submenu,.actions-split .actions-split .dropdown-menu .action-submenu,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu,.actions-split .dropdown-menu{text-align:left;background-color:#fff;border:1px solid #007bdb;border-radius:1px;box-shadow:1px 1px 5px rgba(0,0,0,.5);color:#333;display:none;font-weight:400;left:0;list-style:none;margin:2px 0 0;min-width:0;padding:0;position:absolute;right:0;top:100%}.abs-action-menu._active,.actions-split .abs-action-menu .action-submenu .action-submenu._active,.actions-split .abs-action-menu .action-submenu._active,.actions-split .action-menu .action-submenu._active,.actions-split .action-menu._active,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu._active,.actions-split .actions-split .dropdown-menu .action-submenu._active,.actions-split .dropdown-menu._active{display:block}.abs-action-menu>li,.actions-split .abs-action-menu .action-submenu .action-submenu>li,.actions-split .abs-action-menu .action-submenu>li,.actions-split .action-menu .action-submenu>li,.actions-split .action-menu>li,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li,.actions-split .actions-split .dropdown-menu .action-submenu>li,.actions-split .dropdown-menu>li{border:none;display:block;padding:0;transition:background-color .1s linear}.abs-action-menu>li>a:hover,.actions-split .abs-action-menu .action-submenu .action-submenu>li>a:hover,.actions-split .abs-action-menu .action-submenu>li>a:hover,.actions-split .action-menu .action-submenu>li>a:hover,.actions-split .action-menu>li>a:hover,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li>a:hover,.actions-split .actions-split .dropdown-menu .action-submenu>li>a:hover,.actions-split .dropdown-menu>li>a:hover{text-decoration:none}.abs-action-menu>li._visible,.abs-action-menu>li:hover,.actions-split .abs-action-menu .action-submenu .action-submenu>li._visible,.actions-split .abs-action-menu .action-submenu .action-submenu>li:hover,.actions-split .abs-action-menu .action-submenu>li._visible,.actions-split .abs-action-menu .action-submenu>li:hover,.actions-split .action-menu .action-submenu>li._visible,.actions-split .action-menu .action-submenu>li:hover,.actions-split .action-menu>li._visible,.actions-split .action-menu>li:hover,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li._visible,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li:hover,.actions-split .actions-split .dropdown-menu .action-submenu>li._visible,.actions-split .actions-split .dropdown-menu .action-submenu>li:hover,.actions-split .dropdown-menu>li._visible,.actions-split .dropdown-menu>li:hover{background-color:#e3e3e3}.abs-action-menu>li:active,.actions-split .abs-action-menu .action-submenu .action-submenu>li:active,.actions-split .abs-action-menu .action-submenu>li:active,.actions-split .action-menu .action-submenu>li:active,.actions-split .action-menu>li:active,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li:active,.actions-split .actions-split .dropdown-menu .action-submenu>li:active,.actions-split .dropdown-menu>li:active{background-color:#cacaca}.abs-action-menu>li._parent,.actions-split .abs-action-menu .action-submenu .action-submenu>li._parent,.actions-split .abs-action-menu .action-submenu>li._parent,.actions-split .action-menu .action-submenu>li._parent,.actions-split .action-menu>li._parent,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li._parent,.actions-split .actions-split .dropdown-menu .action-submenu>li._parent,.actions-split .dropdown-menu>li._parent{display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.abs-action-menu>li._parent>.action-menu-item,.actions-split .abs-action-menu .action-submenu .action-submenu>li._parent>.action-menu-item,.actions-split .abs-action-menu .action-submenu>li._parent>.action-menu-item,.actions-split .action-menu .action-submenu>li._parent>.action-menu-item,.actions-split .action-menu>li._parent>.action-menu-item,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li._parent>.action-menu-item,.actions-split .actions-split .dropdown-menu .action-submenu>li._parent>.action-menu-item,.actions-split .dropdown-menu>li._parent>.action-menu-item{min-width:100%}.abs-action-menu .action-menu-item,.abs-action-menu .item,.actions-split .abs-action-menu .action-submenu .action-menu-item,.actions-split .abs-action-menu .action-submenu .action-submenu .action-menu-item,.actions-split .abs-action-menu .action-submenu .action-submenu .item,.actions-split .abs-action-menu .action-submenu .item,.actions-split .action-menu .action-menu-item,.actions-split .action-menu .action-submenu .action-menu-item,.actions-split .action-menu .action-submenu .item,.actions-split .action-menu .item,.actions-split .actions-split .dropdown-menu .action-submenu .action-menu-item,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu .action-menu-item,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu .item,.actions-split .actions-split .dropdown-menu .action-submenu .item,.actions-split .dropdown-menu .action-menu-item,.actions-split .dropdown-menu .item{display:block;padding:.6875em 1em;cursor:pointer}.abs-action-menu .action-submenu,.actions-split .action-menu .action-submenu,.actions-split .action-menu .action-submenu .action-submenu,.actions-split .dropdown-menu .action-submenu{bottom:auto;left:auto;margin-left:0;margin-top:-1px;position:absolute;right:auto;top:auto}.ie9 .abs-action-menu .action-submenu,.ie9 .actions-split .abs-action-menu .action-submenu .action-submenu,.ie9 .actions-split .abs-action-menu .action-submenu .action-submenu .action-submenu,.ie9 .actions-split .action-menu .action-submenu,.ie9 .actions-split .action-menu .action-submenu .action-submenu,.ie9 .actions-split .actions-split .dropdown-menu .action-submenu .action-submenu,.ie9 .actions-split .actions-split .dropdown-menu .action-submenu .action-submenu .action-submenu,.ie9 .actions-split .dropdown-menu .action-submenu{margin-left:99%;margin-top:-3.5rem}.abs-action-menu a.action-menu-item,.actions-split .abs-action-menu .action-submenu .action-submenu a.action-menu-item,.actions-split .abs-action-menu .action-submenu a.action-menu-item,.actions-split .action-menu .action-submenu a.action-menu-item,.actions-split .action-menu a.action-menu-item,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu a.action-menu-item,.actions-split .actions-split .dropdown-menu .action-submenu a.action-menu-item,.actions-split .dropdown-menu a.action-menu-item{color:#333}.abs-action-menu a.action-menu-item:focus,.actions-split .abs-action-menu .action-submenu .action-submenu a.action-menu-item:focus,.actions-split .abs-action-menu .action-submenu a.action-menu-item:focus,.actions-split .action-menu .action-submenu a.action-menu-item:focus,.actions-split .action-menu a.action-menu-item:focus,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu a.action-menu-item:focus,.actions-split .actions-split .dropdown-menu .action-submenu a.action-menu-item:focus,.actions-split .dropdown-menu a.action-menu-item:focus{background-color:#e3e3e3;box-shadow:none}.abs-action-wrap-triangle{position:relative}.abs-action-wrap-triangle .action-default{width:100%}.abs-action-wrap-triangle .action-default:after,.abs-action-wrap-triangle .action-default:before{border-style:solid;content:'';height:0;position:absolute;top:0;width:0}.abs-action-wrap-triangle .action-default:active,.abs-action-wrap-triangle .action-default:focus,.abs-action-wrap-triangle .action-default:hover{box-shadow:none}._keyfocus .abs-action-wrap-triangle .action-default:focus{box-shadow:0 0 0 1px #007bdb}.ie10 .abs-action-wrap-triangle .action-default.disabled,.ie10 .abs-action-wrap-triangle .action-default[disabled],.ie9 .abs-action-wrap-triangle .action-default.disabled,.ie9 .abs-action-wrap-triangle .action-default[disabled]{background-color:#fcfcfc;opacity:1;text-shadow:none}.abs-action-wrap-triangle-right{display:inline-block;padding-right:1.6rem;position:relative}.abs-action-wrap-triangle-right .action-default:after,.abs-action-wrap-triangle-right .action-default:before{border-color:transparent transparent transparent #e3e3e3;border-width:1.7rem 0 1.6rem 1.7rem;left:100%;margin-left:-1.7rem}.abs-action-wrap-triangle-right .action-default:before{border-left-color:#949494;right:-1px}.abs-action-wrap-triangle-right .action-default:active:after,.abs-action-wrap-triangle-right .action-default:focus:after,.abs-action-wrap-triangle-right .action-default:hover:after{border-left-color:#dbdbdb}.ie10 .abs-action-wrap-triangle-right .action-default.disabled:after,.ie10 .abs-action-wrap-triangle-right .action-default[disabled]:after,.ie9 .abs-action-wrap-triangle-right .action-default.disabled:after,.ie9 .abs-action-wrap-triangle-right .action-default[disabled]:after{border-color:transparent transparent transparent #fcfcfc}.abs-action-wrap-triangle-right .action-primary:after{border-color:transparent transparent transparent #eb5202}.abs-action-wrap-triangle-right .action-primary:active:after,.abs-action-wrap-triangle-right .action-primary:focus:after,.abs-action-wrap-triangle-right .action-primary:hover:after{border-left-color:#ba4000}.abs-action-wrap-triangle-left{display:inline-block;padding-left:1.6rem}.abs-action-wrap-triangle-left .action-default{text-indent:-.85rem}.abs-action-wrap-triangle-left .action-default:after,.abs-action-wrap-triangle-left .action-default:before{border-color:transparent #e3e3e3 transparent transparent;border-width:1.7rem 1.7rem 1.6rem 0;margin-right:-1.7rem;right:100%}.abs-action-wrap-triangle-left .action-default:before{border-right-color:#949494;left:-1px}.abs-action-wrap-triangle-left .action-default:active:after,.abs-action-wrap-triangle-left .action-default:focus:after,.abs-action-wrap-triangle-left .action-default:hover:after{border-right-color:#dbdbdb}.ie10 .abs-action-wrap-triangle-left .action-default.disabled:after,.ie10 .abs-action-wrap-triangle-left .action-default[disabled]:after,.ie9 .abs-action-wrap-triangle-left .action-default.disabled:after,.ie9 .abs-action-wrap-triangle-left .action-default[disabled]:after{border-color:transparent #fcfcfc transparent transparent}.abs-action-wrap-triangle-left .action-primary:after{border-color:transparent #eb5202 transparent transparent}.abs-action-wrap-triangle-left .action-primary:active:after,.abs-action-wrap-triangle-left .action-primary:focus:after,.abs-action-wrap-triangle-left .action-primary:hover:after{border-right-color:#ba4000}.action-default,button{background:#e3e3e3;border-color:#adadad;color:#514943}.action-default:active,.action-default:focus,.action-default:hover,button:active,button:focus,button:hover{background-color:#dbdbdb;color:#514943;text-decoration:none}.action-primary{background-color:#eb5202;border-color:#eb5202;color:#fff;text-shadow:1px 1px 0 rgba(0,0,0,.25)}.action-primary:active,.action-primary:focus,.action-primary:hover{background-color:#ba4000;border-color:#b84002;box-shadow:0 0 0 1px #007bdb;color:#fff;text-decoration:none}.action-primary.disabled,.action-primary[disabled]{cursor:default;opacity:.5;pointer-events:none}.action-secondary{background-color:#514943;border-color:#514943;color:#fff;text-shadow:1px 1px 1px rgba(0,0,0,.3)}.action-secondary:active,.action-secondary:focus,.action-secondary:hover{background-color:#35302c;border-color:#35302c;box-shadow:0 0 0 1px #007bdb;color:#fff;text-decoration:none}.action-secondary:active{background-color:#35302c}.action-quaternary,.action-tertiary{background-color:transparent;border-color:transparent;text-shadow:none}.action-quaternary:active,.action-quaternary:focus,.action-quaternary:hover,.action-tertiary:active,.action-tertiary:focus,.action-tertiary:hover{background-color:transparent;border-color:transparent;box-shadow:none}.action-tertiary{color:#008bdb}.action-tertiary:active,.action-tertiary:focus,.action-tertiary:hover{color:#0fa7ff;text-decoration:underline}.action-quaternary{color:#333}.action-quaternary:active,.action-quaternary:focus,.action-quaternary:hover{color:#1a1a1a}.action-close>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.action-close:active{-webkit-transform:scale(0.9);-ms-transform:scale(0.9);transform:scale(0.9)}.action-close:before{content:'\e62f';transition:color .1s linear}.action-close:hover{cursor:pointer;text-decoration:none}.abs-action-menu .action-submenu,.abs-action-menu .action-submenu .action-submenu,.action-menu,.action-menu .action-submenu,.actions-split .action-menu .action-submenu,.actions-split .action-menu .action-submenu .action-submenu,.actions-split .dropdown-menu .action-submenu,.actions-split .dropdown-menu .action-submenu .action-submenu{background-color:#fff;border:1px solid #007bdb;border-radius:1px;box-shadow:1px 1px 5px rgba(0,0,0,.5);color:#333;display:none;font-weight:400;left:0;list-style:none;margin:2px 0 0;min-width:0;padding:0;position:absolute;right:0;top:100%}.abs-action-menu .action-submenu .action-submenu._active,.abs-action-menu .action-submenu._active,.action-menu .action-submenu._active,.action-menu._active,.actions-split .action-menu .action-submenu .action-submenu._active,.actions-split .action-menu .action-submenu._active,.actions-split .dropdown-menu .action-submenu .action-submenu._active,.actions-split .dropdown-menu .action-submenu._active{display:block}.abs-action-menu .action-submenu .action-submenu>li,.abs-action-menu .action-submenu>li,.action-menu .action-submenu>li,.action-menu>li,.actions-split .action-menu .action-submenu .action-submenu>li,.actions-split .action-menu .action-submenu>li,.actions-split .dropdown-menu .action-submenu .action-submenu>li,.actions-split .dropdown-menu .action-submenu>li{border:none;display:block;padding:0;transition:background-color .1s linear}.abs-action-menu .action-submenu .action-submenu>li>a:hover,.abs-action-menu .action-submenu>li>a:hover,.action-menu .action-submenu>li>a:hover,.action-menu>li>a:hover,.actions-split .action-menu .action-submenu .action-submenu>li>a:hover,.actions-split .action-menu .action-submenu>li>a:hover,.actions-split .dropdown-menu .action-submenu .action-submenu>li>a:hover,.actions-split .dropdown-menu .action-submenu>li>a:hover{text-decoration:none}.abs-action-menu .action-submenu .action-submenu>li._visible,.abs-action-menu .action-submenu .action-submenu>li:hover,.abs-action-menu .action-submenu>li._visible,.abs-action-menu .action-submenu>li:hover,.action-menu .action-submenu>li._visible,.action-menu .action-submenu>li:hover,.action-menu>li._visible,.action-menu>li:hover,.actions-split .action-menu .action-submenu .action-submenu>li._visible,.actions-split .action-menu .action-submenu .action-submenu>li:hover,.actions-split .action-menu .action-submenu>li._visible,.actions-split .action-menu .action-submenu>li:hover,.actions-split .dropdown-menu .action-submenu .action-submenu>li._visible,.actions-split .dropdown-menu .action-submenu .action-submenu>li:hover,.actions-split .dropdown-menu .action-submenu>li._visible,.actions-split .dropdown-menu .action-submenu>li:hover{background-color:#e3e3e3}.abs-action-menu .action-submenu .action-submenu>li:active,.abs-action-menu .action-submenu>li:active,.action-menu .action-submenu>li:active,.action-menu>li:active,.actions-split .action-menu .action-submenu .action-submenu>li:active,.actions-split .action-menu .action-submenu>li:active,.actions-split .dropdown-menu .action-submenu .action-submenu>li:active,.actions-split .dropdown-menu .action-submenu>li:active{background-color:#cacaca}.abs-action-menu .action-submenu .action-submenu>li._parent,.abs-action-menu .action-submenu>li._parent,.action-menu .action-submenu>li._parent,.action-menu>li._parent,.actions-split .action-menu .action-submenu .action-submenu>li._parent,.actions-split .action-menu .action-submenu>li._parent,.actions-split .dropdown-menu .action-submenu .action-submenu>li._parent,.actions-split .dropdown-menu .action-submenu>li._parent{display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.abs-action-menu .action-submenu .action-submenu>li._parent>.action-menu-item,.abs-action-menu .action-submenu>li._parent>.action-menu-item,.action-menu .action-submenu>li._parent>.action-menu-item,.action-menu>li._parent>.action-menu-item,.actions-split .action-menu .action-submenu .action-submenu>li._parent>.action-menu-item,.actions-split .action-menu .action-submenu>li._parent>.action-menu-item,.actions-split .dropdown-menu .action-submenu .action-submenu>li._parent>.action-menu-item,.actions-split .dropdown-menu .action-submenu>li._parent>.action-menu-item{min-width:100%}.abs-action-menu .action-submenu .action-menu-item,.abs-action-menu .action-submenu .action-submenu .action-menu-item,.abs-action-menu .action-submenu .action-submenu .item,.abs-action-menu .action-submenu .item,.action-menu .action-menu-item,.action-menu .action-submenu .action-menu-item,.action-menu .action-submenu .item,.action-menu .item,.actions-split .action-menu .action-submenu .action-menu-item,.actions-split .action-menu .action-submenu .action-submenu .action-menu-item,.actions-split .action-menu .action-submenu .action-submenu .item,.actions-split .action-menu .action-submenu .item,.actions-split .dropdown-menu .action-submenu .action-menu-item,.actions-split .dropdown-menu .action-submenu .action-submenu .action-menu-item,.actions-split .dropdown-menu .action-submenu .action-submenu .item,.actions-split .dropdown-menu .action-submenu .item{display:block;padding:.6875em 1em;cursor:pointer}.abs-action-menu .action-submenu .action-submenu,.action-menu .action-submenu,.actions-split .action-menu .action-submenu .action-submenu,.actions-split .dropdown-menu .action-submenu .action-submenu{bottom:auto;left:auto;margin-left:0;margin-top:-1px;position:absolute;right:auto;top:auto}.ie9 .abs-action-menu .action-submenu .action-submenu,.ie9 .abs-action-menu .action-submenu .action-submenu .action-submenu,.ie9 .action-menu .action-submenu,.ie9 .action-menu .action-submenu .action-submenu,.ie9 .actions-split .action-menu .action-submenu .action-submenu,.ie9 .actions-split .action-menu .action-submenu .action-submenu .action-submenu,.ie9 .actions-split .dropdown-menu .action-submenu .action-submenu,.ie9 .actions-split .dropdown-menu .action-submenu .action-submenu .action-submenu{margin-left:99%;margin-top:-3.5rem}.abs-action-menu .action-submenu .action-submenu a.action-menu-item,.abs-action-menu .action-submenu a.action-menu-item,.action-menu .action-submenu a.action-menu-item,.action-menu a.action-menu-item,.actions-split .action-menu .action-submenu .action-submenu a.action-menu-item,.actions-split .action-menu .action-submenu a.action-menu-item,.actions-split .dropdown-menu .action-submenu .action-submenu a.action-menu-item,.actions-split .dropdown-menu .action-submenu a.action-menu-item{color:#333}.abs-action-menu .action-submenu .action-submenu a.action-menu-item:focus,.abs-action-menu .action-submenu a.action-menu-item:focus,.action-menu .action-submenu a.action-menu-item:focus,.action-menu a.action-menu-item:focus,.actions-split .action-menu .action-submenu .action-submenu a.action-menu-item:focus,.actions-split .action-menu .action-submenu a.action-menu-item:focus,.actions-split .dropdown-menu .action-submenu .action-submenu a.action-menu-item:focus,.actions-split .dropdown-menu .action-submenu a.action-menu-item:focus{background-color:#e3e3e3;box-shadow:none}.messages .message:last-child{margin:0 0 2rem}.message{background:#fffbbb;border:none;border-radius:0;color:#333;font-size:1.4rem;margin:0 0 1px;padding:1.8rem 4rem 1.8rem 5.5rem;position:relative;text-shadow:none}.message:before{background:0 0;border:0;color:#007bdb;content:'\e61a';font-family:Icons;font-size:1.9rem;font-style:normal;font-weight:400;height:auto;left:1.9rem;line-height:inherit;margin-top:-1.3rem;position:absolute;speak:none;text-shadow:none;top:50%;width:auto}.message-notice:before{color:#007bdb;content:'\e61a'}.message-warning:before{color:#eb5202;content:'\e623'}.message-error{background:#fcc}.message-error:before{color:#e22626;content:'\e632';font-size:1.5rem;left:2.2rem;margin-top:-1rem}.message-success:before{color:#79a22e;content:'\e62d'}.message-spinner:before{display:none}.message-spinner .spinner{font-size:2.5rem;left:1.5rem;position:absolute;top:1.5rem}.message-in-rating-edit{margin-left:1.8rem;margin-right:1.8rem}.modal-popup .action-close,.modal-slide .action-close{color:#736963;position:absolute;right:0;top:0}.modal-popup .action-close:active,.modal-slide .action-close:active{-webkit-transform:none;-ms-transform:none;transform:none}.modal-popup .action-close:active:before,.modal-slide .action-close:active:before{font-size:1.8rem}.modal-popup .action-close:hover:before,.modal-slide .action-close:hover:before{color:#58504b}.modal-popup .action-close:before,.modal-slide .action-close:before{font-size:2rem}.modal-popup .modal-title{font-size:2.4rem;margin-right:6.4rem}.modal-popup .action-close{padding:3rem}.modal-popup .action-close:active,.modal-popup .action-close:focus{background:0 0;padding-right:3.1rem;padding-top:3.1rem}.modal-slide .modal-title{font-size:2.1rem;margin-right:5.7rem}.modal-slide .action-close{padding:2.1rem 2.6rem}.modal-slide .action-close:active{padding-right:2.7rem;padding-top:2.2rem}.modal-slide .page-main-actions{margin-bottom:.6rem;margin-top:2.1rem}.modal-title{font-weight:400;margin-bottom:0;min-height:1em}.spinner{display:inline-block;font-size:4rem;height:1em;margin-right:1.5rem;position:relative;width:1em}.spinner>span:nth-child(1){-webkit-animation-delay:.27s;animation-delay:.27s;-webkit-transform:rotate(-315deg);-ms-transform:rotate(-315deg);transform:rotate(-315deg)}.spinner>span:nth-child(2){-webkit-animation-delay:.36s;animation-delay:.36s;-webkit-transform:rotate(-270deg);-ms-transform:rotate(-270deg);transform:rotate(-270deg)}.spinner>span:nth-child(3){-webkit-animation-delay:.45s;animation-delay:.45s;-webkit-transform:rotate(-225deg);-ms-transform:rotate(-225deg);transform:rotate(-225deg)}.spinner>span:nth-child(4){-webkit-animation-delay:.54s;animation-delay:.54s;-webkit-transform:rotate(-180deg);-ms-transform:rotate(-180deg);transform:rotate(-180deg)}.spinner>span:nth-child(5){-webkit-animation-delay:.63s;animation-delay:.63s;-webkit-transform:rotate(-135deg);-ms-transform:rotate(-135deg);transform:rotate(-135deg)}.spinner>span:nth-child(6){-webkit-animation-delay:.72s;animation-delay:.72s;-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);transform:rotate(-90deg)}.spinner>span:nth-child(7){-webkit-animation-delay:.81s;animation-delay:.81s;-webkit-transform:rotate(-45deg);-ms-transform:rotate(-45deg);transform:rotate(-45deg)}.spinner>span:nth-child(8){-webkit-animation-delay:.9;animation-delay:.9;-webkit-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg)}@-webkit-keyframes fade{0%{background-color:#514943}100%{background-color:#fff}}@keyframes fade{0%{background-color:#514943}100%{background-color:#fff}}.spinner>span{-webkit-transform:scale(0.4);-ms-transform:scale(0.4);transform:scale(0.4);-webkit-animation-name:fade;animation-name:fade;-webkit-animation-duration:.72s;animation-duration:.72s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-direction:linear;animation-direction:linear;background-color:#fff;border-radius:6px;clip:rect(0 .28571429em .1em 0);height:.1em;margin-top:.5em;position:absolute;width:1em}.ie9 .spinner{background:url(../images/ajax-loader.gif) center no-repeat}.ie9 .spinner>span{display:none}.popup-loading{background:rgba(255,255,255,.8);border-color:#ef672f;color:#ef672f;font-size:14px;font-weight:700;left:50%;margin-left:-100px;padding:100px 0 10px;position:fixed;text-align:center;top:40%;width:200px;z-index:1003}.popup-loading:after{background-image:url(../images/loader-1.gif);content:'';height:64px;left:50%;margin:-32px 0 0 -32px;position:absolute;top:40%;width:64px;z-index:2}.loading-mask,.loading-old{background:rgba(255,255,255,.4);bottom:0;left:0;position:fixed;right:0;top:0;z-index:2003}.loading-mask img,.loading-old img{display:none}.loading-mask p,.loading-old p{margin-top:118px}.loading-mask .loader,.loading-old .loader{background:url(../images/loader-1.gif) 50% 30% no-repeat #e5e2dd;border-radius:5px;bottom:0;color:#5e5b56;font-size:14px;font-weight:700;height:160px;left:0;margin:auto;opacity:.95;position:absolute;right:0;text-align:center;top:0;width:160px}.admin-user{float:right;line-height:1.36;margin-left:.3rem;z-index:390}.admin-user._active .admin__action-dropdown,.admin-user.active .admin__action-dropdown{border-color:#007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5)}.admin-user .admin__action-dropdown{height:3.3rem;padding:.7rem 2.8rem .4rem 4rem}.admin-user .admin__action-dropdown._active:after,.admin-user .admin__action-dropdown.active:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.admin-user .admin__action-dropdown:after{border-color:#777 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;right:1.3rem;top:50%;transition:all .2s linear;width:0}._active .admin-user .admin__action-dropdown:after,.active .admin-user .admin__action-dropdown:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.admin-user .admin__action-dropdown:hover:after{border-color:#000 transparent transparent}.admin-user .admin__action-dropdown:before{color:#777;content:'\e600';font-size:2rem;left:1.1rem;margin-top:-1.1rem;position:absolute;top:50%}.admin-user .admin__action-dropdown:hover:before{color:#333}.admin-user .admin__action-dropdown-menu{min-width:20rem;padding-left:1rem;padding-right:1rem}.admin-user .admin__action-dropdown-menu>li>a{padding-right:1.8rem;padding-left:.5em;white-space:nowrap;transition:background-color .1s linear}.admin-user .admin__action-dropdown-menu>li>a:hover{background-color:#e0f6fe;color:#333}.admin-user .admin__action-dropdown-menu>li>a:active{background-color:#c7effd;bottom:-1px;position:relative}.admin-user .admin__action-dropdown-menu .admin-user-name{text-overflow:ellipsis;white-space:nowrap;display:inline-block;max-width:20rem;overflow:hidden;vertical-align:top}.admin-user-account-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:inline-block;max-width:11.2rem}.search-global{float:right;margin-right:-.3rem;position:relative;z-index:380}.search-global-field{min-width:5rem}.search-global-field._active .search-global-input{background-color:#fff;border-color:#007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5);padding-right:4rem;width:25rem}.search-global-field._active .search-global-action{display:block;height:3.3rem;position:absolute;right:0;text-indent:-100%;top:0;width:5rem;z-index:3}.search-global-field .autocomplete-results{height:3.3rem;position:absolute;right:0;top:0;width:25rem}.search-global-field .search-global-menu{border:1px solid #007bdb;border-top-color:transparent;box-shadow:1px 1px 5px rgba(0,0,0,.5);left:0;margin-top:-2px;padding:0;position:absolute;right:0;top:100%;z-index:2}.search-global-field .search-global-menu:after{background-color:#fff;content:'';height:5px;left:0;position:absolute;right:0;top:-5px}.search-global-field .search-global-menu>li{background-color:#fff;border-top:1px solid #ddd;display:block;font-size:1.2rem;padding:.75rem 1.4rem .55rem}.search-global-field .search-global-menu>li._active{background-color:#e0f6fe}.search-global-field .search-global-menu .title{display:block;font-size:1.4rem}.search-global-field .search-global-menu .type{color:#1a1a1a;display:block}.search-global-label{cursor:pointer;height:3.3rem;padding:.75rem 1.4rem .55rem;position:absolute;right:0;top:0;z-index:2}.search-global-label:active{-webkit-transform:scale(0.9);-ms-transform:scale(0.9);transform:scale(0.9)}.search-global-label:hover:before{color:#000}.search-global-label:before{color:#777;content:'\e60c';font-size:2rem}.search-global-input{background-color:transparent;border:1px solid transparent;font-size:1.4rem;height:3.3rem;padding:.75rem 1.4rem .55rem;position:absolute;right:0;top:0;transition:all .1s linear,width .3s linear;width:5rem;z-index:1}.search-global-action{display:none}.notifications-wrapper{float:right;line-height:1;position:relative}.notifications-wrapper.active{z-index:400}.notifications-wrapper.active .notifications-action{border-color:#007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5)}.notifications-wrapper.active .notifications-action:after{border:none;background-color:#fff;content:'';display:block;height:6px;left:-6px;margin-top:0;position:absolute;right:0;top:100%;width:auto}.notifications-wrapper .admin__action-dropdown-menu{padding:1rem 0 0;width:32rem}.notifications-action{color:#777;height:3.3rem;padding:.75rem 2rem .65rem}.notifications-action:after{display:none}.notifications-action:before{content:'\e607';font-size:1.9rem;margin-right:0}.notifications-action:active:before{position:relative;top:1px}.notifications-action .notifications-counter{background-color:#e22626;border-radius:1em;color:#fff;display:inline-block;font-size:1.1rem;font-weight:700;left:50%;margin-left:.3em;margin-top:-1.1em;padding:.3em .5em;position:absolute;top:50%}.notifications-entry{line-height:1.36;padding:.6rem 2rem .8rem;position:relative;transition:background-color .1s linear}.notifications-entry:hover{background-color:#e0f6fe}.notifications-entry.notifications-entry-last{margin:0 2rem;padding:.3rem 0 1.3rem;text-align:center}.notifications-entry.notifications-entry-last:hover{background-color:transparent}.notifications-entry+.notifications-entry-last{border-top:1px solid #ddd;padding-bottom:.6rem}.notifications-entry ._cutted{cursor:pointer}.notifications-entry ._cutted .notifications-entry-description-start:after{content:'...'}.notifications-entry-title{color:#ef672f;display:block;font-size:1.1rem;font-weight:700;margin-bottom:.7rem;margin-right:1em}.notifications-entry-description{color:#333;font-size:1.1rem;margin-bottom:.8rem}.notifications-entry-description-end{display:none}.notifications-entry-description-end._show{display:inline}.notifications-entry-time{color:#777;font-size:1.1rem}.notifications-close{line-height:1;padding:1rem;position:absolute;right:0;top:.6rem}.notifications-close:before{color:#ccc;content:'\e620';transition:color .1s linear}.notifications-close:hover:before{color:#b3b3b3}.notifications-close:active{-webkit-transform:scale(0.95);-ms-transform:scale(0.95);transform:scale(0.95)}.page-header-actions{padding-top:1.1rem}.page-header-hgroup{padding-right:1.5rem}.page-title{color:#333;font-size:2.8rem;margin-bottom:0}.page-header{padding:1.5rem 3rem}.menu-wrapper{display:inline-block;position:relative;width:8.8rem;z-index:700}.menu-wrapper:before{background-color:#373330;bottom:0;content:'';left:0;position:fixed;top:0;width:8.8rem;z-index:699}.menu-wrapper._fixed{left:0;position:fixed;top:0}.menu-wrapper._fixed~.page-wrapper{margin-left:8.8rem}.menu-wrapper .logo{display:block;height:8.8rem;padding:2.4rem 0 2.2rem;position:relative;text-align:center;z-index:700}._keyfocus .menu-wrapper .logo:focus{background-color:#4a4542;box-shadow:none}._keyfocus .menu-wrapper .logo:focus+.admin__menu .level-0:first-child>a{background-color:#373330}._keyfocus .menu-wrapper .logo:focus+.admin__menu .level-0:first-child>a:after{display:none}.menu-wrapper .logo:hover .logo-img{-webkit-filter:brightness(1.1);filter:brightness(1.1)}.menu-wrapper .logo:active .logo-img{-webkit-transform:scale(0.95);-ms-transform:scale(0.95);transform:scale(0.95)}.menu-wrapper .logo .logo-img{height:4.2rem;transition:-webkit-filter .2s linear,filter .2s linear,transform .1s linear;width:3.5rem}.abs-menu-separator,.admin__menu .item-partners>a:after,.admin__menu .level-0:first-child>a:after{background-color:#736963;content:'';display:block;height:1px;left:0;margin-left:16%;position:absolute;top:0;width:68%}.admin__menu li{display:block}.admin__menu .level-0:first-child>a{position:relative}.admin__menu .level-0:first-child._active>a:after{display:none}.admin__menu .level-0._active>a,.admin__menu .level-0:hover>a{color:#f7f3eb}.admin__menu .level-0._active>a{background-color:#524d49}.admin__menu .level-0:hover>a{background-color:#4a4542}.admin__menu .level-0>a{color:#aaa6a0;display:block;font-size:1rem;letter-spacing:.025em;min-height:6.2rem;padding:1.2rem .5rem .5rem;position:relative;text-align:center;text-decoration:none;text-transform:uppercase;transition:background-color .1s linear;word-wrap:break-word;z-index:700}.admin__menu .level-0>a:focus{box-shadow:none}.admin__menu .level-0>a:before{content:'\e63a';display:block;font-size:2.2rem;height:2.2rem}.admin__menu .level-0>.submenu{background-color:#4a4542;box-shadow:0 0 3px #000;left:100%;min-height:calc(8.8rem + 2rem + 100%);padding:2rem 0 0;position:absolute;top:0;-webkit-transform:translateX(-100%);-ms-transform:translateX(-100%);transform:translateX(-100%);transition-property:-webkit-transform,visibility;transition-property:transform,visibility;transition-duration:.3s;transition-timing-function:ease-in-out;visibility:hidden;z-index:697}.admin__menu .level-0._show>.submenu{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0);visibility:visible;z-index:698}.admin__menu .level-1{margin-left:1.5rem;margin-right:1.5rem}.admin__menu [class*=level-]:not(.level-0) a{display:block;padding:1.25rem 1.5rem}.admin__menu [class*=level-]:not(.level-0) a:hover{background-color:#403934}.admin__menu [class*=level-]:not(.level-0) a:active{padding-top:1.35rem;padding-bottom:1.15rem;background-color:#322c29}.admin__menu .submenu li{min-width:23.8rem}.admin__menu .submenu a{color:#fcfcfc;transition:background-color .1s linear}.admin__menu .submenu a:focus,.admin__menu .submenu a:hover{box-shadow:none;text-decoration:none}._keyfocus .admin__menu .submenu a:focus{background-color:#403934}._keyfocus .admin__menu .submenu a:active{background-color:#322c29}.admin__menu .submenu .parent{margin-bottom:4.5rem}.admin__menu .submenu .parent .submenu-group-title,.admin__menu .submenu .parent>a{color:#a79d95;display:block;font-size:1.6rem;font-weight:600;margin-bottom:.7rem;padding:1.25rem 1.5rem;pointer-events:none}.admin__menu .submenu .column{display:table-cell}.admin__menu .submenu-title{color:#fff;display:block;font-size:2.2rem;font-weight:600;margin-bottom:4.2rem;margin-left:3rem;margin-right:5.8rem}.admin__menu .submenu-sub-title{color:#fff;display:block;font-size:1.2rem;margin:-3.8rem 5.8rem 3.8rem 3rem}.admin__menu .action-close{padding:2.4rem 2.8rem;position:absolute;right:0;top:0}.admin__menu .action-close:before{color:#a79d95;font-size:1.7rem}.admin__menu .action-close:hover:before{color:#fff}.admin__menu .item-dashboard>a:before{content:'\e604';font-size:1.8rem;padding-top:.4rem}.admin__menu .item-sales>a:before{content:'\e60b'}.admin__menu .item-catalog>a:before{content:'\e608'}.admin__menu .item-customer>a:before{content:'\e603';font-size:2.6rem;position:relative;top:-.4rem}.admin__menu .item-marketing>a:before{content:'\e609';font-size:2rem;padding-top:.2rem}.admin__menu .item-content>a:before{content:'\e602';font-size:2.4rem;position:relative;top:-.2rem}.admin__menu .item-report>a:before{content:'\e60a'}.admin__menu .item-stores>a:before{content:'\e60d';font-size:1.9rem;padding-top:.3rem}.admin__menu .item-system>a:before{content:'\e60e'}.admin__menu .item-partners>a{padding-bottom:1rem}.admin__menu .item-partners>a:before{content:'\e612'}.admin__menu-overlay{bottom:0;left:0;position:fixed;right:0;top:0;z-index:697}.store-switcher{color:#333;float:left;font-size:1.3rem;margin-top:.7rem}.store-switcher .admin__action-dropdown{margin-left:.5em;background-color:#f8f8f8}.store-switcher .dropdown{display:inline-block;position:relative}.store-switcher .dropdown:after,.store-switcher .dropdown:before{content:'';display:table}.store-switcher .dropdown:after{clear:both}.store-switcher .dropdown .action.toggle{cursor:pointer;display:inline-block;text-decoration:none}.store-switcher .dropdown .action.toggle:after{-webkit-font-smoothing:antialiased;font-size:22px;line-height:2;color:#333;content:'\e607';font-family:icons-blank-theme;margin:0;vertical-align:top;display:inline-block;font-weight:400;overflow:hidden;speak:none;text-align:center}.store-switcher .dropdown .action.toggle:active:after,.store-switcher .dropdown .action.toggle:hover:after{color:#333}.store-switcher .dropdown .action.toggle.active{display:inline-block;text-decoration:none}.store-switcher .dropdown .action.toggle.active:after{-webkit-font-smoothing:antialiased;font-size:22px;line-height:2;color:#333;content:'\e618';font-family:icons-blank-theme;margin:0;vertical-align:top;display:inline-block;font-weight:400;overflow:hidden;speak:none;text-align:center}.store-switcher .dropdown .action.toggle.active:active:after,.store-switcher .dropdown .action.toggle.active:hover:after{color:#333}.store-switcher .dropdown .dropdown-menu{background:#fff;border:1px solid #ada89e;z-index:100;margin:4px 0 0;padding:0;list-style:none;box-sizing:border-box;position:absolute;top:100%;box-shadow:1px 1px 5px rgba(0,0,0,.5);min-width:19.5rem;display:none}.store-switcher .dropdown .dropdown-menu li{margin:0;padding:0}.store-switcher .dropdown .dropdown-menu li:hover{background:0 0;cursor:pointer}.store-switcher .dropdown.active{overflow:visible}.store-switcher .dropdown.active .dropdown-menu{display:block}.store-switcher .dropdown-menu{left:0;margin-top:.5em;padding-top:.25em}.store-switcher .dropdown-menu li{border:0;cursor:default}.store-switcher .dropdown-menu li:hover{cursor:default}.store-switcher .dropdown-menu li a,.store-switcher .dropdown-menu li span{color:#333;display:block;padding:.5rem 1.3rem}.store-switcher .dropdown-menu li a{text-decoration:none}.store-switcher .dropdown-menu li a:hover{background:#e9e9e9}.store-switcher .dropdown-menu li span{color:#adadad;cursor:default}.store-switcher .dropdown-menu li.current span{background:#eee;color:#333}.store-switcher .dropdown-menu .store-switcher-store a,.store-switcher .dropdown-menu .store-switcher-store span{padding-left:2.6rem}.store-switcher .dropdown-menu .store-switcher-store-view a,.store-switcher .dropdown-menu .store-switcher-store-view span{padding-left:3.9rem}.store-switcher .dropdown-menu .dropdown-toolbar{border-top:1px solid #ebebeb;margin-top:1rem}.store-switcher .dropdown-menu .dropdown-toolbar a:before{content:'\e60e';margin-right:.25em;position:relative;top:1px}.store-switcher-label{font-weight:700}.store-switcher-alt{display:inline-block;position:relative}.store-switcher-alt.active .dropdown-menu{display:block}.store-switcher-alt .dropdown-menu{margin-top:2px;white-space:nowrap}.store-switcher-alt .dropdown-menu ul{list-style:none;margin:0;padding:0}.store-switcher-alt strong{color:#a6a098;display:block;font-size:14px;font-weight:500;line-height:1.333;padding:5px 10px}.store-switcher-alt .store-selected{color:#676056;cursor:pointer;font-size:12px;font-weight:400;line-height:1.333}.store-switcher-alt .store-selected:after{color:#b3b0ad;content:'\e02c';-webkit-font-smoothing:antialiased;font-style:normal;font-weight:400;margin:0 0 0 3px;speak:none;vertical-align:text-top}.store-switcher-alt .store-switcher-store,.store-switcher-alt .store-switcher-website{padding:0}.store-switcher-alt .store-switcher-store:hover,.store-switcher-alt .store-switcher-website:hover{background:0 0}.store-switcher-alt .manage-stores,.store-switcher-alt .store-switcher-all,.store-switcher-alt .store-switcher-store-view{padding:0}.store-switcher-alt .manage-stores>a,.store-switcher-alt .store-switcher-all>a{color:#676056;display:block;font-size:12px;padding:8px 15px;text-decoration:none}.store-switcher-website{margin:5px 0 0}.store-switcher-website>strong{padding-left:13px}.store-switcher-store{margin:1px 0 0}.store-switcher-store>strong{padding-left:20px}.store-switcher-store>ul{margin-top:1px}.store-switcher-store-view:first-child{border-top:1px solid #e5e5e5}.store-switcher-store-view>a{color:#333;display:block;font-size:13px;padding:5px 15px 5px 24px;text-decoration:none}.tooltip{margin-left:.5em}.tooltip .help a,.tooltip .help span{cursor:pointer;display:inline-block;height:22px;position:relative;vertical-align:middle;width:22px;z-index:2}.tooltip .help a:before,.tooltip .help span:before{color:#333;content:'\e633';font-size:1.7rem}.tooltip .help a span,.tooltip .help span span{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.tooltip .help a:hover{text-decoration:none}.tooltip .tooltip-content{background:#000;border-radius:3px;color:#fff;display:none;margin-left:-19px;margin-top:10px;max-width:200px;padding:4px 8px;position:absolute;text-shadow:none;z-index:20}.tooltip .tooltip-content:before{border-bottom:5px solid #000;border-left:5px solid transparent;border-right:5px solid transparent;content:'';height:0;left:20px;opacity:.8;position:absolute;top:-5px;width:0}.tooltip .tooltip-content.loading{position:absolute}.tooltip .tooltip-content.loading:before{border-bottom-color:rgba(0,0,0,.3)}.tooltip:hover>.tooltip-content{display:block}.page-actions._fixed,.page-main-actions:not(._hidden){background:#f8f8f8;border-bottom:1px solid #e3e3e3;border-top:1px solid #e3e3e3;padding:1.5rem}.page-main-actions{margin:0 0 3rem}.page-main-actions._hidden .store-switcher{display:none}.page-actions{float:right}.page-main-actions .page-actions._fixed{left:8.8rem;position:fixed;right:0;top:0;z-index:400}.page-main-actions .page-actions._fixed .page-actions-inner:before{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#333;content:attr(data-title);float:left;font-size:2.8rem;margin-top:.3rem;max-width:50%}.page-actions .page-actions-buttons>button,.page-actions>button{float:right;margin-left:1.3rem}.page-actions .page-actions-buttons>button.action-back,.page-actions .page-actions-buttons>button.back,.page-actions>button.action-back,.page-actions>button.back{float:left;-ms-flex-order:-1;-webkit-order:-1;order:-1}.page-actions .page-actions-buttons>button.action-back:before,.page-actions .page-actions-buttons>button.back:before,.page-actions>button.action-back:before,.page-actions>button.back:before{content:'\e626';margin-right:.5em;position:relative;top:1px}.page-actions .page-actions-buttons>button.action-primary,.page-actions .page-actions-buttons>button.primary,.page-actions>button.action-primary,.page-actions>button.primary{-ms-flex-order:2;-webkit-order:2;order:2}.page-actions .page-actions-buttons>button.save:not(.primary),.page-actions>button.save:not(.primary){-ms-flex-order:1;-webkit-order:1;order:1}.page-actions .page-actions-buttons>button.delete,.page-actions>button.delete{-ms-flex-order:-1;-webkit-order:-1;order:-1}.page-actions .actions-split{float:right;margin-left:1.3rem;-ms-flex-order:2;-webkit-order:2;order:2}.page-actions .actions-split .dropdown-menu .item{display:block}.page-actions-buttons{float:right;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;display:-webkit-flex;display:-ms-flexbox;display:flex}.customer-index-edit .page-actions-buttons{background-color:transparent}.admin__page-nav{background:#f1f1f1;border:1px solid #e3e3e3}.admin__page-nav._collapsed:first-child{border-bottom:none}.admin__page-nav._collapsed._show{border-bottom:1px solid #e3e3e3}.admin__page-nav._collapsed._show ._collapsible{background:#f1f1f1}.admin__page-nav._collapsed._show ._collapsible:after{content:'\e62b'}.admin__page-nav._collapsed._show ._collapsible+.admin__page-nav-items{display:block}.admin__page-nav._collapsed._hide .admin__page-nav-title-messages,.admin__page-nav._collapsed._hide .admin__page-nav-title-messages ._active{display:inline-block}.admin__page-nav+._collapsed{border-bottom:none;border-top:none}.admin__page-nav-title{border-bottom:1px solid #e3e3e3;color:#303030;display:block;font-size:1.4rem;line-height:1.2;margin:0 0 -1px;padding:1.8rem 1.5rem;position:relative;text-transform:uppercase}.admin__page-nav-title._collapsible{background:#fff;cursor:pointer;margin:0;padding-right:3.5rem;transition:border-color .1s ease-out,background-color .1s ease-out}.admin__page-nav-title._collapsible+.admin__page-nav-items{display:none;margin-top:-1px}.admin__page-nav-title._collapsible:after{content:'\e628';font-size:1.3rem;font-weight:700;position:absolute;right:1.8rem;top:2rem}.admin__page-nav-title._collapsible:hover{background:#f1f1f1}.admin__page-nav-title._collapsible:last-child{margin:0 0 -1px}.admin__page-nav-title strong{font-weight:700}.admin__page-nav-title .admin__page-nav-title-messages{display:none}.admin__page-nav-items{list-style-type:none;margin:0;padding:1rem 0 1.3rem}.admin__page-nav-item{border-left:3px solid transparent;margin-left:.7rem;padding:0;position:relative;transition:border-color .1s ease-out,background-color .1s ease-out}.admin__page-nav-item:hover{border-color:#e4e4e4}.admin__page-nav-item:hover .admin__page-nav-link{background:#e4e4e4;color:#303030;text-decoration:none}.admin__page-nav-item._active,.admin__page-nav-item.ui-state-active{border-color:#eb5202}.admin__page-nav-item._active .admin__page-nav-link,.admin__page-nav-item.ui-state-active .admin__page-nav-link{background:#fff;border-color:#e3e3e3;border-right:1px solid #fff;color:#303030;margin-right:-1px;font-weight:600}.admin__page-nav-item._loading:before,.admin__page-nav-item.ui-tabs-loading:before{display:none}.admin__page-nav-item._loading .admin__page-nav-item-message-loader,.admin__page-nav-item.ui-tabs-loading .admin__page-nav-item-message-loader{display:inline-block}.admin__page-nav-link{border:1px solid transparent;border-width:1px 0;color:#303030;display:block;font-weight:500;line-height:1.2;margin:0 0 -1px;padding:2rem 4rem 2rem 1rem;transition:border-color .1s ease-out,background-color .1s ease-out;word-wrap:break-word}.admin__page-nav-item-messages,.admin__page-nav-link._changed .admin__page-nav-item-message._changed,.admin__page-nav-link._error .admin__page-nav-item-message._error{display:inline-block}.admin__page-nav-item-messages .admin__page-nav-item-message{position:relative}.admin__page-nav-item-messages .admin__page-nav-item-message:hover{z-index:500}.admin__page-nav-item-messages .admin__page-nav-item-message:hover .admin__page-nav-item-message-tooltip{display:block}.admin__page-nav-item-messages .admin__page-nav-item-message._changed,.admin__page-nav-item-messages .admin__page-nav-item-message._error{display:none}.admin__page-nav-item-messages .admin__page-nav-item-message._changed .admin__page-nav-item-message-icon,.admin__page-nav-item-messages .admin__page-nav-item-message._error .admin__page-nav-item-message-icon{display:inline-block;font-size:1.4rem;padding-left:.8em;vertical-align:top}.admin__page-nav-item-messages .admin__page-nav-item-message._changed .admin__page-nav-item-message-icon:after,.admin__page-nav-item-messages .admin__page-nav-item-message._error .admin__page-nav-item-message-icon:after{color:#666;content:'\e631'}.admin__page-nav-item-messages .admin__page-nav-item-message._error .admin__page-nav-item-message-icon:after{color:#eb5202;content:'\e623'}.admin__page-nav-item-messages .admin__page-nav-item-message-loader{display:none;margin-top:-1rem;position:absolute;right:0;top:50%}.admin__page-nav-item-messages .admin__page-nav-item-message-loader .spinner{font-size:2rem;margin-right:1.5rem}.admin__page-nav-item-messages .admin__page-nav-item-message-tooltip{background:#f1f1f1;border:1px solid #f1f1f1;border-radius:1px;bottom:3.7rem;box-shadow:0 3px 9px 0 rgba(0,0,0,.3);display:none;font-weight:400;left:-1rem;line-height:1.36;padding:2rem;position:absolute;text-transform:none;width:27rem;word-break:normal;z-index:2}.admin__page-nav-item-messages .admin__page-nav-item-message-tooltip:after,.admin__page-nav-item-messages .admin__page-nav-item-message-tooltip:before{border:15px solid transparent;height:0;width:0;border-top-color:#f1f1f1;content:'';display:block;left:2rem;position:absolute;top:100%;z-index:3}.admin__page-nav-item-messages .admin__page-nav-item-message-tooltip:after{border-top-color:#f1f1f1;margin-top:-1px;z-index:4}.admin__page-nav-item-messages .admin__page-nav-item-message-tooltip:before{border-top-color:#bfbfbf}.admin__data-grid-wrap-static .data-grid{box-sizing:border-box}.admin__data-grid-wrap-static .data-grid thead{color:#333}.admin__data-grid-wrap-static .data-grid tr:nth-child(even) td{background-color:#f5f5f5}.admin__data-grid-wrap-static .data-grid tr:nth-child(even) td._dragging{background-color:rgba(245,245,245,.95)}.admin__data-grid-wrap-static .data-grid ul{padding-left:1rem;margin-left:1rem}.admin__data-grid-wrap-static .admin__data-grid-loading-mask{background:rgba(255,255,255,.5);bottom:0;left:0;position:absolute;right:0;top:0;z-index:401}.admin__data-grid-wrap-static .admin__data-grid-loading-mask .grid-loader{background:url(../images/loader-2.gif) 50% 50% no-repeat;bottom:0;height:149px;left:0;margin:auto;position:absolute;right:0;top:0;width:218px}.data-grid-filters-actions-wrap{float:right}.data-grid-search-control-wrap{float:left;max-width:45.5rem;position:relative;width:50%}.data-grid-search-control-wrap :-ms-input-placeholder{font-style:italic}.data-grid-search-control-wrap ::-webkit-input-placeholder{font-style:italic}.data-grid-search-control-wrap ::-moz-placeholder{font-style:italic}.data-grid-search-control-wrap .action-submit{background-color:transparent;border:none;border-radius:0;box-shadow:none;margin:0;padding:.6rem 2rem .2rem;position:absolute;right:0;top:1px}.data-grid-search-control-wrap .action-submit:hover{background-color:transparent;border:none;box-shadow:none}.data-grid-search-control-wrap .action-submit:active{-webkit-transform:scale(0.9);-ms-transform:scale(0.9);transform:scale(0.9)}.data-grid-search-control-wrap .action-submit:hover:before{color:#1a1a1a}._keyfocus .data-grid-search-control-wrap .action-submit:focus{box-shadow:0 0 0 1px #008bdb}.data-grid-search-control-wrap .action-submit:before{content:'\e60c';font-size:2rem;transition:color .1s linear}.data-grid-search-control-wrap .action-submit>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.data-grid-search-control-wrap .abs-action-menu .action-submenu,.data-grid-search-control-wrap .abs-action-menu .action-submenu .action-submenu,.data-grid-search-control-wrap .action-menu,.data-grid-search-control-wrap .action-menu .action-submenu,.data-grid-search-control-wrap .actions-split .action-menu .action-submenu,.data-grid-search-control-wrap .actions-split .action-menu .action-submenu .action-submenu,.data-grid-search-control-wrap .actions-split .dropdown-menu .action-submenu,.data-grid-search-control-wrap .actions-split .dropdown-menu .action-submenu .action-submenu{z-index:400;max-height:19.25rem;overflow-y:auto}.data-grid-search-control-wrap .action-menu-item._selected{background-color:#e0f6fe}.data-grid-search-control-wrap .data-grid-search-label{display:none}.data-grid-search-control{padding-right:6rem;width:100%}.data-grid-filters-action-wrap{float:left;padding-left:2rem}.data-grid-filters-action-wrap .action-default{font-size:1.3rem;margin-bottom:1rem;padding-left:1.7rem;padding-right:2.1rem;padding-top:.7rem}.data-grid-filters-action-wrap .action-default._active{background-color:#fff;border-bottom-color:#fff;border-right-color:#ccc;font-weight:600;margin:-.1rem 0 0;padding-bottom:1.6rem;padding-top:.8rem;position:relative;z-index:281}.data-grid-filters-action-wrap .action-default._active:after{background-color:#eb5202;bottom:100%;content:'';height:3px;left:-1px;position:absolute;right:-1px}.data-grid-filters-action-wrap .action-default:before{color:#333;content:'\e605';font-size:1.8rem;margin-right:.4rem;position:relative;top:-1px;vertical-align:top}.data-grid-filters-action-wrap .filters-active{display:none}.admin__data-grid-filters-wrap{opacity:0;visibility:hidden;clear:both;font-size:1.3rem;transition:opacity .3s ease}.admin__data-grid-filters-wrap._show{opacity:1;visibility:visible;border-bottom:1px solid #ccc;border-top:1px solid #ccc;margin-bottom:.7rem;padding:3.6rem 0 3rem;position:relative;top:-1px;z-index:280}.admin__data-grid-filters-wrap._show .admin__data-grid-filters,.admin__data-grid-filters-wrap._show .admin__data-grid-filters-footer{display:block}.admin__data-grid-filters-wrap .admin__form-field-label,.admin__data-grid-filters-wrap .admin__form-field-legend{display:block;font-weight:700;margin:0 0 .3rem;text-align:left}.admin__data-grid-filters-wrap .admin__form-field{display:inline-block;margin-bottom:2em;margin-left:0;padding-left:2rem;padding-right:2rem;vertical-align:top;width:calc(100% / 4 - 4px)}.admin__data-grid-filters-wrap .admin__form-field .admin__form-field{display:block;float:none;margin-bottom:1.5rem;padding-left:0;padding-right:0;width:auto}.admin__data-grid-filters-wrap .admin__form-field .admin__form-field:last-child{margin-bottom:0}.admin__data-grid-filters-wrap .admin__form-field .admin__form-field .admin__form-field-label{border:1px solid transparent;float:left;font-weight:400;line-height:1.36;margin-bottom:0;padding-bottom:.6rem;padding-right:1em;padding-top:.6rem;width:25%}.admin__data-grid-filters-wrap .admin__form-field .admin__form-field .admin__form-field-control{margin-left:25%}.admin__data-grid-filters-wrap .admin__action-multiselect,.admin__data-grid-filters-wrap .admin__control-select,.admin__data-grid-filters-wrap .admin__control-text,.admin__data-grid-filters-wrap .admin__form-field-label{font-size:1.3rem}.admin__data-grid-filters-wrap .admin__control-select{padding-top:.5rem;height:3.2rem}.admin__data-grid-filters-wrap .admin__control-select,.admin__data-grid-filters-wrap .admin__control-text.hasDatepicker{width:100%}.admin__data-grid-filters{display:none;margin-left:-2rem;margin-right:-2rem}.admin__filters-legend{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.admin__data-grid-filters-footer{display:none;font-size:1.4rem}.admin__data-grid-filters-footer .admin__footer-main-actions{margin-left:25%;text-align:right}.admin__data-grid-filters-footer .admin__footer-secondary-actions{float:left;width:50%}.admin__data-grid-filters-current{border-bottom:.1rem solid #ccc;border-top:.1rem solid #ccc;display:none;font-size:1.3rem;margin-bottom:.9rem;padding-bottom:.8rem;padding-top:1.1rem;width:100%}.admin__data-grid-filters-current._show{display:table;position:relative;top:-1px;z-index:3}.admin__data-grid-filters-current._show+.admin__data-grid-filters-wrap._show{margin-top:-1rem}.admin__current-filters-actions-wrap,.admin__current-filters-list-wrap,.admin__current-filters-title-wrap{display:table-cell;vertical-align:top}.admin__current-filters-title{margin-right:1em;white-space:nowrap}.admin__current-filters-list-wrap{width:100%}.admin__current-filters-list{margin-bottom:0}.admin__current-filters-list>li{display:inline-block;font-weight:600;margin:0 1rem .5rem;padding-right:2.6rem;position:relative}.admin__current-filters-list .action-remove{background-color:transparent;border:none;border-radius:0;box-shadow:none;margin:0;padding:0;line-height:1;position:absolute;right:0;top:1px}.admin__current-filters-list .action-remove:hover{background-color:transparent;border:none;box-shadow:none}.admin__current-filters-list .action-remove:hover:before{color:#949494}.admin__current-filters-list .action-remove:active{-webkit-transform:scale(0.9);-ms-transform:scale(0.9);transform:scale(0.9)}.admin__current-filters-list .action-remove:before{color:#adadad;content:'\e620';font-size:1.6rem;transition:color .1s linear}.admin__current-filters-list .action-remove>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.admin__current-filters-actions-wrap .action-clear{border:none;padding-bottom:0;padding-top:0;white-space:nowrap}.admin__data-grid-pager-wrap{text-align:right}.admin__data-grid-pager{display:inline-block;margin-left:3rem}.admin__data-grid-pager .admin__control-text::-webkit-inner-spin-button,.admin__data-grid-pager .admin__control-text::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.admin__data-grid-pager .admin__control-text{-moz-appearance:textfield;text-align:center;width:4.4rem}.action-next,.action-previous{width:4.4rem}.action-next:before,.action-previous:before{font-weight:700}.action-next>span,.action-previous>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.action-previous{margin-right:2.5rem;text-indent:-.25em}.action-previous:before{content:'\e629'}.action-next{margin-left:1.5rem;text-indent:.1em}.action-next:before{content:'\e62a'}.admin__data-grid-action-bookmarks{opacity:.98}.admin__data-grid-action-bookmarks .admin__action-dropdown-text:after{right:-6px;left:0}.admin__data-grid-action-bookmarks._active{z-index:290}.admin__data-grid-action-bookmarks .admin__action-dropdown .admin__action-dropdown-text{display:inline-block;max-width:15rem;min-width:4.9rem;vertical-align:top;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.admin__data-grid-action-bookmarks .admin__action-dropdown:before{content:'\e60f'}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu{font-size:1.3rem;left:0;padding:1rem 0;right:auto}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu>li{padding:0 5rem 0 0;position:relative;white-space:nowrap}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu>li:not(.action-dropdown-menu-action){transition:background-color .1s linear}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu>li:not(.action-dropdown-menu-action):hover{background-color:#e3e3e3}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-item{max-width:23rem;min-width:18rem;white-space:normal;word-break:break-all}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-item-edit{display:none;padding-bottom:1rem;padding-left:1rem;padding-top:1rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-item-edit .action-dropdown-menu-item-actions{padding-bottom:1rem;padding-top:1rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-action{padding-left:1rem;padding-top:1rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-action+.action-dropdown-menu-item-last{padding-top:.5rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-action>a{color:#008bdb;text-decoration:none;display:inline-block;padding-left:1.1rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-action>a:hover{color:#0fa7ff;text-decoration:underline}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-item-last{padding-bottom:0}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu ._edit .action-dropdown-menu-item{display:none}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu ._edit .action-dropdown-menu-item-edit{display:block}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu ._active .action-dropdown-menu-link{font-weight:600}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .admin__control-text{font-size:1.3rem;min-width:15rem;width:calc(100% - 4rem)}.ie9 .admin__data-grid-action-bookmarks .admin__action-dropdown-menu .admin__control-text{width:15rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-item-actions{border-left:1px solid #fff;bottom:0;position:absolute;right:0;top:0;width:5rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-link{color:#333;display:block;text-decoration:none;padding:1rem 1rem 1rem 2.1rem}.admin__data-grid-action-bookmarks .action-delete,.admin__data-grid-action-bookmarks .action-edit,.admin__data-grid-action-bookmarks .action-submit{background-color:transparent;border:none;border-radius:0;box-shadow:none;margin:0;vertical-align:top}.admin__data-grid-action-bookmarks .action-delete:hover,.admin__data-grid-action-bookmarks .action-edit:hover,.admin__data-grid-action-bookmarks .action-submit:hover{background-color:transparent;border:none;box-shadow:none}.admin__data-grid-action-bookmarks .action-delete:before,.admin__data-grid-action-bookmarks .action-edit:before,.admin__data-grid-action-bookmarks .action-submit:before{font-size:1.7rem}.admin__data-grid-action-bookmarks .action-delete>span,.admin__data-grid-action-bookmarks .action-edit>span,.admin__data-grid-action-bookmarks .action-submit>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.admin__data-grid-action-bookmarks .action-delete,.admin__data-grid-action-bookmarks .action-edit{padding:.6rem 1.4rem}.admin__data-grid-action-bookmarks .action-delete:active,.admin__data-grid-action-bookmarks .action-edit:active{-webkit-transform:scale(0.9);-ms-transform:scale(0.9);transform:scale(0.9)}.admin__data-grid-action-bookmarks .action-submit{padding:.6rem 1rem .6rem .8rem}.admin__data-grid-action-bookmarks .action-submit:active{position:relative;right:-1px}.admin__data-grid-action-bookmarks .action-submit:before{content:'\e625'}.admin__data-grid-action-bookmarks .action-delete:before{content:'\e630'}.admin__data-grid-action-bookmarks .action-edit{padding-top:.8rem}.admin__data-grid-action-bookmarks .action-edit:before{content:'\e631'}.admin__data-grid-action-columns._active{opacity:.98;z-index:290}.admin__data-grid-action-columns .admin__action-dropdown:before{content:'\e60e';font-size:1.8rem;margin-right:.7rem;vertical-align:top}.admin__data-grid-action-columns-menu{color:#303030;font-size:1.3rem;overflow:hidden;padding:2.2rem 3.5rem 1rem;z-index:1}.admin__data-grid-action-columns-menu._overflow .admin__action-dropdown-menu-header{border-bottom:1px solid #d1d1d1}.admin__data-grid-action-columns-menu._overflow .admin__action-dropdown-menu-content{width:49.2rem}.admin__data-grid-action-columns-menu._overflow .admin__action-dropdown-menu-footer{border-top:1px solid #d1d1d1;padding-top:2.5rem}.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-content{max-height:22.85rem;overflow-y:auto;padding-top:1.5rem;position:relative;width:47.4rem}.admin__data-grid-action-columns-menu .admin__field-option{height:1.9rem;float:left;margin-bottom:1.5rem;padding:0 1rem 0 0;width:15.8rem}.admin__data-grid-action-columns-menu .admin__field-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block}.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-header{padding-bottom:1.5rem}.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-footer{padding:1rem 0 2rem}.admin__data-grid-action-columns-menu .admin__action-dropdown-footer-main-actions{margin-left:25%;text-align:right}.admin__data-grid-action-columns-menu .admin__action-dropdown-footer-secondary-actions{float:left;margin-left:-1em}.admin__data-grid-action-export._active{opacity:.98;z-index:290}.admin__data-grid-action-export .admin__action-dropdown:before{content:'\e635';font-size:1.7rem;left:.3rem;margin-right:.7rem;vertical-align:top}.admin__data-grid-action-export-menu{padding-left:2rem;padding-right:2rem;padding-top:1rem}.admin__data-grid-action-export-menu .admin__action-dropdown-footer-main-actions{padding-bottom:2rem;padding-top:2.5rem;white-space:nowrap}.sticky-header{background-color:#f8f8f8;border-bottom:1px solid #e3e3e3;box-shadow:0 5px 5px 0 rgba(0,0,0,.25);left:8.8rem;right:0;margin-top:-1px;padding:.5rem 3rem 0;position:fixed;top:77px;z-index:400}.sticky-header .admin__data-grid-wrap{margin-bottom:0;overflow-x:visible;padding-bottom:0}.sticky-header .admin__data-grid-header-row{position:relative;text-align:right}.sticky-header .admin__data-grid-header-row:last-child{margin:0}.sticky-header .admin__data-grid-actions-wrap,.sticky-header .admin__data-grid-filters-wrap,.sticky-header .admin__data-grid-pager-wrap,.sticky-header .data-grid-filters-actions-wrap,.sticky-header .data-grid-search-control-wrap{display:inline-block;float:none;vertical-align:top}.sticky-header .action-select-wrap{float:left;margin-right:1.5rem;width:16.66666667%}.sticky-header .admin__control-support-text{float:left}.sticky-header .data-grid-search-control-wrap{margin:-.5rem 0 0 1.1rem;width:auto}.sticky-header .data-grid-search-control-wrap .data-grid-search-label{box-sizing:border-box;cursor:pointer;display:block;min-width:3.8rem;padding:1.2rem .6rem 1.7rem;position:relative;text-align:center}.sticky-header .data-grid-search-control-wrap .data-grid-search-label:before{color:#333;content:'\e60c';font-size:2rem;transition:color .1s linear}.sticky-header .data-grid-search-control-wrap .data-grid-search-label:hover:before{color:#000}.sticky-header .data-grid-search-control-wrap .data-grid-search-label span{display:none}.sticky-header .data-grid-filters-actions-wrap{margin:-.5rem 0 0 1.1rem;padding-left:0;position:relative}.sticky-header .data-grid-filters-actions-wrap .action-default{background-color:transparent;border:1px solid transparent;box-sizing:border-box;min-width:3.8rem;padding:1.2rem .6rem 1.7rem;text-align:center;transition:all .15s ease}.sticky-header .data-grid-filters-actions-wrap .action-default span{display:none}.sticky-header .data-grid-filters-actions-wrap .action-default:before{margin:0}.sticky-header .data-grid-filters-actions-wrap .action-default._active{background-color:#fff;border-color:#adadad #adadad #fff;box-shadow:1px 1px 5px rgba(0,0,0,.5);z-index:210}.sticky-header .data-grid-filters-actions-wrap .action-default._active:after{background-color:#fff;content:'';height:6px;left:-2px;position:absolute;right:-6px;top:100%}.sticky-header .data-grid-filters-action-wrap{padding:0}.sticky-header .admin__data-grid-filters-wrap{background-color:#fff;border:1px solid #adadad;box-shadow:0 5px 5px 0 rgba(0,0,0,.25);left:0;padding-left:3.5rem;padding-right:3.5rem;position:absolute;top:100%;width:100%;z-index:209}.sticky-header .admin__data-grid-filters-current+.admin__data-grid-filters-wrap._show{margin-top:-6px}.sticky-header .filters-active{background-color:#e04f00;border-radius:10px;color:#fff;display:block;font-size:1.4rem;font-weight:700;padding:.1rem .7rem;position:absolute;right:-7px;top:0;z-index:211}.sticky-header .filters-active:empty{padding-top:0;padding-bottom:0}.sticky-header .admin__data-grid-actions-wrap{margin:-.5rem 0 0 1.1rem;padding-right:.3rem}.sticky-header .admin__data-grid-actions-wrap .admin__action-dropdown{background-color:transparent;box-sizing:border-box;min-width:3.8rem;padding-left:.6rem;padding-right:.6rem;text-align:center}.sticky-header .admin__data-grid-actions-wrap .admin__action-dropdown .admin__action-dropdown-text{display:inline-block;min-width:0;max-width:0;overflow:hidden}.sticky-header .admin__data-grid-actions-wrap .admin__action-dropdown:before{margin:0}.sticky-header .admin__data-grid-actions-wrap .admin__action-dropdown-wrap{margin-right:1.1rem}.sticky-header .admin__data-grid-actions-wrap .admin__action-dropdown-wrap:after,.sticky-header .admin__data-grid-actions-wrap .admin__action-dropdown:after{display:none}.sticky-header .admin__data-grid-actions-wrap ._active .admin__action-dropdown{background-color:#fff}.sticky-header .admin__data-grid-action-bookmarks .admin__action-dropdown:before{position:relative;top:-3px}.sticky-header .admin__data-grid-filters-current{border-top:0;border-bottom:0;margin-bottom:0;padding-bottom:0;padding-top:0}.sticky-header .admin__data-grid-pager .admin__control-text,.sticky-header .admin__data-grid-pager-wrap .admin__control-support-text,.sticky-header .data-grid-search-control-wrap .action-submit,.sticky-header .data-grid-search-control-wrap .data-grid-search-control{display:none}.sticky-header .action-next{margin:0}.sticky-header .data-grid{margin-bottom:-1px}.data-grid-cap-left,.data-grid-cap-right{background-color:#f8f8f8;bottom:-2px;position:absolute;top:6rem;width:3rem;z-index:201}.data-grid-cap-left{left:0}.data-grid-cap-right{right:0}.admin__data-grid-header{font-size:1.4rem}.admin__data-grid-header-row+.admin__data-grid-header-row{margin-top:1.1rem}.admin__data-grid-header-row:last-child{margin-bottom:0}.admin__data-grid-header-row .action-select-wrap{display:block}.admin__data-grid-header-row .action-select{width:100%}.admin__data-grid-actions-wrap{float:right;margin-left:1.1rem;margin-top:-.5rem;text-align:right}.admin__data-grid-actions-wrap .admin__action-dropdown-wrap{position:relative;text-align:left}.admin__data-grid-actions-wrap .admin__action-dropdown-wrap._active+.admin__action-dropdown-wrap:after,.admin__data-grid-actions-wrap .admin__action-dropdown-wrap._active:after,.admin__data-grid-actions-wrap .admin__action-dropdown-wrap._hide+.admin__action-dropdown-wrap:after,.admin__data-grid-actions-wrap .admin__action-dropdown-wrap:first-child:after{display:none}.admin__data-grid-actions-wrap .admin__action-dropdown-wrap._active .admin__action-dropdown,.admin__data-grid-actions-wrap .admin__action-dropdown-wrap._active .admin__action-dropdown-menu{border-color:#adadad}.admin__data-grid-actions-wrap .admin__action-dropdown-wrap:after{border-left:1px solid #ccc;content:'';height:3.2rem;left:0;position:absolute;top:.5rem;z-index:3}.admin__data-grid-actions-wrap .admin__action-dropdown{padding-bottom:1.7rem;padding-top:1.2rem}.admin__data-grid-actions-wrap .admin__action-dropdown:after{margin-top:-.4rem}.admin__data-grid-outer-wrap{min-height:8rem;position:relative}.admin__data-grid-wrap{margin-bottom:2rem;max-width:100%;overflow-x:auto;padding-bottom:1rem;padding-top:2rem}.admin__data-grid-loading-mask{background:rgba(255,255,255,.5);bottom:0;left:-3rem;position:absolute;right:-3rem;top:0;z-index:401}.admin__data-grid-loading-mask .spinner{font-size:4rem;left:50%;margin-left:-2rem;margin-top:-2rem;position:absolute;top:50%}.ie9 .admin__data-grid-loading-mask .spinner{background:url(../images/loader-2.gif) 50% 50% no-repeat;bottom:0;height:149px;left:0;margin:auto;position:absolute;right:0;top:0;width:218px}.data-grid-cell-content{overflow:hidden;width:100%;display:inline-block}body._in-resize{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:col-resize}body._in-resize *,body._in-resize .data-grid-th,body._in-resize .data-grid-th._draggable,body._in-resize .data-grid-th._sortable{cursor:col-resize!important}._layout-fixed{table-layout:fixed}.data-grid{border:none;font-size:1.3rem;margin-bottom:0;max-width:100%;width:100%}.data-grid:not(._dragging-copy) ._odd-row td._dragging{background-color:#d0d0d0}.data-grid:not(._dragging-copy) ._dragging{background-color:#d9d9d9;color:rgba(48,48,48,.95)}.data-grid:not(._dragging-copy) ._dragging a{color:rgba(0,139,219,.95)}.data-grid:not(._dragging-copy) ._dragging a:hover{color:rgba(15,167,255,.95)}.data-grid thead{background-color:transparent}.data-grid tfoot th{padding:1rem}.data-grid tr._odd-row td{background-color:#f5f5f5}.data-grid tr.data-grid-tr-no-data:hover td{background-color:#fff;cursor:default}.data-grid tr:active td{background-color:#e0f6fe}.data-grid tr:hover td{background-color:#e5f7fe}.data-grid tr:not(.data-grid-editable-row):last-child td{border-bottom:.1rem solid #d6d6d6}.data-grid tr ._clickable,.data-grid tr._clickable{cursor:pointer}.data-grid td,.data-grid th{font-size:1.3rem;line-height:1.36;transition:background-color .1s linear;vertical-align:top}.data-grid td._resizing,.data-grid th._resizing{border-left:1px solid #007bdb;border-right:1px solid #007bdb}.data-grid td{background-color:#fff;border-left:.1rem dashed #d6d6d6;border-right:.1rem dashed #d6d6d6;color:#303030;padding:1rem}.data-grid td:first-child{border-left-style:solid}.data-grid td:last-child{border-right-style:solid}.data-grid td .action-select-wrap{position:static}.data-grid td .action-select{background-color:transparent;border:none;font-size:1.3rem;position:relative;color:#008bdb;text-decoration:none;padding:0 3rem 0 0}.data-grid td .action-select:hover{color:#0fa7ff;text-decoration:underline}.data-grid td .action-select:hover:after{border-color:#0fa7ff transparent transparent}.data-grid td .action-select:after{border-color:#008bdb transparent transparent;margin:.6rem 0 0 .7rem;right:auto;top:auto}.data-grid td .action-select:before{display:none}.data-grid td .abs-action-menu .action-submenu,.data-grid td .abs-action-menu .action-submenu .action-submenu,.data-grid td .action-menu,.data-grid td .action-menu .action-submenu,.data-grid td .actions-split .action-menu .action-submenu,.data-grid td .actions-split .action-menu .action-submenu .action-submenu,.data-grid td .actions-split .dropdown-menu .action-submenu,.data-grid td .actions-split .dropdown-menu .action-submenu .action-submenu{left:auto;min-width:10rem;right:0;text-align:left;top:auto;z-index:1}.data-grid th{background-color:#514943;border:.1rem solid #8a837f;border-left-color:transparent;color:#fff;font-weight:600;padding:0;text-align:left}.data-grid th:first-child{border-left-color:#8a837f}.data-grid th._dragover-left{box-shadow:inset 3px 0 0 0 #fff;z-index:2}.data-grid th._dragover-right{box-shadow:inset -3px 0 0 0 #fff}.data-grid .shadow-div{cursor:col-resize;height:100%;margin-right:-5px;position:absolute;right:0;top:0;width:10px}.data-grid .data-grid-th{background-clip:padding-box;color:#fff;padding:1rem;position:relative;vertical-align:middle}.data-grid .data-grid-th._resize-visible .shadow-div{cursor:auto;display:none}.data-grid .data-grid-th._draggable{cursor:-webkit-grab;cursor:grab}.data-grid .data-grid-th._sortable{cursor:pointer;transition:background-color .1s linear;z-index:1}.data-grid .data-grid-th._sortable:focus,.data-grid .data-grid-th._sortable:hover{background-color:#5f564f}.data-grid .data-grid-th._sortable:active{padding-bottom:.9rem;padding-top:1.1rem}.data-grid .data-grid-th.required>span:after{color:#f38a5e;content:'*';margin-left:.3rem}.data-grid .data-grid-checkbox-cell{padding:0;vertical-align:top;width:5.2rem}.data-grid .data-grid-checkbox-cell:hover{cursor:default}.data-grid .data-grid-thumbnail-cell{text-align:center;width:7rem}.data-grid .data-grid-thumbnail-cell img{border:1px solid #d6d6d6;max-width:5rem}.data-grid .data-grid-multicheck-cell{padding:1rem 1rem .9rem;text-align:center;vertical-align:middle}.data-grid .data-grid-actions-cell{padding-left:2rem;padding-right:2rem;text-align:center;width:1%}.data-grid._hidden{display:none}.data-grid._dragging-copy{box-shadow:1px 1px 5px rgba(0,0,0,.5);left:0;opacity:.95;position:fixed;top:0;z-index:1000}.data-grid._dragging-copy .data-grid-th{border:1px solid #007bdb;border-bottom:none}.data-grid._dragging-copy .data-grid-th,.data-grid._dragging-copy .data-grid-th._sortable{cursor:-webkit-grabbing;cursor:grabbing}.data-grid._dragging-copy tr:last-child td{border-bottom:1px solid #007bdb}.data-grid._dragging-copy td{border-left:1px solid #007bdb;border-right:1px solid #007bdb}.data-grid._dragging-copy._in-edit .data-grid-editable-row.data-grid-bulk-edit-panel td,.data-grid._dragging-copy._in-edit .data-grid-editable-row.data-grid-bulk-edit-panel td:before,.data-grid._dragging-copy._in-edit .data-grid-editable-row.data-grid-bulk-edit-panel:hover td{background-color:rgba(255,251,230,.95)}.data-grid._dragging-copy._in-edit .data-grid-editable-row td,.data-grid._dragging-copy._in-edit .data-grid-editable-row:hover td{background-color:rgba(255,255,255,.95)}.data-grid._dragging-copy._in-edit .data-grid-editable-row td:after,.data-grid._dragging-copy._in-edit .data-grid-editable-row td:before{left:0;right:0}.data-grid._dragging-copy._in-edit .data-grid-editable-row td:before{background-color:rgba(255,255,255,.95)}.data-grid._dragging-copy._in-edit .data-grid-editable-row td:only-child{border-left:1px solid #007bdb;border-right:1px solid #007bdb;left:0}.data-grid._dragging-copy._in-edit .data-grid-editable-row .admin__control-select,.data-grid._dragging-copy._in-edit .data-grid-editable-row .admin__control-text{opacity:.5}.data-grid._in-edit tr:hover td{background-color:#e6e6e6}.data-grid._in-edit ._odd-row.data-grid-editable-row td,.data-grid._in-edit ._odd-row.data-grid-editable-row:hover td{background-color:#fff}.data-grid._in-edit ._odd-row td,.data-grid._in-edit ._odd-row:hover td{background-color:#dcdcdc}.data-grid._in-edit .data-grid-editable-row-actions td,.data-grid._in-edit .data-grid-editable-row-actions:hover td{background-color:#fff}.data-grid._in-edit td{background-color:#e6e6e6;pointer-events:none}.data-grid._in-edit .data-grid-checkbox-cell{pointer-events:auto}.data-grid._in-edit .data-grid-editable-row{border:.1rem solid #adadad;border-bottom-color:#c2c2c2}.data-grid._in-edit .data-grid-editable-row:hover td{background-color:#fff}.data-grid._in-edit .data-grid-editable-row td{background-color:#fff;border-bottom-color:#fff;border-left-style:hidden;border-right-style:hidden;border-top-color:#fff;pointer-events:auto;vertical-align:middle}.data-grid._in-edit .data-grid-editable-row td:first-child{border-left-color:#adadad;border-left-style:solid}.data-grid._in-edit .data-grid-editable-row td:first-child:after,.data-grid._in-edit .data-grid-editable-row td:first-child:before{left:0}.data-grid._in-edit .data-grid-editable-row td:last-child{border-right-color:#adadad;border-right-style:solid;left:-.1rem}.data-grid._in-edit .data-grid-editable-row td:last-child:after,.data-grid._in-edit .data-grid-editable-row td:last-child:before{right:0}.data-grid._in-edit .data-grid-editable-row .admin__control-select,.data-grid._in-edit .data-grid-editable-row .admin__control-text{width:100%}.data-grid._in-edit .data-grid-bulk-edit-panel td{vertical-align:bottom}.data-grid .data-grid-editable-row td{border-left-color:#fff;border-left-style:solid;position:relative;z-index:1}.data-grid .data-grid-editable-row td:after{bottom:0;box-shadow:0 5px 5px rgba(0,0,0,.25);content:'';height:.9rem;left:0;margin-top:-1rem;position:absolute;right:0}.data-grid .data-grid-editable-row td:before{background-color:#fff;bottom:0;content:'';height:1rem;left:-10px;position:absolute;right:-10px;z-index:1}.data-grid .data-grid-editable-row.data-grid-editable-row-actions td,.data-grid .data-grid-editable-row.data-grid-editable-row-actions:hover td{background-color:#fff}.data-grid .data-grid-editable-row.data-grid-editable-row-actions td:first-child{border-left-color:#fff;border-right-color:#fff}.data-grid .data-grid-editable-row.data-grid-editable-row-actions td:last-child{left:0}.data-grid .data-grid-editable-row.data-grid-bulk-edit-panel td,.data-grid .data-grid-editable-row.data-grid-bulk-edit-panel td:before,.data-grid .data-grid-editable-row.data-grid-bulk-edit-panel:hover td{background-color:#fffbe6}.data-grid .data-grid-editable-row-actions{left:50%;margin-left:-12.5rem;margin-top:-2px;position:absolute;text-align:center}.data-grid .data-grid-editable-row-actions td{width:25rem}.data-grid .data-grid-editable-row-actions [class*=action-]{min-width:9rem}.data-grid-th._sortable._ascend,.data-grid-th._sortable._descend{padding-right:2.7rem}.data-grid-th._sortable._ascend:before,.data-grid-th._sortable._descend:before{margin-top:-1em;position:absolute;right:1rem;top:50%}.data-grid-th._sortable._ascend:before{content:'\2193'}.data-grid-th._sortable._descend:before{content:'\2191'}.data-grid-checkbox-cell-inner{display:block;padding:1.1rem 1.8rem .9rem;text-align:right}.data-grid-checkbox-cell-inner:hover{cursor:pointer}.data-grid-row-parent._active>td .data-grid-checkbox-cell-inner:before{content:'\e62b'}.data-grid-row-parent>td .data-grid-checkbox-cell-inner{padding-left:3.7rem;position:relative}.data-grid-row-parent>td .data-grid-checkbox-cell-inner:before{content:'\e628';font-size:1rem;font-weight:700;left:1.35rem;position:absolute;top:1.6rem}.data-grid-th._col-xs{width:1%}.data-grid-info-panel{box-shadow:0 0 5px rgba(0,0,0,.5);margin:2rem .1rem -2rem;padding:1rem}.data-grid-info-panel .messages{margin-bottom:1rem}.data-grid-info-panel-actions{text-align:right}.data-grid-editable-row .admin__field-control{position:relative}.data-grid-editable-row .admin__field-control._error:after{border-color:transparent #ee7d7d transparent transparent;border-style:solid;border-width:0 12px 12px 0;content:'';position:absolute;right:0;top:0}.data-grid-editable-row .admin__field-control._error .admin__control-text{border-color:#ee7d7d}.data-grid-editable-row .admin__field-control._focus:after{display:none}.data-grid-editable-row .admin__field-error{bottom:100%;box-shadow:1px 1px 5px rgba(0,0,0,.5);left:0;margin:0 auto 1.5rem;max-width:32rem;position:absolute;right:0}.data-grid-editable-row .admin__field-error:after,.data-grid-editable-row .admin__field-error:before{border-style:solid;content:'';left:50%;position:absolute;top:100%}.data-grid-editable-row .admin__field-error:after{border-color:#fffbbb transparent transparent;border-width:10px 10px 0;margin-left:-10px;z-index:1}.data-grid-editable-row .admin__field-error:before{border-color:#ee7d7d transparent transparent;border-width:11px 12px 0;margin-left:-12px}.data-grid-bulk-edit-panel .admin__field-label-vertical{display:block;font-size:1.2rem;margin-bottom:.5rem;text-align:left}.data-grid-row-changed{cursor:default;display:block;opacity:.5;position:relative;width:100%;z-index:1}.data-grid-row-changed:after{content:'\e631';display:inline-block}.data-grid-row-changed .data-grid-row-changed-tooltip{background:#f1f1f1;border-radius:1px;border:1px solid #f1f1f1;bottom:100%;box-shadow:0 3px 9px 0 rgba(0,0,0,.3);display:none;font-weight:400;line-height:1.36;margin-bottom:1.5rem;padding:1rem;position:absolute;right:-1rem;text-transform:none;width:27rem;word-break:normal;z-index:2}.data-grid-row-changed._changed{opacity:1;z-index:3}.data-grid-row-changed._changed:hover .data-grid-row-changed-tooltip{display:block}.data-grid-row-changed._changed:hover:before{background:#f1f1f1;border:1px solid #f1f1f1;bottom:100%;box-shadow:4px 4px 3px -1px rgba(0,0,0,.15);content:'';display:block;height:1.6rem;left:50%;margin:0 0 .7rem -.8rem;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:1.6rem;z-index:3}.ie9 .data-grid-row-changed._changed:hover:before{display:none}.admin__control-addon [class*=admin__control-][type]+[class*=admin__addon-]:before,.admin__control-file-label :before,.admin__control-multiselect,.admin__control-select,.admin__control-text,.admin__control-textarea,.selectmenu{background-color:#fff;border-radius:1px;border:1px solid #adadad;color:#303030;font-size:1.4rem;font-weight:400;line-height:1.36;height:auto;width:auto;padding:.6rem 1rem;transition:border-color .1s linear;vertical-align:baseline}.admin__control-multiselect:hover,.admin__control-select:hover,.admin__control-text:hover,.admin__control-textarea:hover,.selectmenu:hover,.selectmenu:hover .selectmenu-toggle:before{border-color:#878787}.admin__control-addon [class*=admin__control-][type]:focus+[class*=admin__addon-]:before,.admin__control-file:active+.admin__control-file-label :before,.admin__control-file:focus+.admin__control-file-label :before,.admin__control-multiselect:focus,.admin__control-select:focus,.admin__control-text:focus,.admin__control-textarea:focus,.selectmenu._focus,.selectmenu._focus .selectmenu-toggle:before{border-color:#007bdb;box-shadow:none;outline:0}.admin__control-addon [class*=admin__control-][type][disabled]+[class*=admin__addon-]:before,.admin__control-file[disabled]+.admin__control-file-label :before,.admin__control-multiselect[disabled],.admin__control-select[disabled],.admin__control-text[disabled],.admin__control-textarea[disabled]{background-color:#e9e9e9;border-color:#adadad;color:#303030;opacity:.5;cursor:not-allowed}.admin__fieldset>.admin__field.admin__field-wide[class]>.admin__field-control{float:none;clear:left;text-align:left;width:auto}.admin__fieldset>.admin__field.admin__field-wide[class]:not(.admin__field-option)>.admin__field-label{display:block;line-height:1.4rem;margin-bottom:.86rem;margin-top:-.14rem;text-align:left;width:auto}.admin__fieldset>.admin__field.admin__field-wide[class]:not(.admin__field-option)>.admin__field-label:before{display:none}.admin__fieldset>.admin__field.admin__field-wide[class]:not(.admin__field-option)._required>.admin__field-label span{padding-left:1.5rem}.admin__fieldset>.admin__field.admin__field-wide[class]:not(.admin__field-option)._required>.admin__field-label span:after{left:0;margin-left:30px;top:.2rem}.admin__legend{font-size:1.8rem;font-weight:600;margin-bottom:3rem}.admin__control-checkbox,.admin__control-radio{cursor:pointer;opacity:.01;overflow:hidden;position:absolute;vertical-align:top}.admin__control-checkbox:after,.admin__control-radio:after{display:none}.admin__control-checkbox+label,.admin__control-radio+label{cursor:pointer;display:inline-block}.admin__control-checkbox+label:before,.admin__control-radio+label:before{background-color:#fff;border:1px solid #adadad;color:transparent;float:left;height:1.6rem;text-align:center;vertical-align:top;width:1.6rem}.admin__control-checkbox+.admin__field-label,.admin__control-radio+.admin__field-label{padding-left:2.6rem}.admin__control-checkbox+.admin__field-label:before,.admin__control-radio+.admin__field-label:before{margin:1px 1rem 0 -2.6rem}.admin__control-checkbox:checked+label:before,.admin__control-radio:checked+label:before{color:#514943}.admin__control-checkbox.disabled+label,.admin__control-checkbox[disabled]+label,.admin__control-radio.disabled+label,.admin__control-radio[disabled]+label{cursor:default;color:#303030;opacity:.5}.admin__control-checkbox.disabled+label:before,.admin__control-checkbox[disabled]+label:before,.admin__control-radio.disabled+label:before,.admin__control-radio[disabled]+label:before{background-color:#e9e9e9;border-color:#adadad;cursor:default}._keyfocus .admin__control-checkbox:not(.disabled):focus+label:before,._keyfocus .admin__control-checkbox:not([disabled]):focus+label:before,._keyfocus .admin__control-radio:not(.disabled):focus+label:before,._keyfocus .admin__control-radio:not([disabled]):focus+label:before{border-color:#007bdb}.admin__control-checkbox:not(.disabled):hover+label:before,.admin__control-checkbox:not([disabled]):hover+label:before,.admin__control-radio:not(.disabled):hover+label:before,.admin__control-radio:not([disabled]):hover+label:before{border-color:#878787}.admin__control-radio+label:before{border-radius:1.6rem;content:'\e637';font-size:1rem;transition:border-color .1s linear,color .1s ease-in}.admin__control-radio.admin__control-radio+label:before{line-height:140%}.admin__control-radio:checked:not(.disabled):hover,.admin__control-radio:checked:not(.disabled):hover+label,.admin__control-radio:checked:not([disabled]):hover,.admin__control-radio:checked:not([disabled]):hover+label{cursor:default}.admin__control-radio:checked:not(.disabled):hover+label:before,.admin__control-radio:checked:not([disabled]):hover+label:before{border-color:#adadad}.admin__control-checkbox+label:before{border-radius:1px;content:'';font-size:0;transition:font-size .1s ease-out,color .1s ease-out,border-color .1s linear}.admin__control-checkbox:checked+label:before{content:'\e62d';font-size:1.1rem;line-height:125%}.admin__control-checkbox:not(:checked)._indeterminate+label:before,.admin__control-checkbox:not(:checked):indeterminate+label:before{color:#514943;content:'-';font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.4rem;font-weight:700}input[type=checkbox].admin__control-checkbox,input[type=radio].admin__control-checkbox{position:absolute;margin:0}.admin__control-select{-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;background-repeat:no-repeat;background-image:url(../images/arrows-bg.svg),linear-gradient(#e3e3e3,#e3e3e3),linear-gradient(#adadad,#adadad);background-position:calc(100% - 12px) -34px,100%,calc(100% - 3.2rem) 0;background-size:auto,3.2rem 100%,1px 100%;padding-bottom:.5rem;padding-right:4.4rem;padding-top:.5rem;transition:border-color .1s linear}.admin__control-select:hover{border-color:#878787;cursor:pointer}.admin__control-select:focus{background-image:url(../images/arrows-bg.svg),linear-gradient(#e3e3e3,#e3e3e3),linear-gradient(#007bdb,#007bdb);background-position:calc(100% - 12px) 13px,100%,calc(100% - 3.2rem) 0;border-color:#007bdb}.admin__control-select::-ms-expand{display:none}.ie9 .admin__control-select{background-image:none;padding-right:1rem}option:empty{display:none}.admin__control-multiselect{height:auto;padding:.6rem 1rem}.admin__control-file-wrapper{display:inline-block;padding:.5rem 1rem;position:relative;z-index:1}.admin__control-file-label :before{content:'';left:0;position:absolute;top:0;width:100%;z-index:0}.admin__control-file{position:relative;z-index:1;background:0 0;border:0;width:auto}.admin__control-support-text{border:1px solid transparent;display:inline-block;font-size:1.4rem;line-height:1.36;padding-top:.6rem;padding-bottom:.6rem}.admin__control-support-text+[class*=admin__control-],[class*=admin__control-]+.admin__control-support-text{margin-left:.7rem}.admin__control-textarea{height:8.48rem;line-height:1.18;padding-top:.8rem;resize:vertical}.admin__control-addon{-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;display:inline-flex;-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap;position:relative;width:100%;z-index:1}.admin__control-addon>[class*=admin__addon-],.admin__control-addon>[class*=admin__control-]{-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;position:relative;z-index:1}.admin__control-addon [class*=admin__control-][type]{appearence:none;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;box-shadow:none;background-color:transparent;border-color:transparent;-webkit-order:1;-ms-flex-order:1;order:1;vertical-align:top;width:auto}.admin__control-addon [class*=admin__control-][type] :focus{box-shadow:0}.admin__control-addon [class*=admin__control-][type]+[class*=admin__addon-]{padding-left:1rem;position:static!important;z-index:0}.admin__control-addon [class*=admin__control-][type]+[class*=admin__addon-]>*{position:relative;vertical-align:top;z-index:2}.admin__control-addon [class*=admin__control-][type]+[class*=admin__addon-]:before{bottom:0;box-sizing:border-box;content:'';left:0;position:absolute;top:0;width:100%;z-index:0}.admin__addon-prefix,.admin__addon-suffix{border:0;box-sizing:border-box;color:#858585;display:inline-block;font-size:1.4rem;font-weight:400;height:3.2rem;line-height:3.2rem;padding:0}.admin__addon-suffix{-webkit-order:3;-ms-flex-order:3;order:3}.admin__addon-suffix:last-child{padding-right:1rem}.admin__addon-prefix{-webkit-order:0;-ms-flex-order:0;order:0}.ie9 .admin__control-addon:after{clear:both;content:'';display:block;height:0;overflow:hidden}.ie9 .admin__addon{min-width:0;overflow:hidden;text-align:right;white-space:nowrap;width:auto}.ie9 .admin__addon [class*=admin__control-]{display:inline}.ie9 .admin__addon-prefix{float:left}.ie9 .admin__addon-suffix{float:right}.admin__control-table-wrapper{max-width:100%;overflow-x:auto;overflow-y:hidden}.admin__control-table{width:100%}.admin__control-table thead{background-color:transparent}.admin__control-table tbody td{vertical-align:middle}.admin__control-table tfoot th{padding-bottom:1.3rem}.admin__control-table tr:last-child td,.admin__control-table tr:last-child th{border-bottom:none}.admin__control-table td,.admin__control-table th{background-color:#efefef;border:0;border-bottom:1px solid #fff;padding:1.3rem 2.5rem 1.3rem 0;text-align:left;vertical-align:top}.admin__control-table td:first-child,.admin__control-table th:first-child{padding-left:1.5rem}.admin__control-table th{border:0;vertical-align:bottom;color:#303030;font-size:1.4rem;font-weight:600;padding-bottom:0}.admin__control-table th._required span:after{color:#eb5202;content:'*'}.admin__control-table .control-table-actions-th{white-space:nowrap}.admin__control-table .control-table-actions-cell{padding-top:1.8rem;text-align:center;width:1%}.admin__control-table .col-draggable{padding-top:2.2rem;width:1%}.admin__control-table .action-delete,.admin__control-table .action-delete:hover{background-color:transparent;border-color:transparent;box-shadow:none}.admin__control-table .action-delete:before{content:'\e630'}.admin__control-table .action-delete>span{display:none}.admin__field-tooltip{display:inline-block;margin-top:5px;overflow:visible;vertical-align:top;width:0}.admin__field-tooltip:hover{position:relative;z-index:500}.admin__field-option .admin__field-tooltip{margin-top:10px}.admin__field-tooltip .admin__field-tooltip-action{margin-left:20px;display:inline-block;text-decoration:none}.admin__field-tooltip .admin__field-tooltip-action:before{-webkit-font-smoothing:antialiased;font-size:2.2rem;line-height:1;color:#514943;content:'\e633';font-family:Icons;vertical-align:middle;display:inline-block;font-weight:400;overflow:hidden;speak:none;text-align:center}.admin__field-tooltip .admin__control-text:focus+.admin__field-tooltip-content,.admin__field-tooltip:hover .admin__field-tooltip-content{display:block}.admin__field-tooltip .admin__field-tooltip-content{bottom:42px;display:none;right:-70px}.admin__field-tooltip .admin__field-tooltip-content:after,.admin__field-tooltip .admin__field-tooltip-content:before{border:16px solid transparent;height:0;width:0;border-top-color:#afadac;content:"";display:block;position:absolute;right:20px;top:100%;z-index:3}.admin__field-tooltip .admin__field-tooltip-content:after{border-top-color:#fffbbb;margin-top:-1px;z-index:4}.abs-admin__field-tooltip-content,.admin__field-tooltip .admin__field-tooltip-content{box-shadow:0 2px 8px 0 rgba(0,0,0,.3);background:#fffbbb;border-radius:1px;border:1px solid #afadac;padding:15px 25px;position:absolute;width:320px;z-index:1}.admin__fieldset{border:0;margin:0;min-width:0;padding:0}.admin__fieldset>.admin__field{border:0;margin:0 0 0 -30px;padding:0}.admin__fieldset>.admin__field:after{clear:both;content:'';display:table}.admin__fieldset>.admin__field>.admin__field-control{width:calc((100%) * .4444444444444444 - 30px);float:left;margin-left:30px}.admin__fieldset>.admin__field>.admin__field-label{width:calc((100%) * .3333333333333333 - 30px);float:left;margin-left:30px}.admin__form-field{border:0;margin:0;padding:0}.admin__field-control .admin__control-text,.admin__field-control .admin__control-textarea,.admin__form-field-control .admin__control-text,.admin__form-field-control .admin__control-textarea{width:100%}.admin__field-label{color:#303030;margin:0;text-align:right}.admin__field-label+br{display:none}.admin__field:not(.admin__field-option)>.admin__field-label{font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.4rem;font-weight:600;line-height:3.2rem;padding:0;white-space:nowrap;word-wrap:break-word}.admin__field:not(.admin__field-option)>.admin__field-label:before{opacity:0;visibility:hidden;content:'.';margin-left:-7px;overflow:hidden}.admin__field:not(.admin__field-option)>.admin__field-label span{display:inline-block;line-height:1.2;vertical-align:middle;white-space:normal}._required>.admin__field-label span:after{color:#eb5202;content:'*';display:inline-block;font-size:1.6rem;font-weight:500;line-height:1;margin-left:10px;position:absolute;top:1.2rem;z-index:1}._disabled>.admin__field-label{color:#999}.admin__field{margin-bottom:0}.admin__field+.admin__field{margin-top:1.5rem}.admin__field:not(.admin__field-option)~.admin__field-option{margin-top:.5rem}.admin__field.admin__field-option~.admin__field-option{margin-top:.9rem}.admin__field~.admin__field-option:last-child{margin-bottom:.8rem}.admin__fieldset>.admin__field{margin-bottom:3rem;position:relative}.admin__field[data-config-scope]:before{color:gray;content:attr(data-config-scope);display:inline-block;font-size:1.2rem;left:calc((100%) * .7777777777777778 - 30px);line-height:3.2rem;margin-left:60px;position:absolute;width:calc((100%) * .2222222222222222 - 30px)}.admin__field-control .admin__field[data-config-scope]:nth-child(n+2):before{content:''}.admin__field._error .admin__field-control [class*=admin__addon-]:before,.admin__field._error .admin__field-control>[class*=admin__control-]{border-color:#e22626}.admin__field-control+.admin__field-control{margin-top:1.5rem}.admin__field-error{background:#fffbbb;border:1px solid #ee7d7d;box-sizing:border-box;color:#555;display:block;font-size:1.2rem;font-weight:400;line-height:1.2;margin:.2rem 0 0;padding:.8rem 1rem .9rem}.admin__field-note{color:#303030;font-size:1.2rem;margin:10px 0 0;padding:0}.admin__field-option{padding-top:.8rem}.admin__field-option .admin__field-label{text-align:left}.admin__field-control>.admin__field-option:nth-child(1):nth-last-child(2),.admin__field-control>.admin__field-option:nth-child(2):nth-last-child(1){display:inline-block}.admin__field-control>.admin__field-option:nth-child(1):nth-last-child(2)+.admin__field-option,.admin__field-control>.admin__field-option:nth-child(2):nth-last-child(1)+.admin__field-option{display:inline-block;margin-left:41px;margin-top:0}.admin__field-control>.admin__field-option:nth-child(1):nth-last-child(2)+.admin__field-option:before,.admin__field-control>.admin__field-option:nth-child(2):nth-last-child(1)+.admin__field-option:before{background:#cacaca;content:'';display:inline-block;height:20px;margin-left:-20px;position:absolute;width:1px}.admin__field-value{padding-top:.8rem}.admin__control-fields>.admin__field:first-child,[class*=admin__control-grouped]>.admin__field:first-child{position:static}.admin__control-fields>.admin__field:first-child>.admin__field-label,[class*=admin__control-grouped]>.admin__field:first-child>.admin__field-label{width:calc((100%) * .3333333333333333 - 30px);float:left;margin-left:30px;cursor:pointer;left:0;opacity:0;position:absolute;top:0}.admin__control-fields .admin__field-label~.admin__field-control{width:100%}[class*=admin__control-grouped]{box-sizing:border-box;display:table;table-layout:fixed;width:100%}[class*=admin__control-grouped]>.admin__field{display:table-cell;vertical-align:top;width:50%}[class*=admin__control-grouped]>.admin__field>.admin__field-control{float:none;width:100%}[class*=admin__control-grouped]>.admin__field:nth-child(n+2){padding-left:20px}[class*=admin__control-grouped]>.admin__field:nth-child(n+2):not(.admin__field-option) .admin__field-label{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.admin__field-control-group{margin-top:.8rem}.admin__field-control-group>.admin__field{padding:0}.admin__legend{float:left;position:static;width:100%}.admin__legend+br{display:block;height:0;overflow:hidden;clear:left}.message{margin-bottom:3rem}.message-icon-top:before{margin-top:0;top:1.8rem}.nav{background-color:#f8f8f8;border-bottom:1px solid #e3e3e3;border-top:1px solid #e3e3e3;display:none;margin-bottom:3rem;padding:2.2rem 1.5rem 0 0}.nav .btn-group,.nav-bar-outer-actions{float:right;margin-bottom:1.7rem}.nav .btn-group .btn-wrap,.nav-bar-outer-actions .btn-wrap{float:right;margin-left:.5rem;margin-right:.5rem}.nav .btn-group .btn-wrap .btn,.nav-bar-outer-actions .btn-wrap .btn{padding-left:.5rem;padding-right:.5rem}.nav-bar-outer-actions{margin-top:-10.6rem;padding-right:1.5rem}.btn-wrap-try-again{width:9.5rem}.btn-wrap-next,.btn-wrap-prev{width:8.5rem}.nav-bar{counter-reset:i;float:left;margin:0 1rem 1.7rem 0;padding:0;position:relative;white-space:nowrap}.nav-bar:before{background-color:#d4d4d4;background-repeat:repeat-x;background-image:linear-gradient(to bottom,#d1d1d1 0,#d4d4d4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#d1d1d1', endColorstr='#d4d4d4', GradientType=0);border-bottom:1px solid #d9d9d9;border-top:1px solid #bfbfbf;content:'';height:1rem;left:5.15rem;position:absolute;right:5.15rem;top:.7rem}.nav-bar>li{display:inline-block;font-size:0;position:relative;vertical-align:top;width:10.3rem}.nav-bar>li:first-child:after{display:none}.nav-bar>li:after{background-color:#514943;content:'';height:.5rem;left:calc(-50% + .25rem);position:absolute;right:calc(50% + .7rem);top:.9rem}.nav-bar>li.disabled:before,.nav-bar>li.ui-state-disabled:before{bottom:0;content:'';left:0;position:absolute;right:0;top:0;z-index:1}.nav-bar>li.active~li:after,.nav-bar>li.ui-state-active~li:after{display:none}.nav-bar>li.active~li a:after,.nav-bar>li.ui-state-active~li a:after{background-color:transparent;border-color:transparent;color:#a6a6a6}.nav-bar>li.active a,.nav-bar>li.ui-state-active a{color:#000}.nav-bar>li.active a:hover,.nav-bar>li.ui-state-active a:hover{cursor:default}.nav-bar>li.active a:after,.nav-bar>li.ui-state-active a:after{background-color:#fff;content:''}.nav-bar a{color:#514943;display:block;font-size:1.2rem;font-weight:600;line-height:1.2;overflow:hidden;padding:3rem .5em 0;position:relative;text-align:center;text-overflow:ellipsis}.nav-bar a:hover{text-decoration:none}.nav-bar a:after{background-color:#514943;border:.4rem solid #514943;border-radius:100%;color:#fff;content:counter(i);counter-increment:i;height:1.5rem;left:50%;line-height:.6;margin-left:-.8rem;position:absolute;right:auto;text-align:center;top:.4rem;width:1.5rem}.nav-bar a:before{background-color:#d6d6d6;border:1px solid transparent;border-bottom-color:#d9d9d9;border-radius:100%;border-top-color:#bfbfbf;content:'';height:2.3rem;left:50%;line-height:1;margin-left:-1.2rem;position:absolute;top:0;width:2.3rem}.tooltip{display:block;font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.19rem;font-weight:400;line-height:1.4;opacity:0;position:absolute;visibility:visible;z-index:10}.tooltip.in{opacity:.9}.tooltip.top{margin-top:-4px;padding:8px 0}.tooltip.right{margin-left:4px;padding:0 8px}.tooltip.bottom{margin-top:4px;padding:8px 0}.tooltip.left{margin-left:-4px;padding:0 8px}.tooltip p:last-child{margin-bottom:0}.tooltip-inner{background-color:#fff;border:1px solid #adadad;border-radius:0;box-shadow:1px 1px 1px #ccc;color:#41362f;max-width:20rem;padding:.5em 1em;text-decoration:none}.tooltip-arrow,.tooltip-arrow:after{border:solid transparent;height:0;position:absolute;width:0}.tooltip-arrow:after{content:'';position:absolute}.tooltip.top .tooltip-arrow,.tooltip.top .tooltip-arrow:after{border-top-color:#949494;border-width:8px 8px 0;bottom:0;left:50%;margin-left:-8px}.tooltip.top-left .tooltip-arrow,.tooltip.top-left .tooltip-arrow:after{border-top-color:#949494;border-width:8px 8px 0;bottom:0;margin-bottom:-8px;right:8px}.tooltip.top-right .tooltip-arrow,.tooltip.top-right .tooltip-arrow:after{border-top-color:#949494;border-width:8px 8px 0;bottom:0;left:8px;margin-bottom:-8px}.tooltip.right .tooltip-arrow,.tooltip.right .tooltip-arrow:after{border-right-color:#949494;border-width:8px 8px 8px 0;left:1px;margin-top:-8px;top:50%}.tooltip.right .tooltip-arrow:after{border-right-color:#fff;border-width:6px 7px 6px 0;margin-left:0;margin-top:-6px}.tooltip.left .tooltip-arrow,.tooltip.left .tooltip-arrow:after{border-left-color:#949494;border-width:8px 0 8px 8px;margin-top:-8px;right:0;top:50%}.tooltip.bottom .tooltip-arrow,.tooltip.bottom .tooltip-arrow:after{border-bottom-color:#949494;border-width:0 8px 8px;left:50%;margin-left:-8px;top:0}.tooltip.bottom-left .tooltip-arrow,.tooltip.bottom-left .tooltip-arrow:after{border-bottom-color:#949494;border-width:0 8px 8px;margin-top:-8px;right:8px;top:0}.tooltip.bottom-right .tooltip-arrow,.tooltip.bottom-right .tooltip-arrow:after{border-bottom-color:#949494;border-width:0 8px 8px;left:8px;margin-top:-8px;top:0}.password-strength{display:block;margin:0 -.3rem 1em;white-space:nowrap}.password-strength.password-strength-too-short .password-strength-item:first-child,.password-strength.password-strength-weak .password-strength-item:first-child,.password-strength.password-strength-weak .password-strength-item:first-child+.password-strength-item{background-color:#e22626}.password-strength.password-strength-fair .password-strength-item:first-child,.password-strength.password-strength-fair .password-strength-item:first-child+.password-strength-item,.password-strength.password-strength-fair .password-strength-item:first-child+.password-strength-item+.password-strength-item{background-color:#ef672f}.password-strength.password-strength-good .password-strength-item:first-child,.password-strength.password-strength-good .password-strength-item:first-child+.password-strength-item,.password-strength.password-strength-good .password-strength-item:first-child+.password-strength-item+.password-strength-item,.password-strength.password-strength-good .password-strength-item:first-child+.password-strength-item+.password-strength-item+.password-strength-item,.password-strength.password-strength-strong .password-strength-item{background-color:#79a22e}.password-strength .password-strength-item{background-color:#ccc;display:inline-block;font-size:0;height:1.4rem;margin-right:.3rem;width:calc(20% - .6rem)}@-webkit-keyframes progress-bar-stripes{from{background-position:4rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:4rem 0}to{background-position:0 0}}.progress{background-color:#fafafa;border:1px solid #ccc;clear:left;height:3rem;margin-bottom:3rem;overflow:hidden}.progress-bar{background-color:#79a22e;color:#fff;float:left;font-size:1.19rem;height:100%;line-height:3rem;text-align:center;transition:width .6s ease;width:0}.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-text-description{margin-bottom:1.6rem}.progress-bar-text-progress{text-align:right}.page-columns .page-inner-sidebar{margin:0 0 3rem}.page-header{margin-bottom:2.7rem;padding-bottom:2.9rem;position:relative}.page-header:before{border-bottom:1px solid #e3e3e3;bottom:0;content:'';display:block;height:1px;left:3rem;position:absolute;right:3rem}.container .page-header:before{content:normal}.page-header .message{margin-bottom:1.8rem}.page-header .message+.message{margin-top:-1.5rem}.page-header .admin__action-dropdown,.page-header .search-global-input{transition:none}.container .page-header{margin-bottom:0}.page-title-wrapper{margin-top:1.1rem}.container .page-title-wrapper{background:url(../../pub/images/logo.svg) no-repeat;min-height:41px;padding:4px 0 0 45px}.admin__menu .level-0:first-child>a{margin-top:1.6rem}.admin__menu .level-0:first-child>a:after{top:-1.6rem}.admin__menu .level-0>a{padding-top:1.3rem;padding-bottom:1.3rem}.admin__menu .level-0>a:before{margin-bottom:.7rem}.admin__menu .item-home>a:before{content:'\e611';font-size:2.3rem;padding-top:-.1rem}.admin__menu .item-component>a:before{content:'\e612'}.admin__menu .item-upgrade>a:before{content:'\e614'}.admin__menu .item-system-config>a:before{content:'\e610'}.admin__menu .item-tools>a:before{content:'\e613'}.modal-sub-title{font-size:1.7rem;font-weight:600}.modal-connect-signin .modal-inner-wrap{max-width:80rem}@-webkit-keyframes ngdialog-fadeout{0%{opacity:1}100%{opacity:0}}@keyframes ngdialog-fadeout{0%{opacity:1}100%{opacity:0}}@-webkit-keyframes ngdialog-fadein{0%{opacity:0}100%{opacity:1}}@keyframes ngdialog-fadein{0%{opacity:0}100%{opacity:1}}.ngdialog{-webkit-overflow-scrolling:touch;bottom:0;box-sizing:border-box;left:0;overflow:auto;position:fixed;right:0;top:0;z-index:999}.ngdialog *,.ngdialog:after,.ngdialog:before{box-sizing:inherit}.ngdialog.ngdialog-disabled-animation *{-webkit-animation:none!important;animation:none!important}.ngdialog.ngdialog-closing .ngdialog-content,.ngdialog.ngdialog-closing .ngdialog-overlay{-webkit-backface-visibility:hidden;-webkit-animation:ngdialog-fadeout .5s;animation:ngdialog-fadeout .5s}.ngdialog-overlay{-webkit-backface-visibility:hidden;-webkit-animation:ngdialog-fadein .5s;animation:ngdialog-fadein .5s;background:rgba(0,0,0,.4);bottom:0;left:0;position:fixed;right:0;top:0}.ngdialog-content{-webkit-backface-visibility:hidden;-webkit-animation:ngdialog-fadein .5s;animation:ngdialog-fadein .5s}body.ngdialog-open{overflow:hidden}.component-indicator{border-radius:50%;cursor:help;display:inline-block;height:20px;text-align:center;width:20px}.component-indicator::after,.component-indicator::before{background:#fff;display:block;opacity:0;position:absolute;transition:opacity .2s linear .1s;visibility:hidden}.component-indicator::before{border-radius:1px;border:1px solid #adadad;box-shadow:0 0 2px rgba(0,0,0,.4);content:attr(data-label);font-size:1.2rem;margin:34px 0 0 -10px;min-width:50px;padding:4px 5px}.component-indicator::after{border:1px solid #999;border-width:1px 0 0 1px;box-shadow:-1px -1px 1px rgba(0,0,0,.1);content:'';height:10px;margin:9px 0 0 5px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:10px}.component-indicator:hover::after,.component-indicator:hover::before{opacity:1;transition:opacity .2s linear;visibility:visible}.component-indicator span{display:block;height:20px;overflow:hidden;width:20px}.component-indicator span:before{content:'';display:block;font-family:Icons;font-size:20px;height:100%;line-height:20px;width:100%}.component-indicator._on{background:#79a22e}.component-indicator._off{background:#e22626}.component-indicator._off span:before{background:#fff;height:4px;margin:8px auto 20px;width:12px}.component-indicator._info{background:0 0}.component-indicator._info span{width:21px}.component-indicator._info span:before{color:#008bdb;content:'\e61a';font-family:Icons;font-size:21px}.app-updater .nav{display:block;margin-bottom:3.1rem;margin-top:-2.8rem}.app-updater .nav-bar-outer-actions{margin-top:1rem;padding-right:0}.app-updater .nav-bar-outer-actions .btn-wrap-cancel{margin-right:2.6rem}.main{padding-bottom:2rem;padding-top:3rem}.header{display:none}.header .logo{float:left;height:4.1rem;width:3.5rem}.header-title{font-size:2.8rem;letter-spacing:.02em;line-height:1.4;margin:2.5rem 0 3.5rem 5rem}.page-sub-title{font-size:2rem}.accent-box{margin-bottom:2rem}.accent-box .btn-prime{margin-top:1.5rem}.page-landing{margin:7.6% auto 0;max-width:44rem;text-align:center}.page-landing .logo{height:5.6rem;margin-bottom:2rem;width:19.2rem}.page-landing .text-version{margin-bottom:3rem}.page-landing .text-welcome{margin-bottom:6.5rem}.page-landing .text-terms{margin-bottom:2.5rem;text-align:center}.page-landing .btn-submit,.page-license .license-text{margin-bottom:2rem}.page-license .page-license-footer{text-align:right}.readiness-check-item{margin-bottom:4rem;min-height:2.5rem}.readiness-check-item .spinner{font-size:2.5rem;float:left;margin:-.4rem 0 0 1.7rem}.readiness-check-title{font-size:1.4rem;font-weight:700;margin-bottom:.1rem;margin-left:5.7rem}.readiness-check-content{margin-left:5.7rem;margin-right:22rem}.readiness-check-content .readiness-check-title{margin-left:0}.readiness-check-content .list{margin-top:-.3rem}.readiness-check-side{float:right;padding-left:2.4rem;width:22rem}.readiness-check-side .side-title{margin-bottom:0}.readiness-check-icon{float:left;margin-left:1.7rem;margin-top:.7rem}.page-web-configuration .form-el-insider-wrap{width:auto}.page-web-configuration .form-el-insider{width:15.4rem}.page-web-configuration .form-el-insider-input .form-el-input{width:16.5rem}.customize-your-store .customize-your-store-default .legend{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.customize-your-store .advanced-modules-count,.customize-your-store .advanced-modules-select{padding-left:1.5rem}.customize-your-store .customize-your-store-advanced{min-width:0}.customize-your-store .message-error:before{margin-top:0;top:1.8rem}.customize-your-store .message-error a{color:#333;text-decoration:underline}.customize-your-store .message-error .form-label:before{background:#fff}.customize-your-store .customize-database-clean p{margin-top:2.5rem}.content-install{margin-bottom:2rem}.console{border:1px solid #ccc;font-family:'Courier New',Courier,monospace;font-weight:300;height:20rem;margin:1rem 0 2rem;overflow-y:auto;padding:1.5rem 2rem 2rem;resize:vertical}.console .text-danger{color:#e22626}.console .text-success{color:#090}.console .hidden{display:none}.content-success .btn-prime{margin-top:1.5rem}.jumbo-title{font-size:3.6rem}.jumbo-title .jumbo-icon{font-size:3.8rem;margin-right:.25em;position:relative;top:.15em}.install-database-clean{margin-top:4rem}.install-database-clean .btn{margin-right:1rem}.page-sub-title{margin-bottom:2.1rem}.multiselect-custom{max-width:71.1rem}.content-install{margin-top:3.7rem}.home-page-inner-wrap{margin:0 auto;max-width:91rem}.setup-home-title{margin-bottom:3.9rem;padding-top:1.8rem;text-align:center}.setup-home-item{background-color:#fafafa;border:1px solid #ccc;color:#333;display:block;margin-bottom:2rem;margin-left:1.3rem;margin-right:1.3rem;min-height:30rem;padding:2rem;text-align:center}.setup-home-item:hover{border-color:#8c8c8c;color:#333;text-decoration:none;transition:border-color .1s linear}.setup-home-item:active{-webkit-transform:scale(0.99);-ms-transform:scale(0.99);transform:scale(0.99)}.setup-home-item:before{display:block;font-size:7rem;margin-bottom:3.3rem;margin-top:4rem}.setup-home-item-component:before{content:'\e612'}.setup-home-item-upgrade:before{content:'\e614'}.setup-home-item-configuration:before{content:'\e610'}.setup-home-item-title{display:block;font-size:1.8rem;letter-spacing:.025em;margin-bottom:1rem}.setup-home-item-description{display:block}.componenet-manager-wrap{border:1px solid #bbb;margin:0 0 4rem}.componenet-manager-wrap .componenet-manager-account{font-size:1.4rem;float:right;padding:.6rem 0 0}.componenet-manager-wrap .componenet-manager-account .sign-in-out{margin-left:2rem}.component-manager-title{background-color:#f8f8f8;border-bottom:1px solid #e3e3e3;color:#41362f;font-size:2rem;line-height:1.2;padding:2rem}.component-manager-content{padding:2.5rem 2rem 2rem}.componenet-manager-items{list-style:none;margin:0;text-align:center}.componenet-manager-items .btn{border:1px solid #adadad}.componenet-manager-items .item-title{margin:0 0 1.5rem}.componenet-manager-items .item-number{font-size:6rem;line-height:.8;margin:0 0 1.5rem}.componenet-manager-items .item-date{margin:0 0 3.7rem}.componenet-manager-items .item-install{margin:0 0 2rem}.componenet-manager-items .item-install .btn{line-height:1.36;margin:0;padding:0;color:#008bdb;text-decoration:none;background:0 0;border:0;display:inline;font-size:1.4rem;font-weight:400}.componenet-manager-items .item-install .btn:visited{color:#008bdb;text-decoration:none}.componenet-manager-items .item-install .btn:hover{text-decoration:underline}.componenet-manager-items .item-install .btn:active{color:#ff5501;text-decoration:underline}.componenet-manager-items .item-install .btn:hover{color:#0fa7ff}.componenet-manager-items .item-install .btn:active,.componenet-manager-items .item-install .btn:focus,.componenet-manager-items .item-install .btn:hover{background:0 0;border:0}.componenet-manager-items .item-install .btn.disabled,.componenet-manager-items .item-install .btn[disabled],fieldset[disabled] .componenet-manager-items .item-install .btn{color:#008bdb;opacity:.5;cursor:default;pointer-events:none;text-decoration:underline}.componenet-manager-items .item-install .btn.disabled{text-decoration:none}.sync-login-wrap{margin:-2.5rem 0 0;padding:0 10% 4rem}.sync-login-wrap .legend{font-size:2.6rem;color:#eb5202;float:left;font-weight:300;line-height:1.2;margin:-1rem 0 2.5rem;position:static;width:100%}.sync-login-wrap .legend._hidden{display:none}.sync-login-wrap .login-header{font-size:3.4rem;font-weight:300;margin:0 0 2rem}.sync-login-wrap .login-header span{display:inline-block;padding:.9rem 0 0;vertical-align:top}.sync-login-wrap .form-row .form-label{display:inline-block}.sync-login-wrap .form-row .form-label.required{padding-left:1.5rem}.sync-login-wrap .form-row .form-label.required:after{left:0;position:absolute;right:auto}.sync-login-wrap .form-row{max-width:28rem}.sync-login-wrap .form-actions{display:table;margin-top:-1.3rem}.sync-login-wrap .form-actions .links{display:table-header-group}.sync-login-wrap .form-actions .actions{padding:3rem 0 0}@media all and (max-width:1047px){.admin__menu .submenu li{min-width:19.8rem}.nav{padding-bottom:5.38rem;padding-left:1.5rem;text-align:center}.nav-bar{display:inline-block;float:none;margin-right:0;vertical-align:top}.nav .btn-group,.nav-bar-outer-actions{display:inline-block;float:none;margin-top:-8.48rem;text-align:center;vertical-align:top;width:100%}.nav-bar-outer-actions{padding-right:0}.nav-bar-outer-actions .outer-actions-inner-wrap{display:inline-block}.app-updater .nav{padding-bottom:1.7rem}.app-updater .nav-bar-outer-actions{margin-top:2rem}}@media all and (min-width:768px){.page-layout-admin-2columns-left .page-columns{margin-left:-30px}.page-layout-admin-2columns-left .page-columns:after{clear:both;content:'';display:table}.page-layout-admin-2columns-left .page-columns .main-col{width:calc((100%) * .75 - 30px);float:right}.page-layout-admin-2columns-left .page-columns .side-col{width:calc((100%) * .25 - 30px);float:left;margin-left:30px}.col-m-1,.col-m-10,.col-m-11,.col-m-12,.col-m-2,.col-m-3,.col-m-4,.col-m-5,.col-m-6,.col-m-7,.col-m-8,.col-m-9{float:left}.col-m-12{width:100%}.col-m-11{width:91.66666667%}.col-m-10{width:83.33333333%}.col-m-9{width:75%}.col-m-8{width:66.66666667%}.col-m-7{width:58.33333333%}.col-m-6{width:50%}.col-m-5{width:41.66666667%}.col-m-4{width:33.33333333%}.col-m-3{width:25%}.col-m-2{width:16.66666667%}.col-m-1{width:8.33333333%}.col-m-pull-12{right:100%}.col-m-pull-11{right:91.66666667%}.col-m-pull-10{right:83.33333333%}.col-m-pull-9{right:75%}.col-m-pull-8{right:66.66666667%}.col-m-pull-7{right:58.33333333%}.col-m-pull-6{right:50%}.col-m-pull-5{right:41.66666667%}.col-m-pull-4{right:33.33333333%}.col-m-pull-3{right:25%}.col-m-pull-2{right:16.66666667%}.col-m-pull-1{right:8.33333333%}.col-m-pull-0{right:auto}.col-m-push-12{left:100%}.col-m-push-11{left:91.66666667%}.col-m-push-10{left:83.33333333%}.col-m-push-9{left:75%}.col-m-push-8{left:66.66666667%}.col-m-push-7{left:58.33333333%}.col-m-push-6{left:50%}.col-m-push-5{left:41.66666667%}.col-m-push-4{left:33.33333333%}.col-m-push-3{left:25%}.col-m-push-2{left:16.66666667%}.col-m-push-1{left:8.33333333%}.col-m-push-0{left:auto}.col-m-offset-12{margin-left:100%}.col-m-offset-11{margin-left:91.66666667%}.col-m-offset-10{margin-left:83.33333333%}.col-m-offset-9{margin-left:75%}.col-m-offset-8{margin-left:66.66666667%}.col-m-offset-7{margin-left:58.33333333%}.col-m-offset-6{margin-left:50%}.col-m-offset-5{margin-left:41.66666667%}.col-m-offset-4{margin-left:33.33333333%}.col-m-offset-3{margin-left:25%}.col-m-offset-2{margin-left:16.66666667%}.col-m-offset-1{margin-left:8.33333333%}.col-m-offset-0{margin-left:0}.page-columns{margin-left:-30px}.page-columns:after{clear:both;content:'';display:table}.page-columns .page-inner-content{width:calc((100%) * .75 - 30px);float:right}.page-columns .page-inner-sidebar{width:calc((100%) * .25 - 30px);float:left;margin-left:30px}}@media all and (min-width:1048px){.col-l-1,.col-l-10,.col-l-11,.col-l-12,.col-l-2,.col-l-3,.col-l-4,.col-l-5,.col-l-6,.col-l-7,.col-l-8,.col-l-9{float:left}.col-l-12{width:100%}.col-l-11{width:91.66666667%}.col-l-10{width:83.33333333%}.col-l-9{width:75%}.col-l-8{width:66.66666667%}.col-l-7{width:58.33333333%}.col-l-6{width:50%}.col-l-5{width:41.66666667%}.col-l-4{width:33.33333333%}.col-l-3{width:25%}.col-l-2{width:16.66666667%}.col-l-1{width:8.33333333%}.col-l-pull-12{right:100%}.col-l-pull-11{right:91.66666667%}.col-l-pull-10{right:83.33333333%}.col-l-pull-9{right:75%}.col-l-pull-8{right:66.66666667%}.col-l-pull-7{right:58.33333333%}.col-l-pull-6{right:50%}.col-l-pull-5{right:41.66666667%}.col-l-pull-4{right:33.33333333%}.col-l-pull-3{right:25%}.col-l-pull-2{right:16.66666667%}.col-l-pull-1{right:8.33333333%}.col-l-pull-0{right:auto}.col-l-push-12{left:100%}.col-l-push-11{left:91.66666667%}.col-l-push-10{left:83.33333333%}.col-l-push-9{left:75%}.col-l-push-8{left:66.66666667%}.col-l-push-7{left:58.33333333%}.col-l-push-6{left:50%}.col-l-push-5{left:41.66666667%}.col-l-push-4{left:33.33333333%}.col-l-push-3{left:25%}.col-l-push-2{left:16.66666667%}.col-l-push-1{left:8.33333333%}.col-l-push-0{left:auto}.col-l-offset-12{margin-left:100%}.col-l-offset-11{margin-left:91.66666667%}.col-l-offset-10{margin-left:83.33333333%}.col-l-offset-9{margin-left:75%}.col-l-offset-8{margin-left:66.66666667%}.col-l-offset-7{margin-left:58.33333333%}.col-l-offset-6{margin-left:50%}.col-l-offset-5{margin-left:41.66666667%}.col-l-offset-4{margin-left:33.33333333%}.col-l-offset-3{margin-left:25%}.col-l-offset-2{margin-left:16.66666667%}.col-l-offset-1{margin-left:8.33333333%}.col-l-offset-0{margin-left:0}}@media all and (min-width:1440px){.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9{float:left}.col-xl-12{width:100%}.col-xl-11{width:91.66666667%}.col-xl-10{width:83.33333333%}.col-xl-9{width:75%}.col-xl-8{width:66.66666667%}.col-xl-7{width:58.33333333%}.col-xl-6{width:50%}.col-xl-5{width:41.66666667%}.col-xl-4{width:33.33333333%}.col-xl-3{width:25%}.col-xl-2{width:16.66666667%}.col-xl-1{width:8.33333333%}.col-xl-pull-12{right:100%}.col-xl-pull-11{right:91.66666667%}.col-xl-pull-10{right:83.33333333%}.col-xl-pull-9{right:75%}.col-xl-pull-8{right:66.66666667%}.col-xl-pull-7{right:58.33333333%}.col-xl-pull-6{right:50%}.col-xl-pull-5{right:41.66666667%}.col-xl-pull-4{right:33.33333333%}.col-xl-pull-3{right:25%}.col-xl-pull-2{right:16.66666667%}.col-xl-pull-1{right:8.33333333%}.col-xl-pull-0{right:auto}.col-xl-push-12{left:100%}.col-xl-push-11{left:91.66666667%}.col-xl-push-10{left:83.33333333%}.col-xl-push-9{left:75%}.col-xl-push-8{left:66.66666667%}.col-xl-push-7{left:58.33333333%}.col-xl-push-6{left:50%}.col-xl-push-5{left:41.66666667%}.col-xl-push-4{left:33.33333333%}.col-xl-push-3{left:25%}.col-xl-push-2{left:16.66666667%}.col-xl-push-1{left:8.33333333%}.col-xl-push-0{left:auto}.col-xl-offset-12{margin-left:100%}.col-xl-offset-11{margin-left:91.66666667%}.col-xl-offset-10{margin-left:83.33333333%}.col-xl-offset-9{margin-left:75%}.col-xl-offset-8{margin-left:66.66666667%}.col-xl-offset-7{margin-left:58.33333333%}.col-xl-offset-6{margin-left:50%}.col-xl-offset-5{margin-left:41.66666667%}.col-xl-offset-4{margin-left:33.33333333%}.col-xl-offset-3{margin-left:25%}.col-xl-offset-2{margin-left:16.66666667%}.col-xl-offset-1{margin-left:8.33333333%}.col-xl-offset-0{margin-left:0}}@media all and (max-width:767px){.list-definition>dt{float:none}.list-definition>dd{margin-left:0}.form-row .form-label{text-align:left}.form-row .form-label.required:after{position:static}.nav{padding-bottom:0;padding-left:0;padding-right:0}.nav-bar-outer-actions{margin-top:0}.nav-bar{display:block;margin-bottom:0;margin-left:auto;margin-right:auto;width:30.9rem}.nav-bar:before{display:none}.nav-bar>li{float:left;min-height:9rem}.nav-bar>li:after{display:none}.nav-bar>li:nth-child(4n){clear:both}.nav-bar a{line-height:1.4}.tooltip{display:none!important}.readiness-check-content{margin-right:2rem}.form-el-insider,.form-el-insider-wrap,.page-web-configuration .form-el-insider-input,.page-web-configuration .form-el-insider-input .form-el-input{display:block;width:100%}}@media all and (max-width:479px){.nav-bar{width:23.175rem}.nav-bar>li{width:7.725rem}.nav .btn-group .btn-wrap-try-again,.nav-bar-outer-actions .btn-wrap-try-again{clear:both;display:block;float:none;margin-left:auto;margin-right:auto;margin-top:1rem;padding-top:1rem}} \ No newline at end of file diff --git a/setup/src/Magento/Setup/Controller/SelectVersion.php b/setup/src/Magento/Setup/Controller/SelectVersion.php index 86b968336205fdd971f44999c16adff614994bd0..a11e81164907cc55bafea6b9a7f152265ad0cc4e 100644 --- a/setup/src/Magento/Setup/Controller/SelectVersion.php +++ b/setup/src/Magento/Setup/Controller/SelectVersion.php @@ -51,7 +51,7 @@ class SelectVersion extends AbstractActionController { $data = []; try { - $data['package'] = $this->systemPackage->getPackageVersions(); + $data['packages'] = $this->systemPackage->getPackageVersions(); $responseType = ResponseTypeInterface::RESPONSE_TYPE_SUCCESS; } catch (\Exception $e) { $responseType = ResponseTypeInterface::RESPONSE_TYPE_ERROR; diff --git a/setup/src/Magento/Setup/Model/DependencyReadinessCheck.php b/setup/src/Magento/Setup/Model/DependencyReadinessCheck.php index 7c785454d49b918e810fcba7b4b8363378e01df2..a4429ab18cac046f5d2436bdd07f0ee5ae1b77e6 100644 --- a/setup/src/Magento/Setup/Model/DependencyReadinessCheck.php +++ b/setup/src/Magento/Setup/Model/DependencyReadinessCheck.php @@ -37,6 +37,11 @@ class DependencyReadinessCheck */ private $file; + /** + * @var MagentoComposerApplication + */ + private $magentoComposerApplication; + /** * Constructor * @@ -55,6 +60,7 @@ class DependencyReadinessCheck $this->directoryList = $directoryList; $this->file = $file; $this->requireUpdateDryRunCommand = $composerAppFactory->createRequireUpdateDryRunCommand(); + $this->magentoComposerApplication = $composerAppFactory->create(); } /** @@ -70,6 +76,18 @@ class DependencyReadinessCheck $this->file->copy($composerJson, $this->directoryList->getPath(DirectoryList::VAR_DIR) . '/composer.json'); $workingDir = $this->directoryList->getPath(DirectoryList::VAR_DIR); try { + foreach ($packages as $package) { + if (strpos($package, 'magento/product-enterprise-edition') !== false) { + $this->magentoComposerApplication->runComposerCommand( + [ + 'command' => 'remove', + 'packages' => ['magento/product-community-edition'], + '--no-update' => true + ], + $workingDir + ); + } + } $this->requireUpdateDryRunCommand->run($packages, $workingDir); return ['success' => true]; } catch (\RuntimeException $e) { diff --git a/setup/src/Magento/Setup/Model/Installer.php b/setup/src/Magento/Setup/Model/Installer.php index bf99f52be0317eb6857e9f0da258ca0c5787d695..c3b0b306b14be7224e9bac37fa55daea4996cc60 100644 --- a/setup/src/Magento/Setup/Model/Installer.php +++ b/setup/src/Magento/Setup/Model/Installer.php @@ -15,7 +15,7 @@ use Magento\Framework\Component\ComponentRegistrar; use Magento\Framework\Config\ConfigOptionsListConstants; use Magento\Framework\Filesystem; use Magento\Framework\Exception\FileSystemException; -use Magento\Framework\Model\ModelResource\Db\Context; +use Magento\Framework\Model\ResourceModel\Db\Context; use Magento\Framework\Module\ModuleList\Loader as ModuleLoader; use Magento\Framework\Module\ModuleListInterface; use Magento\Framework\Shell; diff --git a/setup/src/Magento/Setup/Model/InstallerFactory.php b/setup/src/Magento/Setup/Model/InstallerFactory.php index d67611d7311517a9b982560efa899bab7f74aa31..253c62ef626be25e58e0031690024a329ae1cb9f 100644 --- a/setup/src/Magento/Setup/Model/InstallerFactory.php +++ b/setup/src/Magento/Setup/Model/InstallerFactory.php @@ -62,10 +62,10 @@ class InstallerFactory $this->serviceLocator->get('Magento\Framework\App\MaintenanceMode'), $this->serviceLocator->get('Magento\Framework\Filesystem'), $this->serviceLocator->get('Magento\Setup\Model\ObjectManagerProvider'), - new \Magento\Framework\Model\ModelResource\Db\Context( + new \Magento\Framework\Model\ResourceModel\Db\Context( $this->getResource(), - $this->serviceLocator->get('Magento\Framework\Model\ModelResource\Db\TransactionManager'), - $this->serviceLocator->get('Magento\Framework\Model\ModelResource\Db\ObjectRelationProcessor') + $this->serviceLocator->get('Magento\Framework\Model\ResourceModel\Db\TransactionManager'), + $this->serviceLocator->get('Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor') ), $this->serviceLocator->get('Magento\Setup\Model\ConfigModel'), $this->serviceLocator->get('Magento\Framework\App\State\CleanupFiles'), diff --git a/setup/src/Magento/Setup/Model/SystemPackage.php b/setup/src/Magento/Setup/Model/SystemPackage.php index d7f45f6e7b5cf0d8bfa9fd98c0c479b02709dd97..c848334ef70fc68fbdcc3ae6567f36221500d618 100755 --- a/setup/src/Magento/Setup/Model/SystemPackage.php +++ b/setup/src/Magento/Setup/Model/SystemPackage.php @@ -54,51 +54,167 @@ class SystemPackage */ public function getPackageVersions() { - $systemPackage = null; + $currentCE = '0'; + $result = []; + $systemPackages = []; + $systemPackages = $this->getInstalledSystemPackages($systemPackages); + if (empty($systemPackages)) { + throw new \RuntimeException('System packages not found'); + } + foreach ($systemPackages as $systemPackage) { + $versions = []; + $systemPackageInfo = $this->infoCommand->run($systemPackage); + if (!$systemPackageInfo) { + throw new \RuntimeException('System package not found'); + } - $locker = $this->magentoComposerApplication->createComposer()->getLocker(); + $versions = $this->getSystemPackageVersions($systemPackageInfo, $versions); - foreach ($locker->getLockedRepository()->getPackages() as $package) { - $packageName = $package->getName(); + if ($systemPackageInfo['name'] == 'magento/product-community-edition') { + $currentCE = $systemPackageInfo[InfoCommand::CURRENT_VERSION]; + } + if (count($versions) > 1) { + $versions[0]['name'] .= ' (latest)'; + } - if ($this->composerInfo->isSystemPackage($packageName)) { - $systemPackage = $packageName; - break; + if (count($versions) >= 1) { + $versions[count($versions) - 1]['name'] .= ' (current)'; } + + $result[] = [ + 'package' => $systemPackageInfo['name'], + 'versions' => $versions + ]; } - $systemPackageInfo = $this->infoCommand->run($systemPackage); + if (!in_array('magento/product-enterprise-edition', $systemPackages)) { + $result = array_merge($this->getAllowedEnterpriseVersions($currentCE), $result); + } + + return $result; + } - if (!$systemPackageInfo) { - throw new \RuntimeException('System package not found'); + /** + * @param string $currentCE + * @return array + */ + public function getAllowedEnterpriseVersions($currentCE) + { + $result = []; + $enterpriseVersions = $this->infoCommand->run('magento/product-enterprise-edition'); + $eeVersions = []; + $maxVersion = ''; + if (array_key_exists('available_versions', $enterpriseVersions)) { + $enterpriseVersions = $this->sortVersions($enterpriseVersions); + if (isset($enterpriseVersions['available_versions'][0])) { + $maxVersion = $enterpriseVersions['available_versions'][0]; + } + $eeVersions = $this->filterEeVersions($currentCE, $enterpriseVersions, $maxVersion); } - $versions = []; + if (!empty($eeVersions)) { + $result[] = [ + 'package' => 'magento/product-enterprise-edition', + 'versions' => $eeVersions + ]; + } + return $result; + } + /** + * @param array $systemPackageInfo + * @param array $versions + * @return array + */ + public function getSystemPackageVersions($systemPackageInfo, $versions) + { + $editionType = ''; + if ($systemPackageInfo['name'] == 'magento/product-community-edition') { + $editionType .= 'CE'; + } else if ($systemPackageInfo['name'] == 'magento/product-enterprise-edition') { + $editionType .= 'EE'; + } foreach ($systemPackageInfo[InfoCommand::NEW_VERSIONS] as $version) { - $versions[] = ['id' => $version, 'name' => 'Version ' . $version]; + $versions[] = ['id' => $version, 'name' => 'Version ' . $version . ' ' . $editionType]; } if ($systemPackageInfo[InfoCommand::CURRENT_VERSION]) { $versions[] = [ 'id' => $systemPackageInfo[InfoCommand::CURRENT_VERSION], - 'name' => 'Version ' . $systemPackageInfo[InfoCommand::CURRENT_VERSION] + 'name' => 'Version ' . $systemPackageInfo[InfoCommand::CURRENT_VERSION] . ' ' . $editionType ]; } + return $versions; + } - if (count($versions) > 1) { - $versions[0]['name'] .= ' (latest)'; - } + /** + * @param array $systemPackages + * @return array + */ + public function getInstalledSystemPackages($systemPackages) + { + $systemPackages = []; + $locker = $this->magentoComposerApplication->createComposer()->getLocker(); - if (count($versions) >= 1) { - $versions[count($versions) - 1]['name'] .= ' (current)'; + /** @var \Composer\Package\CompletePackage $package */ + foreach ($locker->getLockedRepository()->getPackages() as $package) { + $packageName = $package->getName(); + if ($this->composerInfo->isSystemPackage($packageName)) { + if ($packageName == 'magento/product-community-edition') { + if ($this->composerInfo->isPackageInComposerJson($packageName)) { + $systemPackages[] = $packageName; + } + } else { + $systemPackages[] = $packageName; + } + } } + return $systemPackages; + } - $result = [ - 'package' => $systemPackageInfo['name'], - 'versions' => $versions - ]; + /** + * @param array $enterpriseVersions + * @return array + */ + public function sortVersions($enterpriseVersions) + { + usort($enterpriseVersions['available_versions'], function ($versionOne, $versionTwo) { + if (version_compare($versionOne, $versionTwo, '==')) { + return 0; + } + return (version_compare($versionOne, $versionTwo, '<')) ? 1 : -1; + }); - return $result; + return $enterpriseVersions; + } + + /** + * @param string $currentCE + * @param array $enterpriseVersions + * @param string $maxVersion + * @return array + */ + public function filterEeVersions($currentCE, $enterpriseVersions, $maxVersion) + { + $eeVersions = []; + foreach ($enterpriseVersions['available_versions'] as $version) { + $requires = $this->composerInfo->getPackageRequirements('magento/product-enterprise-edition', $version); + if (array_key_exists('magento/product-community-edition', $requires)) { + /** @var \Composer\Package\Link $ceRequire */ + $ceRequire = $requires['magento/product-community-edition']; + if (version_compare( + $ceRequire->getConstraint()->getPrettyString(), + $currentCE, + '>=' + )) { + $name = 'Version ' . $version . ' EE'; + if ($maxVersion == $version) { + $name .= ' (latest)'; + } + $eeVersions[] = ['id' => $version, 'name' => $name]; + } + } + } + return $eeVersions; } } diff --git a/setup/src/Magento/Setup/Module/ConnectionFactory.php b/setup/src/Magento/Setup/Module/ConnectionFactory.php index 51355fe3c399f1181485f1597c29098178c941f2..8fdb1d0ff0b1e088db491cecc67eeb5281eeb087 100644 --- a/setup/src/Magento/Setup/Module/ConnectionFactory.php +++ b/setup/src/Magento/Setup/Module/ConnectionFactory.php @@ -7,11 +7,11 @@ */ namespace Magento\Setup\Module; -use Magento\Framework\Model\ModelResource\Type\Db\Pdo\Mysql; +use Magento\Framework\Model\ResourceModel\Type\Db\Pdo\Mysql; use Magento\Framework\Stdlib; use Zend\ServiceManager\ServiceLocatorInterface; -class ConnectionFactory implements \Magento\Framework\Model\ModelResource\Type\Db\ConnectionFactoryInterface +class ConnectionFactory implements \Magento\Framework\Model\ResourceModel\Type\Db\ConnectionFactoryInterface { /** * @var ServiceLocatorInterface diff --git a/setup/src/Magento/Setup/Module/I18n/Dictionary/Phrase.php b/setup/src/Magento/Setup/Module/I18n/Dictionary/Phrase.php index 011de2e22c01ae7a3414b8e73a28eb54914aecf5..55d060c895f8c6a381186585886658c0fd33e4bb 100644 --- a/setup/src/Magento/Setup/Module/I18n/Dictionary/Phrase.php +++ b/setup/src/Magento/Setup/Module/I18n/Dictionary/Phrase.php @@ -237,4 +237,41 @@ class Phrase { return $this->getPhrase() . '::' . $this->getContextType(); } + + /** + * Compile PHP string based on quotes type it enclosed with + * + * @return string + */ + public function getCompiledPhrase() + { + return $this->getCompiledString($this->getPhrase()); + } + + /** + * Compile PHP string based on quotes type it enclosed with + * + * @return string + */ + public function getCompiledTranslation() + { + return $this->getCompiledString($this->getTranslation()); + } + + /** + * Compile PHP string based on quotes type it enclosed with + * + * @param string $string + * @return string + * + * @SuppressWarnings(PHPMD.EvalExpression) + */ + private function getCompiledString($string) + { + $encloseQuote = $this->getQuote() == Phrase::QUOTE_DOUBLE ? Phrase::QUOTE_DOUBLE : Phrase::QUOTE_SINGLE; + + $evalString = 'return ' . $encloseQuote . $string . $encloseQuote . ';'; + $result = @eval($evalString); + return is_string($result) ? $result : $string; + } } diff --git a/setup/src/Magento/Setup/Module/I18n/Dictionary/Writer/Csv.php b/setup/src/Magento/Setup/Module/I18n/Dictionary/Writer/Csv.php index b77daa5fd3512e5fac1e0e0defe8e84362d3b088..a689fa41308f45d1b357e83b55c1a47ca848bc39 100644 --- a/setup/src/Magento/Setup/Module/I18n/Dictionary/Writer/Csv.php +++ b/setup/src/Magento/Setup/Module/I18n/Dictionary/Writer/Csv.php @@ -41,10 +41,7 @@ class Csv implements WriterInterface */ public function write(Phrase $phrase) { - $fields = [$phrase->getPhrase(), $phrase->getTranslation()]; - $encloseQuote = $phrase->getQuote() == Phrase::QUOTE_DOUBLE ? Phrase::QUOTE_DOUBLE : Phrase::QUOTE_SINGLE; - $fields[0] = $this->compileString($fields[0], $encloseQuote); - $fields[1] = $this->compileString($fields[1], $encloseQuote); + $fields = [$phrase->getCompiledPhrase(), $phrase->getCompiledTranslation()]; if (($contextType = $phrase->getContextType()) && ($contextValue = $phrase->getContextValueAsString())) { $fields[] = $contextType; $fields[] = $contextValue; @@ -53,22 +50,6 @@ class Csv implements WriterInterface fputcsv($this->_fileHandler, $fields, ',', '"'); } - /** - * Compile PHP string based on quotes type it enclosed with - * - * @param string $string - * @param string $encloseQuote - * @return string - * - * @SuppressWarnings(PHPMD.EvalExpression) - */ - protected function compileString($string, $encloseQuote) - { - $evalString = 'return ' . $encloseQuote . $string . $encloseQuote . ';'; - $result = @eval($evalString); - return is_string($result) ? $result : $string; - } - /** * Close file handler * diff --git a/setup/src/Magento/Setup/Module/I18n/FilesCollector.php b/setup/src/Magento/Setup/Module/I18n/FilesCollector.php index 3c01889dfd11d4d5b701ad6f3845086e3a02a409..581f8d1628d9062aa2497ea2b660e3fef3219d74 100644 --- a/setup/src/Magento/Setup/Module/I18n/FilesCollector.php +++ b/setup/src/Magento/Setup/Module/I18n/FilesCollector.php @@ -42,7 +42,7 @@ class FilesCollector try { $directoryIterator = new \RecursiveDirectoryIterator( $path, - \FilesystemIterator::SKIP_DOTS | \FilesystemIterator::UNIX_PATHS + \FilesystemIterator::SKIP_DOTS | \FilesystemIterator::UNIX_PATHS | \FilesystemIterator::FOLLOW_SYMLINKS ); $iterator = new \RecursiveIteratorIterator($directoryIterator); } catch (\UnexpectedValueException $valueException) { diff --git a/setup/src/Magento/Setup/Module/I18n/Parser/Parser.php b/setup/src/Magento/Setup/Module/I18n/Parser/Parser.php index 4d11c88ecb6c83a4bc43eb4f8fef226321277a1c..6d1d1611852b3349f90aa8354f106b1e776ebef2 100644 --- a/setup/src/Magento/Setup/Module/I18n/Parser/Parser.php +++ b/setup/src/Magento/Setup/Module/I18n/Parser/Parser.php @@ -37,13 +37,12 @@ class Parser extends AbstractParser protected function _addPhrase($phraseData) { try { - $phraseKey = $phraseData['phrase']; - - $this->_phrases[$phraseKey] = $this->_factory->createPhrase([ + $phrase = $this->_factory->createPhrase([ 'phrase' => $phraseData['phrase'], 'translation' => $phraseData['phrase'], 'quote' => $phraseData['quote'], ]); + $this->_phrases[$phrase->getCompiledPhrase()] = $phrase; } catch (\DomainException $e) { throw new \DomainException( "{$e->getMessage()} in {$phraseData['file']}:{$phraseData['line']}", diff --git a/setup/src/Magento/Setup/Test/Unit/Fixtures/CartPriceRulesFixtureTest.php b/setup/src/Magento/Setup/Test/Unit/Fixtures/CartPriceRulesFixtureTest.php index 12c3759b50c02ff61839332d8814c2280b179e42..2c277f66eeac30e877c24c362dd58b81f8c5ac78 100644 --- a/setup/src/Magento/Setup/Test/Unit/Fixtures/CartPriceRulesFixtureTest.php +++ b/setup/src/Magento/Setup/Test/Unit/Fixtures/CartPriceRulesFixtureTest.php @@ -42,9 +42,9 @@ class CartPriceRulesFixtureTest extends \PHPUnit_Framework_TestCase ->method('getId') ->will($this->returnValue('website_id')); - $contextMock = $this->getMock('\Magento\Framework\Model\ModelResource\Db\Context', [], [], '', false); + $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false); $abstractDbMock = $this->getMockForAbstractClass( - '\Magento\Framework\Model\ModelResource\Db\AbstractDb', + '\Magento\Framework\Model\ResourceModel\Db\AbstractDb', [$contextMock], '', true, diff --git a/setup/src/Magento/Setup/Test/Unit/Fixtures/CatalogPriceRulesFixtureTest.php b/setup/src/Magento/Setup/Test/Unit/Fixtures/CatalogPriceRulesFixtureTest.php index 1c55d224ef07728f5e03cba531ae10f8e019df50..2e6625e107abb257d7d3e71fa431acab49d34dce 100644 --- a/setup/src/Magento/Setup/Test/Unit/Fixtures/CatalogPriceRulesFixtureTest.php +++ b/setup/src/Magento/Setup/Test/Unit/Fixtures/CatalogPriceRulesFixtureTest.php @@ -47,9 +47,9 @@ class CatalogPriceRulesFixtureTest extends \PHPUnit_Framework_TestCase ->method('getWebsites') ->will($this->returnValue([$websiteMock])); - $contextMock = $this->getMock('\Magento\Framework\Model\ModelResource\Db\Context', [], [], '', false); + $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false); $abstractDbMock = $this->getMockForAbstractClass( - '\Magento\Framework\Model\ModelResource\Db\AbstractDb', + '\Magento\Framework\Model\ResourceModel\Db\AbstractDb', [$contextMock], '', true, diff --git a/setup/src/Magento/Setup/Test/Unit/Fixtures/ConfigurableProductsFixtureTest.php b/setup/src/Magento/Setup/Test/Unit/Fixtures/ConfigurableProductsFixtureTest.php index bd05e43a9eb60245f355f8afabdb1f65daf73b52..c5f8b6e18f691e5fa3407bf5d8fc7dd01ddc0bfd 100644 --- a/setup/src/Magento/Setup/Test/Unit/Fixtures/ConfigurableProductsFixtureTest.php +++ b/setup/src/Magento/Setup/Test/Unit/Fixtures/ConfigurableProductsFixtureTest.php @@ -31,9 +31,9 @@ class ConfigurableProductsFixtureTest extends \PHPUnit_Framework_TestCase { $importMock = $this->getMock('\Magento\ImportExport\Model\Import', [], [], '', false); - $contextMock = $this->getMock('\Magento\Framework\Model\ModelResource\Db\Context', [], [], '', false); + $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false); $abstractDbMock = $this->getMockForAbstractClass( - '\Magento\Framework\Model\ModelResource\Db\AbstractDb', + '\Magento\Framework\Model\ResourceModel\Db\AbstractDb', [$contextMock], '', true, diff --git a/setup/src/Magento/Setup/Test/Unit/Fixtures/OrdersFixtureTest.php b/setup/src/Magento/Setup/Test/Unit/Fixtures/OrdersFixtureTest.php index ea923b9b1db15f0bee847c6de5eceba103e77a56..0f787152d07c2139a855e28c662fd911aa3ff2b1 100644 --- a/setup/src/Magento/Setup/Test/Unit/Fixtures/OrdersFixtureTest.php +++ b/setup/src/Magento/Setup/Test/Unit/Fixtures/OrdersFixtureTest.php @@ -132,9 +132,9 @@ class OrdersFixtureTest extends \PHPUnit_Framework_TestCase ->method('getStores') ->willReturn([$storeMock]); - $contextMock = $this->getMock('\Magento\Framework\Model\ModelResource\Db\Context', [], [], '', false); + $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false); $abstractDbMock = $this->getMockForAbstractClass( - '\Magento\Framework\Model\ModelResource\Db\AbstractDb', + '\Magento\Framework\Model\ResourceModel\Db\AbstractDb', [$contextMock], '', true, diff --git a/setup/src/Magento/Setup/Test/Unit/Fixtures/SimpleProductsFixtureTest.php b/setup/src/Magento/Setup/Test/Unit/Fixtures/SimpleProductsFixtureTest.php index dd3d0036829f59c7b190e937d06792a564d4f511..9b144188510ff33a48fa5f7687e72992195eb401 100644 --- a/setup/src/Magento/Setup/Test/Unit/Fixtures/SimpleProductsFixtureTest.php +++ b/setup/src/Magento/Setup/Test/Unit/Fixtures/SimpleProductsFixtureTest.php @@ -49,9 +49,9 @@ class SimpleProductsFixtureTest extends \PHPUnit_Framework_TestCase $importMock = $this->getMock('\Magento\ImportExport\Model\Import', [], [], '', false); - $contextMock = $this->getMock('\Magento\Framework\Model\ModelResource\Db\Context', [], [], '', false); + $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false); $abstractDbMock = $this->getMockForAbstractClass( - '\Magento\Framework\Model\ModelResource\Db\AbstractDb', + '\Magento\Framework\Model\ResourceModel\Db\AbstractDb', [$contextMock], '', true, diff --git a/setup/src/Magento/Setup/Test/Unit/Model/CronScriptReadinessCheckTest.php b/setup/src/Magento/Setup/Test/Unit/Model/CronScriptReadinessCheckTest.php index de55f60784569a655e89cb5d21b2c2d901068ee2..7a881c2b7b47c08c1bbcdb44766edefa6c9e9db0 100644 --- a/setup/src/Magento/Setup/Test/Unit/Model/CronScriptReadinessCheckTest.php +++ b/setup/src/Magento/Setup/Test/Unit/Model/CronScriptReadinessCheckTest.php @@ -34,7 +34,7 @@ class CronScriptReadinessCheckTest extends \PHPUnit_Framework_TestCase { $this->read->expects($this->once()) ->method('readFile') - ->willThrowException(new FileSystemException(new Phrase(''))); + ->willThrowException(new FileSystemException(new Phrase('message'))); $expected = [ 'success' => false, 'error' => 'Cron job has not been configured yet' . CronScriptReadinessCheck::OTHER_CHECKS_WILL_FAIL_MSG @@ -111,7 +111,7 @@ class CronScriptReadinessCheckTest extends \PHPUnit_Framework_TestCase { $this->read->expects($this->once()) ->method('readFile') - ->willThrowException(new FileSystemException(new Phrase(''))); + ->willThrowException(new FileSystemException(new Phrase('message'))); $expected = ['success' => false, 'error' => 'Cron job has not been configured yet']; $this->assertEquals($expected, $this->cronScriptReadinessCheck->checkUpdater()); } diff --git a/setup/src/Magento/Setup/Test/Unit/Model/InstallerFactoryTest.php b/setup/src/Magento/Setup/Test/Unit/Model/InstallerFactoryTest.php index c2daace4b6192bf6563660114e2b204aadb9c254..c2927df015d0b61317ade92a94160cecda9f0cd7 100644 --- a/setup/src/Magento/Setup/Test/Unit/Model/InstallerFactoryTest.php +++ b/setup/src/Magento/Setup/Test/Unit/Model/InstallerFactoryTest.php @@ -58,12 +58,12 @@ class InstallerFactoryTest extends \PHPUnit_Framework_TestCase $this->getMock('Magento\Setup\Model\ObjectManagerProvider', [], [], '', false), ], [ - 'Magento\Framework\Model\ModelResource\Db\TransactionManager', - $this->getMock('Magento\Framework\Model\ModelResource\Db\TransactionManager', [], [], '', false), + 'Magento\Framework\Model\ResourceModel\Db\TransactionManager', + $this->getMock('Magento\Framework\Model\ResourceModel\Db\TransactionManager', [], [], '', false), ], [ - 'Magento\Framework\Model\ModelResource\Db\ObjectRelationProcessor', - $this->getMock('Magento\Framework\Model\ModelResource\Db\ObjectRelationProcessor', [], [], '', false), + 'Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor', + $this->getMock('Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor', [], [], '', false), ], [ 'Magento\Setup\Model\ConfigModel', diff --git a/setup/src/Magento/Setup/Test/Unit/Model/InstallerTest.php b/setup/src/Magento/Setup/Test/Unit/Model/InstallerTest.php index ad7a2aa68dbee8a6adde11cdeaf020bbf5401c16..098e210824389a8848265a9d2b072d53fa24fd2d 100644 --- a/setup/src/Magento/Setup/Test/Unit/Model/InstallerTest.php +++ b/setup/src/Magento/Setup/Test/Unit/Model/InstallerTest.php @@ -144,7 +144,7 @@ class InstallerTest extends \PHPUnit_Framework_TestCase ]; /** - * @var \Magento\Framework\Model\ModelResource\Db\Context|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Model\ResourceModel\Db\Context|\PHPUnit_Framework_MockObject_MockObject */ private $contextMock; @@ -171,7 +171,7 @@ class InstallerTest extends \PHPUnit_Framework_TestCase $this->maintenanceMode = $this->getMock('Magento\Framework\App\MaintenanceMode', [], [], '', false); $this->filesystem = $this->getMock('Magento\Framework\Filesystem', [], [], '', false); $this->objectManager = $this->getMockForAbstractClass('Magento\Framework\ObjectManagerInterface'); - $this->contextMock = $this->getMock('Magento\Framework\Model\ModelResource\Db\Context', [], [], '', false); + $this->contextMock = $this->getMock('Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false); $this->configModel = $this->getMock('Magento\Setup\Model\ConfigModel', [], [], '', false); $this->cleanupFiles = $this->getMock('Magento\Framework\App\State\CleanupFiles', [], [], '', false); $this->dbValidator = $this->getMock('Magento\Setup\Validator\DbValidator', [], [], '', false); diff --git a/setup/src/Magento/Setup/Test/Unit/Model/SystemPackageTest.php b/setup/src/Magento/Setup/Test/Unit/Model/SystemPackageTest.php index 78d59aefd18db5bd3bfd143e1993d0eec5cddae9..e5f521061a5466676fa4f0ca37c6ff67259ae307 100644 --- a/setup/src/Magento/Setup/Test/Unit/Model/SystemPackageTest.php +++ b/setup/src/Magento/Setup/Test/Unit/Model/SystemPackageTest.php @@ -7,7 +7,6 @@ namespace Magento\Setup\Test\Unit\Model; use Magento\Setup\Model\SystemPackage; -use Magento\Composer\InfoCommand; class SystemPackageTest extends \PHPUnit_Framework_TestCase { @@ -85,10 +84,17 @@ class SystemPackageTest extends \PHPUnit_Framework_TestCase public function testGetPackageVersions() { - $package = $this->getMock('\Composer\Package\Package', [], [], '', false); - $package->expects($this->once())->method('getName')->willReturn('magento/product-community-edition'); - $this->composerInformation->expects($this->once())->method('isSystemPackage')->willReturn(true); - $this->repository->expects($this->once())->method('getPackages')->willReturn([$package]); + $communityPackage = $this->getMock('\Composer\Package\Package', [], [], '', false); + $communityPackage->expects($this->once())->method('getName')->willReturn('magento/product-community-edition'); + $enterprisePackage = $this->getMock('\Composer\Package\Package', [], [], '', false); + $enterprisePackage->expects($this->once())->method('getName')->willReturn('magento/product-enterprise-edition'); + $this->composerInformation->expects($this->any())->method('isSystemPackage')->willReturn(true); + $this->composerInformation->expects($this->once())->method('isPackageInComposerJson')->willReturn(true); + $this->repository + ->expects($this->once()) + ->method('getPackages') + ->willReturn([$communityPackage, $enterprisePackage]); + $this->locker->expects($this->once())->method('getLockedRepository')->willReturn($this->repository); $this->composer->expects($this->once())->method('getLocker')->willReturn($this->locker); @@ -109,21 +115,33 @@ class SystemPackageTest extends \PHPUnit_Framework_TestCase $this->systemPackage = new SystemPackage($this->composerAppFactory, $this->composerInformation); $expected = [ - 'package' => 'magento/product-community-edition', - 'versions' => [ - ['id' => '1.2.0', 'name' => 'Version 1.2.0 (latest)'], - ['id' => '1.1.0', 'name' => 'Version 1.1.0'], - ['id' => '1.0.0', 'name' => 'Version 1.0.0 (current)'] + [ + 'package' => 'magento/product-community-edition', + 'versions' => + [ + ['id' => '1.2.0', 'name' => 'Version 1.2.0 CE (latest)'], + ['id' => '1.1.0', 'name' => 'Version 1.1.0 CE'], + ['id' => '1.0.0', 'name' => 'Version 1.0.0 CE (current)'] + ] + ], + [ + 'package' => 'magento/product-enterprise-edition', + 'versions' => + [ + ['id' => '1.2.0', 'name' => 'Version 1.2.0 EE (latest)'], + ['id' => '1.1.0', 'name' => 'Version 1.1.0 EE'], + ['id' => '1.0.0', 'name' => 'Version 1.0.0 EE (current)'] + ] ] ]; - $this->infoCommand->expects($this->once()) + $this->infoCommand->expects($this->at(0)) ->method('run') ->with('magento/product-community-edition') ->willReturn( [ 'name' => 'magento/product-community-edition', - 'descrip.' => 'eCommerce Platform for Growth (Community Edition)', + 'description' => 'eCommerce Platform for Growth (Enterprise Edition)', 'keywords' => '', 'versions' => '1.2.0, 1.1.0, * 1.0.0', 'type' => 'metapackage', @@ -131,15 +149,27 @@ class SystemPackageTest extends \PHPUnit_Framework_TestCase 'source' => '[]', 'names' => 'magento/product-community-edition', 'current_version' => '1.0.0', - 'available_versions' => [ - 1 => '1.2.0', - 2 => '1.1.0', - 3 => '1.0.0', - ], - 'new_versions' => [ - '1.2.0', - '1.1.0' - ] + 'available_versions' => [1 => '1.2.0', 2 => '1.1.0', 3 => '1.0.0'], + 'new_versions' => ['1.2.0', '1.1.0'] + ] + ); + + $this->infoCommand->expects($this->at(1)) + ->method('run') + ->with('magento/product-enterprise-edition') + ->willReturn( + [ + 'name' => 'magento/product-enterprise-edition', + 'description' => 'eCommerce Platform for Growth (Enterprise Edition)', + 'keywords' => '', + 'versions' => '1.2.0, 1.1.0, * 1.0.0', + 'type' => 'metapackage', + 'license' => 'OSL-3.0, AFL-3.0', + 'source' => '[]', + 'names' => 'magento/product-enterprise-edition', + 'current_version' => '1.0.0', + 'available_versions' => [1 => '1.2.0', 2 => '1.1.0', 3 => '1.0.0'], + 'new_versions' => ['1.2.0', '1.1.0'] ] ); @@ -152,12 +182,18 @@ class SystemPackageTest extends \PHPUnit_Framework_TestCase */ public function testGetPackageVersionsFailed() { - $package = $this->getMock('\Composer\Package\Package', [], [], '', false); + $communityPackage = $this->getMock('\Composer\Package\Package', [], [], '', false); + $enterprisePackage = $this->getMock('\Composer\Package\Package', [], [], '', false); - $package->expects($this->once())->method('getName')->willReturn('magento/product-community-edition'); - $this->composerInformation->expects($this->once())->method('isSystemPackage')->willReturn(true); + $communityPackage->expects($this->once())->method('getName')->willReturn('magento/product-community-edition'); + $enterprisePackage->expects($this->once())->method('getName')->willReturn('magento/product-enterprise-edition'); + $this->composerInformation->expects($this->any())->method('isSystemPackage')->willReturn(true); + $this->composerInformation->expects($this->once())->method('isPackageInComposerJson')->willReturn(true); - $this->repository->expects($this->once())->method('getPackages')->willReturn([$package]); + $this->repository + ->expects($this->once()) + ->method('getPackages') + ->willReturn([$communityPackage, $enterprisePackage]); $this->locker->expects($this->once())->method('getLockedRepository')->willReturn($this->repository); @@ -185,4 +221,68 @@ class SystemPackageTest extends \PHPUnit_Framework_TestCase $this->systemPackage->getPackageVersions(); } + + /** + * @param string $ceCurrentVersion + * @param array $expectedResult + * + * @dataProvider getAllowedEnterpriseVersionsDataProvider + */ + public function testGetAllowedEnterpriseVersions($ceCurrentVersion, $expectedResult) + { + $this->composerAppFactory->expects($this->once()) + ->method('createInfoCommand') + ->willReturn($this->infoCommand); + $this->systemPackage = new SystemPackage($this->composerAppFactory, $this->composerInformation); + $this->infoCommand->expects($this->once()) + ->method('run') + ->with('magento/product-enterprise-edition') + ->willReturn(['available_versions' => ['1.0.0', '1.0.1', '1.0.2']]); + $require = $this->getMock('\Composer\Package\Link', [], [], '', false); + $constraintMock = $this->getMock('\Composer\Package\LinkConstraint\VersionConstraint', [], [], '', false); + $constraintMock->expects($this->any())->method('getPrettyString') + ->willReturn('1.0.1'); + $require->expects($this->any()) + ->method('getConstraint') + ->willReturn($constraintMock); + + $this->composerInformation->expects($this->any()) + ->method('getPackageRequirements') + ->willReturn(['magento/product-community-edition' => $require]); + $this->assertEquals( + $expectedResult, + $this->systemPackage->getAllowedEnterpriseVersions($ceCurrentVersion) + ); + } + + /** + * @return array + */ + public function getAllowedEnterpriseVersionsDataProvider() + { + return [ + ['2.0.0', []], + ['1.0.0', [ + [ + 'package' => 'magento/product-enterprise-edition', + 'versions' => [ + [ + 'id' => '1.0.2', + 'name' => 'Version 1.0.2 EE (latest)' + ], + [ + 'id' => '1.0.1', + 'name' => 'Version 1.0.1 EE' + ], + [ + + 'id' => '1.0.0', + 'name' => 'Version 1.0.0 EE' + ] + ] + ] + ] + ] + ]; + } } diff --git a/setup/src/Magento/Setup/Test/Unit/Module/I18n/Dictionary/Writer/CsvTest.php b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Dictionary/Writer/CsvTest.php index 5edc74cb629394097225f22bc7d8e42211d7fdd1..095d51ef3efa2b76fb41e9a30f9abdb80ede7210 100644 --- a/setup/src/Magento/Setup/Test/Unit/Module/I18n/Dictionary/Writer/CsvTest.php +++ b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Dictionary/Writer/CsvTest.php @@ -67,16 +67,16 @@ class CsvTest extends \PHPUnit_Framework_TestCase $this->_phraseFirstMock->expects( $this->once() )->method( - 'getPhrase' + 'getCompiledPhrase' )->will( - $this->returnValue("phrase1_quote\\'") + $this->returnValue("phrase1_quote'") ); $this->_phraseFirstMock->expects( $this->once() )->method( - 'getTranslation' + 'getCompiledTranslation' )->will( - $this->returnValue("translation1_quote\\'") + $this->returnValue("translation1_quote'") ); $this->_phraseFirstMock->expects( $this->once() @@ -96,16 +96,16 @@ class CsvTest extends \PHPUnit_Framework_TestCase $this->_phraseSecondMock->expects( $this->once() )->method( - 'getPhrase' + 'getCompiledPhrase' )->will( - $this->returnValue("phrase2_quote\\'") + $this->returnValue("phrase2_quote'") ); $this->_phraseSecondMock->expects( $this->once() )->method( - 'getTranslation' + 'getCompiledTranslation' )->will( - $this->returnValue("translation2_quote\\'") + $this->returnValue("translation2_quote'") ); $this->_phraseSecondMock->expects( $this->once() @@ -142,38 +142,26 @@ EXPECTED; public function testWriteWithoutContext() { - $this->_phraseFirstMock->expects($this->once())->method('getPhrase')->will($this->returnValue('phrase1')); - $this->_phraseFirstMock->expects( - $this->once() - )->method( - 'getTranslation' - )->will( - $this->returnValue('translation1') - ); + $this->_phraseFirstMock->expects($this->once()) + ->method('getCompiledPhrase') + ->willReturn('phrase1'); + $this->_phraseFirstMock->expects($this->once()) + ->method('getCompiledTranslation') + ->willReturn('translation1'); $this->_phraseFirstMock->expects($this->once())->method('getContextType')->will($this->returnValue('')); - $this->_phraseSecondMock->expects($this->once())->method('getPhrase')->will($this->returnValue('phrase2')); - $this->_phraseSecondMock->expects( - $this->once() - )->method( - 'getTranslation' - )->will( - $this->returnValue('translation2') - ); - $this->_phraseSecondMock->expects( - $this->once() - )->method( - 'getContextType' - )->will( - $this->returnValue('context_type2') - ); - $this->_phraseSecondMock->expects( - $this->once() - )->method( - 'getContextValueAsString' - )->will( - $this->returnValue('') - ); + $this->_phraseSecondMock->expects($this->once()) + ->method('getCompiledPhrase') + ->willReturn('phrase2'); + $this->_phraseSecondMock->expects($this->once()) + ->method('getCompiledTranslation') + ->willReturn('translation2'); + $this->_phraseSecondMock->expects($this->once()) + ->method('getContextType') + ->willReturn('context_type2'); + $this->_phraseSecondMock->expects($this->once()) + ->method('getContextValueAsString') + ->willReturn(''); $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this); /** @var \Magento\Setup\Module\I18n\Dictionary\Writer\Csv $writer */ diff --git a/setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/ParserTest.php b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/ParserTest.php index 5b03113a86248211a8c24a2910b57d142305a3b3..b6c2fdb0c4a2cf3138e6528633720fff3a60d5f5 100644 --- a/setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/ParserTest.php +++ b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/ParserTest.php @@ -42,10 +42,11 @@ class ParserTest extends \PHPUnit_Framework_TestCase * @param array $jsFiles * @param array $phpMap * @param array $jsMap + * @paran array $phraseFactoryMap * @param array $expectedResult * @dataProvider addPhraseDataProvider */ - public function testAddPhrase($options, $phpFiles, $jsFiles, $phpMap, $jsMap, $expectedResult) + public function testAddPhrase($options, $phpFiles, $jsFiles, $phpMap, $jsMap, $phraseFactoryMap, $expectedResult) { // 1. Create mocks $phpAdapter = new AdapterStub; @@ -59,16 +60,10 @@ class ParserTest extends \PHPUnit_Framework_TestCase $phpAdapter->setValueMap($phpMap); $jsAdapter->setValueMap($jsMap); - $this->factory->expects($this->any())->method('createPhrase')->with()->will($this->returnValueMap([ - [['phrase' => 'php phrase111', 'translation' => 'php phrase111', 'quote' => "'"], 'php phrase111'], - [['phrase' => 'php phrase112', 'translation' => 'php phrase112', 'quote' => '"'], 'php phrase112'], - [['phrase' => 'php phrase121', 'translation' => 'php phrase121', 'quote' => "'"], 'php phrase121'], - [['phrase' => 'php phrase122', 'translation' => 'php phrase122', 'quote' => '"'], 'php phrase122'], - [['phrase' => 'js phrase111', 'translation' => 'js phrase111', 'quote' => "'"], 'js phrase111'], - [['phrase' => 'js phrase112', 'translation' => 'js phrase112', 'quote' => '"'], 'js phrase112'], - [['phrase' => 'js phrase121', 'translation' => 'js phrase121', 'quote' => "'"], 'js phrase121'], - [['phrase' => 'js phrase122', 'translation' => 'js phrase122', 'quote' => '"'], 'js phrase122'], - ])); + $this->factory->expects($this->any()) + ->method('createPhrase') + ->with() + ->willReturnMap($phraseFactoryMap); //4. Set expectations $this->filesCollector->expects($this->any()) @@ -87,15 +82,33 @@ class ParserTest extends \PHPUnit_Framework_TestCase */ public function addPhraseDataProvider() { + $phraseMock1 = $this->getMock('Magento\Setup\Module\I18n\Dictionary\Phrase', [], [], '', false); + $phraseMock2 = $this->getMock('Magento\Setup\Module\I18n\Dictionary\Phrase', [], [], '', false); + $phraseMock3 = $this->getMock('Magento\Setup\Module\I18n\Dictionary\Phrase', [], [], '', false); + $phraseMock4 = $this->getMock('Magento\Setup\Module\I18n\Dictionary\Phrase', [], [], '', false); + $phraseMock5 = $this->getMock('Magento\Setup\Module\I18n\Dictionary\Phrase', [], [], '', false); + $phraseMock6 = $this->getMock('Magento\Setup\Module\I18n\Dictionary\Phrase', [], [], '', false); + $phraseMock7 = $this->getMock('Magento\Setup\Module\I18n\Dictionary\Phrase', [], [], '', false); + $phraseMock8 = $this->getMock('Magento\Setup\Module\I18n\Dictionary\Phrase', [], [], '', false); + + $phraseMock1->expects($this->any())->method('getCompiledPhrase')->willReturn('php phrase111'); + $phraseMock2->expects($this->any())->method('getCompiledPhrase')->willReturn('php phrase112'); + $phraseMock3->expects($this->any())->method('getCompiledPhrase')->willReturn('php phrase121'); + $phraseMock4->expects($this->any())->method('getCompiledPhrase')->willReturn('php phrase122'); + $phraseMock5->expects($this->any())->method('getCompiledPhrase')->willReturn('js phrase111'); + $phraseMock6->expects($this->any())->method('getCompiledPhrase')->willReturn('js phrase112'); + $phraseMock7->expects($this->any())->method('getCompiledPhrase')->willReturn('js phrase121'); + $phraseMock8->expects($this->any())->method('getCompiledPhrase')->willReturn('js phrase122'); + return [ [ - [ + 'options' => [ ['type' => 'php', 'paths' => ['php/path/1', 'php/path/2']], ['type' => 'js', 'paths' => ['js/path/1', 'js/path/2']], ], - ['php/path1/file11', 'php/path1/file12', 'php/path2/file21'], - ['js/path1/file11', 'js/path1/file12', 'js/path2/file21'], - [ + 'phpFiles' => ['php/path1/file11', 'php/path1/file12', 'php/path2/file21'], + 'jsFiles' => ['js/path1/file11', 'js/path1/file12', 'js/path2/file21'], + 'phpMap' => [ 'php/path1/file11' => [ [ 'phrase' => 'php phrase111', @@ -116,7 +129,7 @@ class ParserTest extends \PHPUnit_Framework_TestCase ], 'php/path2/file21' => [] ], - [ + 'jsMap' => [ 'js/path1/file11' => [ [ 'phrase' => 'js phrase111', @@ -137,16 +150,26 @@ class ParserTest extends \PHPUnit_Framework_TestCase ], 'js/path2/file21' => [] ], - [ - 'php phrase111' => 'php phrase111', - 'php phrase112' => 'php phrase112', - 'php phrase121' => 'php phrase121', - 'php phrase122' => 'php phrase122', - 'js phrase111' => 'js phrase111', - 'js phrase112' => 'js phrase112', - 'js phrase121' => 'js phrase121', - 'js phrase122' => 'js phrase122', - ] + 'phraseFactoryMap' => [ + [['phrase' => 'php phrase111', 'translation' => 'php phrase111', 'quote' => "'"], $phraseMock1], + [['phrase' => 'php phrase112', 'translation' => 'php phrase112', 'quote' => '"'], $phraseMock2], + [['phrase' => 'php phrase121', 'translation' => 'php phrase121', 'quote' => "'"], $phraseMock3], + [['phrase' => 'php phrase122', 'translation' => 'php phrase122', 'quote' => '"'], $phraseMock4], + [['phrase' => 'js phrase111', 'translation' => 'js phrase111', 'quote' => "'"], $phraseMock5], + [['phrase' => 'js phrase112', 'translation' => 'js phrase112', 'quote' => '"'], $phraseMock6], + [['phrase' => 'js phrase121', 'translation' => 'js phrase121', 'quote' => "'"], $phraseMock7], + [['phrase' => 'js phrase122', 'translation' => 'js phrase122', 'quote' => '"'], $phraseMock8], + ], + 'expectedResult' => [ + 'php phrase111' => $phraseMock1, + 'php phrase112' => $phraseMock2, + 'php phrase121' => $phraseMock3, + 'php phrase122' => $phraseMock4, + 'js phrase111' => $phraseMock5, + 'js phrase112' => $phraseMock6, + 'js phrase121' => $phraseMock7, + 'js phrase122' => $phraseMock8, + ], ] ]; } diff --git a/setup/view/magento/setup/home.phtml b/setup/view/magento/setup/home.phtml index 4dd3b27962e6aa187f2dab585833e5eea1041a9a..42387438af536bcd846f9dd07974d3c1c553e495 100644 --- a/setup/view/magento/setup/home.phtml +++ b/setup/view/magento/setup/home.phtml @@ -6,27 +6,27 @@ ?> <section class="home-page-inner-wrap ng-scope"> - <p class="upgrade-home-title"> + <p class="setup-home-title"> Welcome to the Magento Setup Tool. Please choose a task below. </p> <div class="row" style="padding-left: 145px;" > <div class="col-m-4"> - <a href="" class="upgrade-home-item upgrade-home-item-component" ui-sref="root.update"> - <span class="upgrade-home-item-title">Component Manager</span> - <span class="upgrade-home-item-description">I want to manage my packages and modules.</span> + <a href="" class="setup-home-item setup-home-item-component" ui-sref="root.update"> + <span class="setup-home-item-title">Component Manager</span> + <span class="setup-home-item-description">I want to manage my packages and modules.</span> </a> </div> <div class="col-m-4"> - <a href="" class="upgrade-home-item upgrade-home-item-upgrade" ui-sref="root.upgrade"> - <span class="upgrade-home-item-title">System Upgrade</span> - <span class="upgrade-home-item-description">I want to upgrade my Magento Admin version.</span> + <a href="" class="setup-home-item setup-home-item-upgrade" ui-sref="root.upgrade"> + <span class="setup-home-item-title">System Upgrade</span> + <span class="setup-home-item-description">I want to upgrade my Magento Admin version.</span> </a> </div> <div class="col-m-4"> - <a href="" class="upgrade-home-item upgrade-home-item-configuration" ui-sref="root.system-config"> - <span class="upgrade-home-item-title">System Configuration</span> - <span class="upgrade-home-item-description">I want to change my Magento system configurations.</span> + <a href="" class="setup-home-item setup-home-item-configuration" ui-sref="root.system-config"> + <span class="setup-home-item-title">System Configuration</span> + <span class="setup-home-item-description">I want to change my Magento system configurations.</span> </a> </div> </div> diff --git a/setup/view/magento/setup/navigation/menu.phtml b/setup/view/magento/setup/navigation/menu.phtml index d3ea9768c9aa8a4d298a2ba055aefc8d5200a731..b69df93fae2d04ff926866186f68a1a480c3b585 100644 --- a/setup/view/magento/setup/navigation/menu.phtml +++ b/setup/view/magento/setup/navigation/menu.phtml @@ -17,8 +17,8 @@ </head> -<div> - <nav ng-controller="navigationController" id="menu" class="nav ng-scope show" + +<nav ng-controller="navigationController" id="menu" class="nav ng-scope show" ng-hide="$state.current.noMenu || $state.current.main || $state.current.default"> <ul class="nav-bar"> <li ng-repeat="menuState in menu | filter: {type: $state.current.type}:true" @@ -29,4 +29,4 @@ </li> </ul> </nav> -</div> + diff --git a/setup/view/magento/setup/select-version.phtml b/setup/view/magento/setup/select-version.phtml index 7a2f7db61910a64ff7fed4217645d252d97e38bc..b1a8367978eca34216985dc1a72da77e5d42a2aa 100644 --- a/setup/view/magento/setup/select-version.phtml +++ b/setup/view/magento/setup/select-version.phtml @@ -5,8 +5,6 @@ */ ?> -<h2 class="page-title">{{$state.current.header}}</h2> - <div class="nav-bar-outer-actions"> <div class="outer-actions-inner-wrap"> @@ -30,6 +28,8 @@ </div> </div> +<h2 class="page-sub-title">{{$state.current.header}}</h2> + <div class="row form-row"> <div class="message message-spinner" ng-show="!upgradeProcessed"> <span class="spinner"> @@ -54,7 +54,7 @@ id="selectVersion" class="form-el-select" ng-model="selectedOption" - ng-options="item.id as item.name for item in versions"> + ng-options="item.versionInfo as item.version.name for item in versions"> </select> </div> </div>