From 86db2edd1768a0d5fbab69fbf565552bc5d7a75d Mon Sep 17 00:00:00 2001 From: mage2-team Date: Fri, 13 Dec 2013 16:27:51 -0800 Subject: [PATCH] 2.0.0.0-dev56 * Fixed bugs: * Fixed placing order with PayPal Payments Advanced and Payflow Link * Fixed losing previously assigned categories after saving the product with changed category selector field * Fixed losing of a newly created category assignment after variations generation during Configurable product or Gift Card creation * Fixed the error in order placement with Recurring profile payment * GitHub requests: * [#299](https://github.com/magento/magento2/pull/299) -- Fix for issue Refactor Mage_Rating_Model_Resource_Rating_Collection * [#341](https://github.com/magento/magento2/pull/341) -- Replacing simple preg calls with less expensive alternates * Modularity improvements: * Layout page type config moved to library * Design loader moved to library * Theme label moved to library * Themes update: * Reduced amount of templates and layouts in magento_plushe theme * Responsive design improvements * Integrity improvements: * Covered all Magento classes with argument sequence validator * Added arguments type duplication validator * Implemented API Integration UX flows: * Ability to create and edit API Integrations * Ability to delete API integrations that were not created using configuration files * Removed System REST menu item and all associated UX flows: * Users, Roles, and Webhook Subscriptions sub-menu items were removed * Removed the Webhook module --- CHANGELOG.md | 36 +- .../Adminhtml/Block/Urlrewrite/Edit/Form.php | 2 +- .../Magento/Authorizenet/Model/Directpost.php | 79 +- .../Authorizenet/Model/Directpost/Session.php | 6 +- .../Magento/Authz/Service/AuthorizationV1.php | 39 + .../Service/AuthorizationV1Interface.php | 8 + .../Magento/Backend/App/Action/Context.php | 16 +- .../Backend/App/Router/DefaultRouter.php | 25 +- app/code/Magento/Backend/Block/Context.php | 6 +- .../Block/System/Config/Form/Field/Export.php | 10 +- .../Config/Form/Field/Regexceptions.php | 8 +- .../Block/System/Design/Edit/Tab/General.php | 8 +- .../Block/System/Store/Delete/Form.php | 2 +- .../Block/System/Store/Edit/AbstractForm.php | 2 +- .../Block/System/Variable/Edit/Form.php | 2 +- .../Backend/Block/Template/Context.php | 30 +- .../Backend/Block/Widget/Container.php | 4 +- .../Block/Widget/Grid/Column/Filter/Theme.php | 8 +- .../Widget/Grid/Massaction/Additional.php | 6 +- .../System/Config/System/Storage.php | 1 + .../Backend/Model/Config/Structure/Reader.php | 13 +- app/code/Magento/Backend/Model/Locale.php | 20 +- .../Backend/Model/Menu/Config/Reader.php | 13 +- app/code/Magento/Backend/Model/Url.php | 16 +- .../Magento/Backend/etc/adminhtml/system.xml | 2 +- app/code/Magento/Backend/etc/di.xml | 1 + .../Magento/Bundle/Model/Product/Price.php | 4 +- .../Block/Adminhtml/Category/Helper/Image.php | 14 +- .../Form/Renderer/Attribute/Urlkey.php | 4 +- .../Block/Adminhtml/Helper/Form/Wysiwyg.php | 18 +- .../Adminhtml/Helper/Form/Wysiwyg/Content.php | 2 +- .../Adminhtml/Product/Attribute/Edit/Form.php | 2 +- .../Product/Attribute/Edit/Tab/Advanced.php | 2 +- .../Product/Attribute/Edit/Tab/Front.php | 2 +- .../Adminhtml/Product/Edit/NewCategory.php | 2 +- .../Product/Helper/Form/BaseImage.php | 10 +- .../Product/Helper/Form/Category.php | 23 +- .../Adminhtml/Product/Helper/Form/Gallery.php | 18 +- .../Adminhtml/Product/Helper/Form/Price.php | 18 +- .../Adminhtml/Product/Helper/Form/Weight.php | 12 +- .../Block/Adminhtml/Search/Edit/Form.php | 2 +- .../Magento/Catalog/Block/Category/View.php | 6 +- .../Block/Product/ProductList/Upsell.php | 4 +- .../Attribute/Backend/Customlayoutupdate.php | 17 +- .../Catalog/Model/Attribute/Config/Reader.php | 38 +- .../Catalog/Model/Category/Indexer/Flat.php | 1 + .../Catalog/Model/Layer/Filter/Price.php | 6 +- .../Product/Attribute/Backend/Groupprice.php | 15 +- .../Backend/Groupprice/AbstractGroupprice.php | 8 +- .../Product/Attribute/Backend/Startdate.php | 10 +- .../Product/Attribute/Backend/Tierprice.php | 15 +- .../Catalog/Model/Product/Indexer/Flat.php | 1 + .../Model/Product/Option/Type/Date.php | 6 +- .../Model/Product/Option/Type/File.php | 12 +- .../Model/Product/Option/Type/Select.php | 4 +- .../Model/Product/Type/AbstractType.php | 2 +- .../Model/Product/Type/Configurable.php | 43 +- .../Model/Product/Type/Configurable/Price.php | 2 +- .../Catalog/Model/Product/Type/Grouped.php | 31 +- .../Model/Product/Type/Grouped/Price.php | 2 +- .../Catalog/Model/Product/Type/Price.php | 6 +- .../Model/ProductOptions/Config/Reader.php | 13 +- .../Model/ProductTypes/Config/Reader.php | 13 +- .../Catalog/Model/Resource/Category/Flat.php | 1 + .../Product/Attribute/Backend/Image.php | 6 +- .../Product/Attribute/Backend/Urlkey.php | 10 +- app/code/Magento/Catalog/Model/Session.php | 6 +- .../Magento/Catalog/Model/Template/Filter.php | 8 +- .../frontend/layout/catalog_product_view.xml | 58 +- .../Block/Adminhtml/Form/Field/Stock.php | 18 +- .../Adminhtml/Promo/Catalog/Edit/Form.php | 2 +- .../Magento/CatalogRule/Model/Observer.php | 4 +- .../Model/Rule/Action/Collection.php | 6 +- .../Model/Rule/Condition/Combine.php | 4 +- .../CatalogSearch/Block/Autocomplete.php | 5 +- .../Magento/CatalogSearch/Block/Layer.php | 3 - .../Block/Adminhtml/Agreement/Edit/Form.php | 2 +- .../Checkout/Block/Onepage/Success.php | 15 +- .../Checkout/view/frontend/js/opcheckout.js | 239 ++- .../frontend/layout/checkout_cart_index.xml | 1 + .../view/frontend/onepage/billing.phtml | 2 +- .../view/frontend/onepage/login.phtml | 2 +- .../view/frontend/onepage/review/button.phtml | 2 +- .../Checkout/view/frontend/success.phtml | 60 +- .../Cms/Block/Adminhtml/Block/Edit/Form.php | 2 +- .../Cms/Block/Adminhtml/Page/Edit/Form.php | 2 +- .../Block/Adminhtml/Page/Edit/Tab/Design.php | 8 +- .../Adminhtml/Extension/Custom/Edit/Form.php | 2 +- .../frontend/layout/contacts_index_index.xml | 9 +- .../Magento/Core/App/Action/Plugin/Design.php | 6 +- app/code/Magento/Core/Helper/Url.php | 5 +- app/code/Magento/Core/Model/App.php | 4 +- .../Core/Model/DataService/Config/Reader.php | 8 +- app/code/Magento/Core/Model/File/Uploader.php | 8 +- app/code/Magento/Core/Model/Layout.php | 2 +- .../Model/Layout/Argument/AbstractHandler.php | 3 +- .../Layout/Argument/Handler/ArrayHandler.php | 6 +- .../Argument/HandlerFactoryInterface.php | 43 - .../Core/Model/Layout/Argument/Processor.php | 6 +- app/code/Magento/Core/Model/Layout/Merge.php | 22 + .../Model/Locale/Hierarchy/Config/Reader.php | 21 +- .../Core/Model/Resource/Theme/Collection.php | 16 +- app/code/Magento/Core/Model/Session.php | 8 +- .../Magento/Core/Model/Session/Generic.php | 6 +- .../Magento/Core/Model/Theme/Collection.php | 17 +- .../Core/Model/Theme/Domain/Physical.php | 6 +- .../Core/Model/Theme/Domain/Staging.php | 6 +- .../Core/Model/Theme/Domain/Virtual.php | 6 +- .../Magento/Core/Model/Theme/Source/Theme.php | 6 +- app/code/Magento/Core/Model/View/Design.php | 46 - app/code/Magento/Core/etc/di.xml | 14 +- .../Core/view/frontend}/template.phtml | 0 .../Magento/Cron/Model/Config/Reader/Xml.php | 23 +- .../Customer/Block/Adminhtml/Edit/Form.php | 2 +- .../Block/Adminhtml/Form/Element/File.php | 12 +- app/code/Magento/Customer/Model/Session.php | 12 +- .../view/frontend}/account/customer.phtml | 4 +- .../view/frontend/form/confirmation.phtml | 2 +- .../Customer/view/frontend/form/edit.phtml | 2 +- .../view/frontend/form/forgotpassword.phtml | 2 +- .../Customer/view/frontend/form/login.phtml | 2 +- .../view/frontend/form/register.phtml | 2 +- .../view/frontend/layout/customer_account.xml | 9 +- .../frontend/layout/customer_address_form.xml | 5 + .../Customer/view/frontend/layout/default.xml | 5 + .../Element/Composite/AbstractComposite.php | 10 +- .../Adminhtml/Editor/Tools/Code/Custom.php | 2 +- .../Editor/Tools/Code/ImageSizing.php | 2 +- .../Block/Adminhtml/Editor/Tools/Code/Js.php | 2 +- .../Adminhtml/System/Design/Editor.php | 8 +- .../Controller/Varien/Router/Standard.php | 20 +- .../Editor/Tools/QuickStyles/Form/Builder.php | 4 +- .../QuickStyles/Form/Element/Factory.php | 2 +- app/code/Magento/DesignEditor/Model/State.php | 4 +- .../DesignEditor/Model/Theme/Context.php | 6 +- .../DesignEditor/Model/Url/NavigationMode.php | 6 +- app/code/Magento/DesignEditor/etc/di.xml | 2 +- .../Downloadable/Model/Product/Price.php | 2 +- .../frontend/customer/products/list.phtml | 2 +- .../layout/downloadable_customer_products.xml | 2 +- .../Attribute/Edit/Main/AbstractMain.php | 2 +- .../Eav/Model/Attribute/Data/Multiselect.php | 1 + app/code/Magento/Email/Model/Sender.php | 2 +- .../Email/Model/Template/Config/Reader.php | 33 +- .../Magento/Email/Model/Template/Filter.php | 9 +- .../Adminhtml/Product/Helper/Form/Config.php | 10 +- .../Magento/GiftMessage/Model/Message.php | 4 +- app/code/Magento/GoogleAnalytics/Block/Ga.php | 2 +- .../GoogleAnalytics/Model/Observer.php | 6 +- .../GoogleCheckout/Model/Api/Xml/Callback.php | 12 +- .../GoogleCheckout/Model/Api/Xml/Checkout.php | 12 +- .../Magento/GoogleCheckout/Model/Payment.php | 6 +- .../GoogleShopping/Model/Service/Item.php | 4 +- .../Block/Adminhtml/Export/Edit/Form.php | 2 +- .../Block/Adminhtml/Import/Edit/Form.php | 2 +- .../Model/Export/Config/Reader.php | 15 +- .../Model/Export/Entity/Product.php | 2 + .../Model/Import/Config/Reader.php | 15 +- .../Entity/Product/Type/Configurable.php | 6 +- .../Import/Entity/Product/Type/Grouped.php | 9 +- .../Block/Adminhtml/Process/Edit/Form.php | 2 +- .../Index/Model/Indexer/Config/Reader.php | 13 +- app/code/Magento/Index/Model/Shell.php | 6 +- .../Install/App/Action/Plugin/Design.php | 18 +- app/code/Magento/Install/etc/di.xml | 1 + .../Integration/Activate/Permissions/Tabs.php | 2 +- .../Block/Adminhtml/Integration/Edit.php | 52 +- .../Block/Adminhtml/Integration/Edit/Form.php | 2 +- .../Adminhtml/Integration/Edit/Tab/Info.php | 121 +- .../Block/Adminhtml/Integration/Token.php | 82 - .../Block/Adminhtml/Integration/Tokens.php | 123 ++ .../Widget/Grid/Column/Renderer/Button.php | 15 +- .../Grid/Column/Renderer/Button/Delete.php | 16 +- .../Grid/Column/Renderer/Button/Edit.php | 19 +- .../Renderer/Button/IntegrationAbstract.php | 46 - .../Controller/Adminhtml/Integration.php | 218 +- app/code/Magento/Integration/Helper/Data.php | 14 + .../Integration/Helper/Oauth/Consumer.php | 144 -- .../Integration/Model/Config/Reader.php | 25 +- .../Magento/Integration/Model/Integration.php | 16 +- .../Magento/Integration/Model/Manager.php | 8 +- .../Magento/Integration/Model/Oauth/Token.php | 83 +- .../Model/Oauth/Token/Provider.php | 8 +- .../Integration/Service/IntegrationV1.php | 100 +- .../Service/IntegrationV1Interface.php | 24 +- .../Magento/Integration/Service/OauthV1.php | 234 +++ .../Integration/Service/OauthV1Interface.php | 94 + app/code/Magento/Integration/etc/cache.xml | 2 +- app/code/Magento/Integration/etc/di.xml | 1 + .../view/adminhtml/integration.css | 8 + .../integration/popup_container.phtml | 7 +- .../view/adminhtml/js/integration.js | 106 +- .../layout/adminhtml_integration_edit.xml | 4 +- .../adminhtml_integration_grid_block.xml | 3 +- .../layout/adminhtml_integration_index.xml | 6 +- .../layout/adminhtml_integration_new.xml | 15 + ...minhtml_integration_permissionsdialog.xml} | 0 ...=> adminhtml_integration_tokensdialog.xml} | 2 +- app/code/Magento/Log/Model/Shell.php | 8 +- .../Block/Adminhtml/Queue/Preview/Form.php | 4 +- .../Block/Adminhtml/Template/Edit/Form.php | 2 +- .../Block/Adminhtml/Template/Preview/Form.php | 2 +- app/code/Magento/Newsletter/Model/Session.php | 8 +- .../Newsletter/view/frontend/subscribe.phtml | 2 +- app/code/Magento/Ogone/Model/Api.php | 6 +- app/code/Magento/Ogone/Model/Config.php | 10 +- .../frontend/layout/catalog_product_view.xml | 2 +- .../Magento/Paygate/Model/Authorizenet.php | 49 +- app/code/Magento/Payment/Model/Method/Cc.php | 14 +- .../Paypal/Block/Standard/Redirect.php | 2 +- app/code/Magento/Paypal/Model/Direct.php | 20 +- app/code/Magento/Paypal/Model/Hostedpro.php | 20 +- app/code/Magento/Paypal/Model/Info.php | 1 + app/code/Magento/Paypal/Model/Payflowlink.php | 20 +- app/code/Magento/Paypal/Model/Payflowpro.php | 22 +- .../Paypal/view/frontend/express/review.phtml | 2 +- .../frontend/express/review/address.phtml | 2 +- .../view/frontend/hss/review/button.phtml | 2 +- app/code/Magento/PaypalUk/Model/Api/Nvp.php | 19 +- app/code/Magento/PaypalUk/Model/Express.php | 17 +- .../view/frontend/remember-me-popup.js | 6 +- .../view/frontend/remember_me_tooltip.phtml | 1 + .../Rating/Block/Adminhtml/Edit/Form.php | 2 +- .../Rating/Block/Adminhtml/Edit/Tab/Form.php | 2 - .../Model/Resource/Rating/Collection.php | 61 +- .../Reports/Block/Adminhtml/Filter/Form.php | 2 +- .../Review/Block/Adminhtml/Edit/Form.php | 2 +- app/code/Magento/Review/etc/module.xml | 1 - .../Review/view/frontend/customer/list.phtml | 2 +- .../frontend/layout/review_customer_index.xml | 2 +- .../frontend/layout/review_customer_view.xml | 2 +- .../frontend/layout/review_product_list.xml | 43 +- .../frontend/layout/review_product_view.xml | 6 +- .../view/frontend/product/view/other.phtml | 6 +- .../Magento/Rule/Model/Action/Collection.php | 4 +- .../Condition/Product/AbstractProduct.php | 4 +- .../Rule/Model/Resource/AbstractResource.php | 2 +- .../Adminhtml/Order/Status/Assign/Form.php | 2 +- .../Adminhtml/Order/Status/NewStatus/Form.php | 2 +- .../Magento/Sales/Model/Config/Reader.php | 15 +- .../Sales/Model/Order/Total/Config/Base.php | 6 +- app/code/Magento/Sales/Model/Quote.php | 4 +- .../Model/Quote/Address/Total/Collector.php | 14 +- .../view/frontend/billing/agreements.phtml | 3 +- .../Sales/view/frontend/guest/form.phtml | 2 +- .../layout/sales_billing_agreement_index.xml | 7 +- .../layout/sales_billing_agreement_view.xml | 7 +- .../layout/sales_order_creditmemo.xml | 2 +- .../frontend/layout/sales_order_history.xml | 2 +- .../frontend/layout/sales_order_invoice.xml | 2 +- .../frontend/layout/sales_order_shipment.xml | 2 +- .../view/frontend/layout/sales_order_view.xml | 2 +- .../layout/sales_recurring_profile_index.xml | 7 +- .../sales_recurring_profile_view__tabs.xml | 2 +- .../Sales/view/frontend/order/history.phtml | 2 +- .../view/frontend/order/print/shipment.phtml | 3 - .../Sales/view/frontend/order/recent.phtml | 2 +- .../view/frontend/widget/guest/form.phtml | 2 +- .../Block/Adminhtml/Promo/Quote/Edit/Form.php | 2 +- .../Adminhtml/Promo/Quote/Edit/Tab/Labels.php | 17 - .../Quote/Edit/Tab/Main/Renderer/Checkbox.php | 20 +- .../Model/Rule/Action/Collection.php | 6 +- .../Model/Rule/Condition/Combine.php | 4 +- .../Model/Rule/Condition/Product.php | 6 +- .../Sendfriend/view/frontend/send.phtml | 2 +- .../Shipping/Model/Shipping/Labels.php | 6 +- .../Sitemap/Block/Adminhtml/Edit/Form.php | 2 +- .../Block/Adminhtml/Rate/Title/Fieldset.php | 14 +- .../Tax/Block/Adminhtml/Rule/Edit/Form.php | 2 +- .../Tax/Model/Sales/Pdf/Grandtotal.php | 4 +- .../Magento/Tax/Model/Sales/Pdf/Shipping.php | 4 +- app/code/Magento/Tax/Model/Sales/Pdf/Tax.php | 4 +- .../System/Design/Theme/Edit/Form.php | 2 +- .../Design/Theme/Edit/Form/Element/Image.php | 10 +- .../Design/Theme/Edit/Form/Element/Links.php | 10 +- app/code/Magento/Theme/Model/Config.php | 6 +- .../Theme => Theme/Model}/CopyService.php | 4 +- .../Magento/Theme/view/frontend/1column.phtml | 2 +- .../Theme/view/frontend/2columns-left.phtml | 2 +- .../Theme/view/frontend/2columns-right.phtml | 2 +- .../Theme/view/frontend/3columns.phtml | 2 +- .../Magento/Theme/view/frontend/empty.phtml | 2 +- .../Theme/view/frontend/layout/default.xml | 78 - .../frontend/layout/default_head_blocks.xml | 8 - .../Magento/Theme/view/frontend/link.phtml | 5 +- .../Magento/Theme/view/frontend/page.phtml | 2 +- .../Magento/Theme/view/frontend/popup.phtml | 2 +- .../Shipping/Carrier/AbstractCarrier.php | 16 +- .../Usa/Model/Shipping/Carrier/Dhl.php | 37 +- .../Shipping/Carrier/Dhl/International.php | 54 +- .../Usa/Model/Shipping/Carrier/Fedex.php | 46 +- .../Usa/Model/Shipping/Carrier/Ups.php | 40 +- .../Usa/Model/Shipping/Carrier/Usps.php | 40 +- .../Magento/User/Block/User/Edit/Form.php | 2 +- .../Activate/Permissions/Tab/Webapi.php | 74 +- .../Adminhtml/Integration/Edit/Tab/Webapi.php | 19 +- .../Magento/Webapi/Block/Adminhtml/Role.php | 60 - .../Webapi/Block/Adminhtml/Role/Edit.php | 92 - .../Webapi/Block/Adminhtml/Role/Edit/Form.php | 50 - .../Block/Adminhtml/Role/Edit/Tab/Main.php | 88 - .../Adminhtml/Role/Edit/Tab/Resource.php | 157 -- .../Webapi/Block/Adminhtml/Role/Edit/Tabs.php | 83 - .../Magento/Webapi/Block/Adminhtml/User.php | 50 - .../Webapi/Block/Adminhtml/User/Edit.php | 96 - .../Webapi/Block/Adminhtml/User/Edit/Form.php | 54 - .../Block/Adminhtml/User/Edit/Tab/Main.php | 99 - .../Webapi/Block/Adminhtml/User/Edit/Tabs.php | 70 - .../Controller/Adminhtml/Webapi/Role.php | 321 --- .../Controller/Adminhtml/Webapi/User.php | 266 --- .../Magento/Webapi/Controller/Request.php | 23 + app/code/Magento/Webapi/Controller/Rest.php | 36 +- .../Webapi/Controller/Rest/Router/Route.php | 23 + app/code/Magento/Webapi/Controller/Soap.php | 22 +- .../Webapi/Controller/Soap/Handler.php | 57 +- app/code/Magento/Webapi/Model/Acl/Builder.php | 46 - app/code/Magento/Webapi/Model/Acl/Cache.php | 38 - .../Acl/Resource/Config/Converter/Dom.php | 56 - .../Acl/Resource/Config/Reader/Filesystem.php | 51 - .../Acl/Resource/Config/SchemaLocator.php | 71 - .../Webapi/Model/Acl/Resource/Provider.php | 78 - .../Model/Acl/Resource/ProviderInterface.php | 39 - app/code/Magento/Webapi/Model/Acl/Role.php | 44 - .../Magento/Webapi/Model/Acl/Role/Factory.php | 55 - .../Model/Acl/Role/InRoleUserUpdater.php | 67 - .../Webapi/Model/Acl/Role/UsersUpdater.php | 111 - app/code/Magento/Webapi/Model/Acl/Rule.php | 62 - .../Magento/Webapi/Model/Acl/Rule/Factory.php | 55 - app/code/Magento/Webapi/Model/Acl/User.php | 106 - .../Magento/Webapi/Model/Acl/User/Factory.php | 55 - .../Webapi/Model/Acl/User/RoleUpdater.php | 67 - .../Model/Authorization/Loader/Resource.php | 87 - .../Model/Authorization/Loader/Role.php | 72 - .../Model/Authorization/Loader/Rule.php | 59 - .../Webapi/Model/Authorization/Policy/Acl.php | 37 - .../Model/Authorization/Role/Factory.php | 55 - .../Authorization/Role/Locator/Factory.php | 55 - .../Model/Authorization/RoleLocator.php | 64 - .../Webapi/Model/Authz/UserLocator.php | 72 + .../Magento/Webapi/Model/Config/Converter.php | 10 +- .../Model/Config/Integration/Reader.php | 25 +- .../Magento/Webapi/Model/Config/Reader.php | 25 +- .../Model/Plugin/IntegrationServiceV1.php | 157 ++ .../Magento/Webapi/Model/Plugin/Setup.php | 11 +- .../Webapi/Model/Resource/Acl/Role.php | 89 - .../Model/Resource/Acl/Role/Collection.php | 37 - .../Webapi/Model/Resource/Acl/Rule.php | 109 - .../Model/Resource/Acl/Rule/Collection.php | 57 - .../Webapi/Model/Resource/Acl/User.php | 78 - .../Model/Resource/Acl/User/Collection.php | 37 - app/code/Magento/Webapi/Model/Rest/Config.php | 8 +- app/code/Magento/Webapi/Model/Soap/Config.php | 19 +- .../Magento/Webapi/Model/Source/Acl/Role.php | 77 - app/code/Magento/Webapi/etc/acl.xsd | 129 -- app/code/Magento/Webapi/etc/adminhtml/acl.xml | 42 - .../Magento/Webapi/etc/adminhtml/menu.xml | 35 - .../Magento/Webapi/etc/adminhtml/routes.xml | 32 - app/code/Magento/Webapi/etc/config.xml | 29 - app/code/Magento/Webapi/etc/di.xml | 7 + app/code/Magento/Webapi/etc/module.xml | 2 +- app/code/Magento/Webapi/etc/validation.xml | 109 - app/code/Magento/Webapi/etc/webapi.xsd | 10 +- .../Magento/Webapi/etc/webapi_rest/di.xml | 69 +- .../Magento/Webapi/etc/webapi_soap/di.xml | 71 +- .../webapi_setup/upgrade-1.0.0.3-1.0.0.4.php | 20 +- .../activate/permissions/tab/webapi.phtml | 52 +- .../layout/adminhtml_integration_edit.xml | 6 + .../layout/adminhtml_webapi_role_edit.xml | 46 - ..._webapi_role_edit_tab_users_grid_block.xml | 99 - .../adminhtml_webapi_role_grid_block.xml | 66 - .../layout/adminhtml_webapi_role_index.xml | 31 - .../layout/adminhtml_webapi_role_rolegrid.xml | 30 - .../adminhtml_webapi_role_usersgrid.xml | 30 - .../layout/adminhtml_webapi_user_edit.xml | 37 - ..._webapi_user_edit_tab_roles_grid_block.xml | 74 - .../layout/adminhtml_webapi_user_grid.xml | 30 - .../adminhtml_webapi_user_grid_block.xml | 81 - .../layout/adminhtml_webapi_user_index.xml | 31 - .../adminhtml_webapi_user_rolesgrid.xml | 30 - .../Webapi/view/adminhtml/rolesedit.phtml | 149 -- .../view/adminhtml/rolesusersgridjs.phtml | 122 -- .../Activate/Permissions/Tab/Webhook.php | 64 - .../Block/Adminhtml/Registration/Activate.php | 86 - .../Adminhtml/Registration/Create/Form.php | 122 -- .../Registration/Create/Form/Container.php | 77 - .../Block/Adminhtml/Registration/Failed.php | 42 - .../Webhook/Block/Adminhtml/Subscription.php | 52 - .../Block/Adminhtml/Subscription/Edit.php | 102 - .../Adminhtml/Subscription/Edit/Form.php | 164 -- .../Subscription/Grid/Renderer/Action.php | 62 - .../Adminhtml/Webhook/Registration.php | 239 --- .../Adminhtml/Webhook/Subscription.php | 295 --- app/code/Magento/Webhook/Helper/Data.php | 34 - app/code/Magento/Webhook/Model/Config.php | 48 - app/code/Magento/Webhook/Model/Endpoint.php | 161 -- app/code/Magento/Webhook/Model/Event.php | 192 -- .../Magento/Webhook/Model/Event/Factory.php | 80 - .../Webhook/Model/Event/QueueReader.php | 61 - .../Webhook/Model/Event/QueueWriter.php | 59 - app/code/Magento/Webhook/Model/Job.php | 225 -- .../Magento/Webhook/Model/Job/Factory.php | 63 - .../Magento/Webhook/Model/Job/QueueReader.php | 64 - .../Magento/Webhook/Model/Job/QueueWriter.php | 61 - app/code/Magento/Webhook/Model/Observer.php | 105 - .../Webhook/Model/Resource/Endpoint.php | 68 - .../Magento/Webhook/Model/Resource/Event.php | 39 - .../Model/Resource/Event/Collection.php | 181 -- .../Magento/Webhook/Model/Resource/Job.php | 39 - .../Webhook/Model/Resource/Job/Collection.php | 193 -- .../Webhook/Model/Resource/Subscription.php | 193 -- .../Resource/Subscription/Collection.php | 214 -- .../Resource/Subscription/Grid/Collection.php | 64 - .../Webhook/Model/Source/Authentication.php | 73 - .../Magento/Webhook/Model/Source/Format.php | 77 - .../Magento/Webhook/Model/Source/Hook.php | 104 - .../Magento/Webhook/Model/Subscription.php | 484 ----- .../Webhook/Model/Subscription/Config.php | 183 -- .../Model/Subscription/Options/Status.php | 59 - app/code/Magento/Webhook/Model/User.php | 88 - .../Magento/Webhook/Model/User/Factory.php | 57 - .../Webhook/Model/Webapi/EventHandler.php | 94 - .../Model/Webapi/EventHandler/Factory.php | 57 - .../Webhook/Model/Webapi/User/Factory.php | 226 -- .../Webhook/Service/SubscriptionV1.php | 329 --- .../Service/SubscriptionV1Interface.php | 115 - .../Magento/Webhook/etc/adminhtml/acl.xml | 40 - .../Magento/Webhook/etc/adminhtml/menu.xml | 33 - .../Magento/Webhook/etc/adminhtml/routes.xml | 32 - app/code/Magento/Webhook/etc/crontab.xml | 39 - app/code/Magento/Webhook/etc/di.xml | 68 - app/code/Magento/Webhook/etc/events.xml | 39 - .../Magento/Webhook/etc/frontend/routes.xml | 32 - app/code/Magento/Webhook/etc/module.xml | 39 - app/code/Magento/Webhook/etc/webapi.xml | 36 - app/code/Magento/Webhook/etc/webapi/acl.xml | 44 - .../Webhook/schema/service/SubscriptionV1.xsd | 190 -- .../sql/webhook_setup/install-1.0.0.0.php | 238 --- .../Webhook/view/adminhtml/css/boxes.css | 1858 ----------------- .../Webhook/view/adminhtml/css/modal.css | 110 - .../Webhook/view/adminhtml/css/webhook.css | 118 -- .../view/adminhtml/images/accordion_close.gif | Bin 394 -> 0 bytes .../view/adminhtml/images/accordion_close.png | Bin 476 -> 0 bytes .../view/adminhtml/images/accordion_open.gif | Bin 627 -> 0 bytes .../view/adminhtml/images/accordion_open.png | Bin 548 -> 0 bytes .../images/add_btn_icon-disabled.gif | Bin 234 -> 0 bytes .../view/adminhtml/images/add_btn_icon.gif | Bin 344 -> 0 bytes .../view/adminhtml/images/address_list_li.gif | Bin 72 -> 0 bytes .../images/address_list_on_arrow.gif | Bin 185 -> 0 bytes .../images/address_list_over_arrow.gif | Bin 184 -> 0 bytes .../adminhtml/images/address_list_over_bg.gif | Bin 236 -> 0 bytes .../view/adminhtml/images/ajax-loader-tr.gif | Bin 2608 -> 0 bytes .../view/adminhtml/images/ajax-loader.gif | Bin 505 -> 0 bytes .../images/application_view_tile.gif | Bin 377 -> 0 bytes .../view/adminhtml/images/arrow_sort_move.gif | Bin 110 -> 0 bytes .../view/adminhtml/images/bg_collapse.gif | Bin 86 -> 0 bytes .../images/bg_create_order_totals.gif | Bin 141 -> 0 bytes .../adminhtml/images/bg_notifications.gif | Bin 1962 -> 0 bytes .../view/adminhtml/images/bg_window_mask.png | Bin 277 -> 0 bytes .../view/adminhtml/images/bkg_btn-close.gif | Bin 146 -> 0 bytes .../view/adminhtml/images/bkg_btn-close2.gif | Bin 356 -> 0 bytes .../adminhtml/images/bkg_search-magnifier.png | Bin 1352 -> 0 bytes .../Webhook/view/adminhtml/images/blank.gif | Bin 43 -> 0 bytes .../Webhook/view/adminhtml/images/box_bg.gif | Bin 217 -> 0 bytes .../view/adminhtml/images/breadcrumb_bg.gif | Bin 50 -> 0 bytes .../adminhtml/images/btn_add-image_icon.gif | Bin 71 -> 0 bytes .../images/btn_add-variable_icon.gif | Bin 80 -> 0 bytes .../adminhtml/images/btn_add-widget_icon.gif | Bin 540 -> 0 bytes .../adminhtml/images/btn_add-widget_icon2.gif | Bin 547 -> 0 bytes .../view/adminhtml/images/btn_back_bg.gif | Bin 147 -> 0 bytes .../view/adminhtml/images/btn_bare_bg.gif | Bin 1454 -> 0 bytes .../view/adminhtml/images/btn_bg-disabled.gif | Bin 148 -> 0 bytes .../Webhook/view/adminhtml/images/btn_bg.gif | Bin 148 -> 0 bytes .../Webhook/view/adminhtml/images/btn_bg.png | Bin 1887 -> 0 bytes .../view/adminhtml/images/btn_cancel_bg.gif | Bin 147 -> 0 bytes .../view/adminhtml/images/btn_delete_bg.gif | Bin 173 -> 0 bytes .../Webhook/view/adminhtml/images/btn_go.gif | Bin 204 -> 0 bytes .../view/adminhtml/images/btn_gr_bg.gif | Bin 148 -> 0 bytes .../view/adminhtml/images/btn_gr_on.gif | Bin 137 -> 0 bytes .../view/adminhtml/images/btn_gr_over.gif | Bin 147 -> 0 bytes .../adminhtml/images/btn_loading-icon.gif | Bin 847 -> 0 bytes .../view/adminhtml/images/btn_login.gif | Bin 1518 -> 0 bytes .../view/adminhtml/images/btn_on_bg.gif | Bin 63 -> 0 bytes .../view/adminhtml/images/btn_over_bg.gif | Bin 147 -> 0 bytes .../adminhtml/images/btn_show-hide_icon.gif | Bin 1014 -> 0 bytes .../view/adminhtml/images/btn_task_bg.gif | Bin 1735 -> 0 bytes .../view/adminhtml/images/button-close.png | Bin 410 -> 0 bytes .../adminhtml/images/cancel_btn_active_bg.gif | Bin 295 -> 0 bytes .../view/adminhtml/images/cancel_btn_bg.gif | Bin 147 -> 0 bytes .../view/adminhtml/images/cancel_btn_icon.gif | Bin 648 -> 0 bytes .../adminhtml/images/cancel_btn_over_bg.gif | Bin 149 -> 0 bytes .../view/adminhtml/images/cancel_icon.gif | Bin 600 -> 0 bytes .../adminhtml/images/config_tab_dt_bg.gif | Bin 383 -> 0 bytes .../view/adminhtml/images/dashboard-close.gif | Bin 373 -> 0 bytes .../view/adminhtml/images/db-graph-bg.gif | Bin 820 -> 0 bytes .../adminhtml/images/db-graph-bottom-bg.gif | Bin 823 -> 0 bytes .../adminhtml/images/db-graph-line-bg.gif | Bin 815 -> 0 bytes .../adminhtml/images/db-graph-line2-bg.gif | Bin 815 -> 0 bytes .../view/adminhtml/images/db-graph-x-bg.png | Bin 142 -> 0 bytes .../view/adminhtml/images/db-header-bg.png | Bin 1272 -> 0 bytes .../view/adminhtml/images/db-menu-bg-hov.gif | Bin 817 -> 0 bytes .../view/adminhtml/images/db-menu-bg-up.gif | Bin 821 -> 0 bytes .../view/adminhtml/images/db-menu-bg.gif | Bin 824 -> 0 bytes .../adminhtml/images/db-menu-sep-last.gif | Bin 826 -> 0 bytes .../view/adminhtml/images/db-menu-sep.gif | Bin 879 -> 0 bytes .../view/adminhtml/images/db-menu-start.gif | Bin 890 -> 0 bytes .../view/adminhtml/images/db-scroll-bg.gif | Bin 1551 -> 0 bytes .../images/db-scroll-but-bot-roll.png | Bin 565 -> 0 bytes .../adminhtml/images/db-scroll-but-bot.png | Bin 583 -> 0 bytes .../images/db-scroll-but-top-roll.png | Bin 610 -> 0 bytes .../adminhtml/images/db-scroll-but-top.png | Bin 631 -> 0 bytes .../adminhtml/images/db-scroll-roller.png | Bin 1258 -> 0 bytes .../images/db-tab-bottom-left-bg.gif | Bin 812 -> 0 bytes .../adminhtml/images/db-tab-bottom-mid-bg.gif | Bin 809 -> 0 bytes .../images/db-tab-bottom-right-bg.gif | Bin 812 -> 0 bytes .../view/adminhtml/images/db-tab-footer.gif | Bin 809 -> 0 bytes .../adminhtml/images/db-tab-header-sep.gif | Bin 832 -> 0 bytes .../view/adminhtml/images/db-tab-header.gif | Bin 809 -> 0 bytes .../view/adminhtml/images/db-tab-left.gif | Bin 808 -> 0 bytes .../view/adminhtml/images/db-tab-right.gif | Bin 808 -> 0 bytes .../adminhtml/images/dotted_divider_dark.gif | Bin 43 -> 0 bytes .../adminhtml/images/dotted_divider_light.gif | Bin 43 -> 0 bytes .../view/adminhtml/images/edit_icon.gif | Bin 561 -> 0 bytes .../images/entry_edit_head_arrow_down.gif | Bin 677 -> 0 bytes .../images/entry_edit_head_arrow_down2.gif | Bin 670 -> 0 bytes .../images/entry_edit_head_arrow_up.gif | Bin 637 -> 0 bytes .../adminhtml/images/entry_edit_head_bg.gif | Bin 43 -> 0 bytes .../view/adminhtml/images/error-msg.png | Bin 1411 -> 0 bytes .../view/adminhtml/images/error_msg_icon.gif | Bin 1013 -> 0 bytes .../view/adminhtml/images/fam_account.gif | Bin 358 -> 0 bytes .../images/fam_application_form_delete.png | Bin 605 -> 0 bytes .../images/fam_application_view_tile.gif | Bin 377 -> 0 bytes .../adminhtml/images/fam_asterisk_orange.gif | Bin 1019 -> 0 bytes .../Webhook/view/adminhtml/images/fam_bin.gif | Bin 288 -> 0 bytes .../view/adminhtml/images/fam_bullet_disk.gif | Bin 542 -> 0 bytes .../adminhtml/images/fam_bullet_error.gif | Bin 524 -> 0 bytes .../adminhtml/images/fam_bullet_success.gif | Bin 1024 -> 0 bytes .../view/adminhtml/images/fam_calendar.gif | Bin 1036 -> 0 bytes .../view/adminhtml/images/fam_cart.gif | Bin 257 -> 0 bytes .../view/adminhtml/images/fam_comment.gif | Bin 329 -> 0 bytes .../view/adminhtml/images/fam_creditcards.gif | Bin 599 -> 0 bytes .../adminhtml/images/fam_folder_database.gif | Bin 1043 -> 0 bytes .../adminhtml/images/fam_folder_palette.gif | Bin 1051 -> 0 bytes .../adminhtml/images/fam_folder_table.gif | Bin 1039 -> 0 bytes .../view/adminhtml/images/fam_group.gif | Bin 1014 -> 0 bytes .../view/adminhtml/images/fam_help.gif | Bin 1024 -> 0 bytes .../view/adminhtml/images/fam_house.gif | Bin 1024 -> 0 bytes .../view/adminhtml/images/fam_layout.gif | Bin 574 -> 0 bytes .../view/adminhtml/images/fam_leaf.png | Bin 3695 -> 0 bytes .../view/adminhtml/images/fam_link.gif | Bin 220 -> 0 bytes .../view/adminhtml/images/fam_lorry.gif | Bin 580 -> 0 bytes .../view/adminhtml/images/fam_money.gif | Bin 380 -> 0 bytes .../view/adminhtml/images/fam_money_add.gif | Bin 1034 -> 0 bytes .../view/adminhtml/images/fam_monitor.gif | Bin 1027 -> 0 bytes .../view/adminhtml/images/fam_newspaper.gif | Bin 606 -> 0 bytes .../adminhtml/images/fam_newspaper_delete.gif | Bin 639 -> 0 bytes .../adminhtml/images/fam_newspaper_error.gif | Bin 628 -> 0 bytes .../adminhtml/images/fam_newspaper_go.gif | Bin 1035 -> 0 bytes .../view/adminhtml/images/fam_package.gif | Bin 1054 -> 0 bytes .../view/adminhtml/images/fam_package_go.gif | Bin 645 -> 0 bytes .../view/adminhtml/images/fam_page_white.gif | Bin 379 -> 0 bytes .../adminhtml/images/fam_page_white_edit.gif | Bin 604 -> 0 bytes .../view/adminhtml/images/fam_rainbow.gif | Bin 644 -> 0 bytes .../view/adminhtml/images/fam_refresh.gif | Bin 324 -> 0 bytes .../adminhtml/images/fam_server_database.gif | Bin 1045 -> 0 bytes .../adminhtml/images/fam_status_online.gif | Bin 997 -> 0 bytes .../view/adminhtml/images/fam_tag_orange.gif | Bin 592 -> 0 bytes .../view/adminhtml/images/fam_user.gif | Bin 583 -> 0 bytes .../adminhtml/images/fam_user_comment.gif | Bin 606 -> 0 bytes .../view/adminhtml/images/fam_user_edit.gif | Bin 614 -> 0 bytes .../view/adminhtml/images/filter_row_bg.gif | Bin 111 -> 0 bytes .../view/adminhtml/images/footer_bg.gif | Bin 332 -> 0 bytes .../view/adminhtml/images/ghost-dark.png | Bin 211 -> 0 bytes .../Webhook/view/adminhtml/images/ghost.png | Bin 211 -> 0 bytes .../images/gift-message-collapse.gif | Bin 258 -> 0 bytes .../adminhtml/images/gift-message-expand.gif | Bin 152 -> 0 bytes .../images/gift-message-grid-column-bg.gif | Bin 42 -> 0 bytes .../view/adminhtml/images/green_button.png | Bin 7923 -> 0 bytes .../adminhtml/images/green_circle_right.png | Bin 6694 -> 0 bytes .../view/adminhtml/images/grey_button.png | Bin 7740 -> 0 bytes .../adminhtml/images/grey_circle_right.png | Bin 6649 -> 0 bytes .../view/adminhtml/images/grid-cal.gif | Bin 391 -> 0 bytes .../view/adminhtml/images/grid_sort_asc.gif | Bin 105 -> 0 bytes .../view/adminhtml/images/grid_sort_desc.gif | Bin 106 -> 0 bytes .../view/adminhtml/images/grid_th_bg.gif | Bin 49 -> 0 bytes .../adminhtml/images/grid_th_onclick_bg.gif | Bin 1242 -> 0 bytes .../images/grouped_to_order_icon.png | Bin 902 -> 0 bytes .../view/adminhtml/images/header_bg.gif | Bin 268 -> 0 bytes .../view/adminhtml/images/header_top_bg.gif | Bin 286 -> 0 bytes .../view/adminhtml/images/hor_arrow.png | Bin 6492 -> 0 bytes .../adminhtml/images/horiz_tabs_ul_bg.gif | Bin 50 -> 0 bytes .../view/adminhtml/images/i_notice.gif | Bin 802 -> 0 bytes .../view/adminhtml/images/i_question-mark.png | Bin 1654 -> 0 bytes .../view/adminhtml/images/ico_success.gif | Bin 338 -> 0 bytes .../view/adminhtml/images/icon-tooltip.png | Bin 1441 -> 0 bytes .../view/adminhtml/images/icon_btn_add.gif | Bin 344 -> 0 bytes .../view/adminhtml/images/icon_btn_back.gif | Bin 216 -> 0 bytes .../view/adminhtml/images/icon_btn_delete.gif | Bin 220 -> 0 bytes .../view/adminhtml/images/icon_btn_save.gif | Bin 203 -> 0 bytes .../adminhtml/images/icon_edit_address.gif | Bin 540 -> 0 bytes .../view/adminhtml/images/icon_export.gif | Bin 1022 -> 0 bytes .../view/adminhtml/images/icon_export.png | Bin 694 -> 0 bytes .../view/adminhtml/images/icon_feed.gif | Bin 351 -> 0 bytes .../view/adminhtml/images/icon_feed.png | Bin 530 -> 0 bytes .../view/adminhtml/images/icon_note_list.gif | Bin 189 -> 0 bytes .../adminhtml/images/icon_remove_address.gif | Bin 349 -> 0 bytes .../adminhtml/images/image-placeholder.png | Bin 1748 -> 0 bytes .../view/adminhtml/images/loader-small.gif | Bin 1849 -> 0 bytes .../view/adminhtml/images/login_box_bg.gif | Bin 23788 -> 0 bytes .../view/adminhtml/images/login_box_bg.jpg | Bin 23561 -> 0 bytes .../adminhtml/images/login_box_bg_auth.jpg | Bin 51012 -> 0 bytes .../adminhtml/images/login_box_bottom.jpg | Bin 1259 -> 0 bytes .../adminhtml/images/login_box_legal_bg.gif | Bin 884 -> 0 bytes .../view/adminhtml/images/login_logo.gif | Bin 816 -> 0 bytes .../view/adminhtml/images/logo-large.gif | Bin 5636 -> 0 bytes .../Webhook/view/adminhtml/images/logo.gif | Bin 3144 -> 0 bytes .../view/adminhtml/images/massaction_bg.gif | Bin 151 -> 0 bytes .../adminhtml/images/massaction_button_bg.gif | Bin 87 -> 0 bytes .../images/massaction_links_delimiter.gif | Bin 57 -> 0 bytes .../view/adminhtml/images/middle_bg.gif | Bin 327 -> 0 bytes .../view/adminhtml/images/more_arrow.gif | Bin 90 -> 0 bytes .../view/adminhtml/images/nav1_active.gif | Bin 1315 -> 0 bytes .../Webhook/view/adminhtml/images/nav1_bg.gif | Bin 50 -> 0 bytes .../view/adminhtml/images/nav1_off.gif | Bin 154 -> 0 bytes .../Webhook/view/adminhtml/images/nav1_on.gif | Bin 1315 -> 0 bytes .../view/adminhtml/images/nav1_over.gif | Bin 368 -> 0 bytes .../view/adminhtml/images/nav1_sep.gif | Bin 154 -> 0 bytes .../view/adminhtml/images/nav2_last_li_bg.png | Bin 350 -> 0 bytes .../adminhtml/images/nav2_last_li_over_bg.png | Bin 351 -> 0 bytes .../view/adminhtml/images/nav2_li_bg.gif | Bin 75 -> 0 bytes .../view/adminhtml/images/nav2_li_bg.png | Bin 163 -> 0 bytes .../view/adminhtml/images/nav2_li_over_bg.png | Bin 162 -> 0 bytes .../view/adminhtml/images/nav2_link_bg.gif | Bin 43 -> 0 bytes .../adminhtml/images/nav2_parent_arrow.gif | Bin 84 -> 0 bytes .../Webhook/view/adminhtml/images/nav3_bg.png | Bin 164 -> 0 bytes .../Webhook/view/adminhtml/images/nav_bg.gif | Bin 50 -> 0 bytes .../view/adminhtml/images/nav_list_bg.gif | Bin 1514 -> 0 bytes .../adminhtml/images/nav_nest_link_bg.gif | Bin 43 -> 0 bytes .../images/nav_nest_link_over_bg.gif | Bin 328 -> 0 bytes .../view/adminhtml/images/nav_on_bg.gif | Bin 151 -> 0 bytes .../adminhtml/images/nav_parent_arrow.gif | Bin 240 -> 0 bytes .../Webhook/view/adminhtml/images/note_bg.gif | Bin 107 -> 0 bytes .../view/adminhtml/images/note_cell_bg.gif | Bin 106 -> 0 bytes .../view/adminhtml/images/note_msg_icon.gif | Bin 1022 -> 0 bytes .../view/adminhtml/images/notice-msg.png | Bin 1375 -> 0 bytes .../adminhtml/images/pager_arrow_left.gif | Bin 334 -> 0 bytes .../adminhtml/images/pager_arrow_left_off.gif | Bin 218 -> 0 bytes .../adminhtml/images/pager_arrow_right.gif | Bin 332 -> 0 bytes .../images/pager_arrow_right_off.gif | Bin 219 -> 0 bytes .../view/adminhtml/images/process_spinner.gif | Bin 1849 -> 0 bytes .../images/product_rating_blank_star.gif | Bin 304 -> 0 bytes .../images/product_rating_full_star.gif | Bin 306 -> 0 bytes .../view/adminhtml/images/red_button.png | Bin 7980 -> 0 bytes .../adminhtml/images/red_circle_right.png | Bin 6668 -> 0 bytes .../adminhtml/images/rule-ajax-loader.gif | Bin 1849 -> 0 bytes .../adminhtml/images/rule_chooser_trigger.gif | Bin 591 -> 0 bytes .../adminhtml/images/rule_component_add.gif | Bin 340 -> 0 bytes .../adminhtml/images/rule_component_apply.gif | Bin 1024 -> 0 bytes .../images/rule_component_remove.gif | Bin 343 -> 0 bytes .../view/adminhtml/images/save_btn_icon.gif | Bin 203 -> 0 bytes .../view/adminhtml/images/sec_nav_bg.gif | Bin 43 -> 0 bytes .../view/adminhtml/images/section_menu_bg.gif | Bin 49 -> 0 bytes .../adminhtml/images/section_menu_bottom.gif | Bin 1036 -> 0 bytes .../adminhtml/images/section_menu_link_bg.gif | Bin 43 -> 0 bytes .../images/section_menu_link_over_bg.gif | Bin 600 -> 0 bytes .../images/section_menu_over_span_bg.gif | Bin 316 -> 0 bytes .../adminhtml/images/section_menu_span_bg.gif | Bin 43 -> 0 bytes .../adminhtml/images/section_menu_ul_bg.gif | Bin 64 -> 0 bytes .../view/adminhtml/images/side_col_bg.gif | Bin 49 -> 0 bytes .../adminhtml/images/simple_container_bg.gif | Bin 49 -> 0 bytes .../view/adminhtml/images/sort-arrow-down.gif | Bin 117 -> 0 bytes .../view/adminhtml/images/sort-arrow-down.png | Bin 2944 -> 0 bytes .../view/adminhtml/images/sort-arrow-up.gif | Bin 117 -> 0 bytes .../view/adminhtml/images/sort-arrow-up.png | Bin 2940 -> 0 bytes .../view/adminhtml/images/sort_heading_bg.gif | Bin 55 -> 0 bytes .../view/adminhtml/images/sort_on_bg.gif | Bin 1244 -> 0 bytes .../view/adminhtml/images/sort_row_bg.gif | Bin 535 -> 0 bytes .../Webhook/view/adminhtml/images/spacer.gif | Bin 43 -> 0 bytes .../view/adminhtml/images/sub_button_bg.gif | Bin 62 -> 0 bytes .../view/adminhtml/images/success-msg.png | Bin 1662 -> 0 bytes .../adminhtml/images/success_msg_icon.gif | Bin 1024 -> 0 bytes .../view/adminhtml/images/tabs_link_bg.gif | Bin 49 -> 0 bytes .../adminhtml/images/tabs_link_over_bg.gif | Bin 49 -> 0 bytes .../view/adminhtml/images/tabs_span_bg.gif | Bin 43 -> 0 bytes .../view/adminhtml/images/tag_blue_edit.gif | Bin 1021 -> 0 bytes .../view/adminhtml/images/tn_cancel_bg.gif | Bin 147 -> 0 bytes .../view/adminhtml/images/tooltip_bg.gif | Bin 294 -> 0 bytes .../view/adminhtml/images/tooltip_corner.gif | Bin 854 -> 0 bytes .../view/adminhtml/images/tooltip_top.gif | Bin 295 -> 0 bytes .../view/adminhtml/images/tree_icons/join.gif | Bin 69 -> 0 bytes .../images/tree_icons/joinbottom.gif | Bin 66 -> 0 bytes .../view/adminhtml/images/tree_icons/line.gif | Bin 66 -> 0 bytes .../adminhtml/images/tree_icons/minus.gif | Bin 86 -> 0 bytes .../images/tree_icons/minusbottom.gif | Bin 85 -> 0 bytes .../images/tree_icons/nolines_minus.gif | Bin 861 -> 0 bytes .../images/tree_icons/nolines_plus.gif | Bin 870 -> 0 bytes .../adminhtml/images/validation_advice_bg.gif | Bin 134 -> 0 bytes .../view/adminhtml/images/varien_logo.gif | Bin 403 -> 0 bytes .../view/adminhtml/images/ver_arrow.png | Bin 6466 -> 0 bytes .../adminhtml/images/warning_msg_icon.gif | Bin 578 -> 0 bytes .../view/adminhtml/images/window_close.png | Bin 872 -> 0 bytes .../view/adminhtml/images/window_content.png | Bin 158 -> 0 bytes .../view/adminhtml/images/window_top.png | Bin 166 -> 0 bytes .../view/adminhtml/js/validate_form.js | 30 - .../Webhook/view/adminhtml/js/webhook.js | 106 - ...tegration_activate_permissions_webhook.xml | 36 - ...dminhtml_webhook_registration_activate.xml | 67 - .../adminhtml_webhook_registration_failed.xml | 62 - ...minhtml_webhook_registration_succeeded.xml | 67 - .../adminhtml_webhook_registration_user.xml | 79 - .../adminhtml_webhook_subscription_edit.xml | 30 - .../adminhtml_webhook_subscription_grid.xml | 96 - .../adminhtml_webhook_subscription_index.xml | 43 - .../adminhtml/registration/activate.phtml | 56 - .../registration/create/container.phtml | 53 - .../view/adminhtml/registration/failed.phtml | 28 - .../adminhtml/registration/succeeded.phtml | 40 - .../Weee/Model/Attribute/Backend/Weee/Tax.php | 12 +- .../Magento/Weee/Model/Total/Quote/Weee.php | 8 +- .../Widget/Block/Adminhtml/Widget/Chooser.php | 2 +- .../Edit/Chooser/DesignAbstraction.php | 9 +- .../Widget/Instance/Edit/Chooser/Layout.php | 6 +- .../Adminhtml/Widget/Instance/Edit/Form.php | 2 +- .../Widget/Instance/Edit/Tab/Main.php | 10 +- .../Widget/Instance/Edit/Tab/Settings.php | 10 +- .../Magento/Widget/Model/Config/Reader.php | 7 +- .../Magento/Wishlist/Controller/Index.php | 2 +- .../Wishlist/view/frontend/item/list.phtml | 50 +- .../Wishlist/view/frontend/shared.phtml | 87 +- .../Magento/Wishlist/view/frontend/view.phtml | 2 +- .../adminhtml/magento_backend/css/styles.css | 32 - .../magento_backend/less/styles/admin.less | 4 +- .../layout/review_product_list.xml | 28 - .../layout/catalog_product_view.xml | 1 - .../Magento_Catalog/layout/default.xml | 1 - .../Magento_Cms/default/footerbanners.phtml | 37 - .../Magento_Cms/default/home.phtml | 53 - .../layout/contacts_index_index.xml | 28 - .../layout/customer_account.xml | 33 - .../Magento_Customer/layout/default.xml | 1 + .../Magento_PageCache/layout/default.xml | 28 - .../Magento_Rating/detailed.phtml | 45 - .../layout/review_product_view.xml | 28 - .../Magento_Theme/layout/default.xml | 51 +- .../layout/default_head_blocks.xml | 77 + .../frontend/magento_plushe/css/styles.css | 272 ++- .../less/responsive/responsive.less | 200 +- .../frontend/magento_plushe/less/styles.less | 16 +- app/etc/di.xml | 18 + .../TestFramework/Interception/PluginList.php | 6 +- .../Magento/Cache/Backend/MongoDbTest.php | 2 +- .../SourceClassWithNamespace.php | 2 +- .../SourceClassWithoutNamespace.php | 2 +- .../Email/Model/Template/FilterTest.php | 2 +- .../Magento/Email/Model/TemplateTest.php | 2 +- .../Magento/Newsletter/Model/QueueTest.php | 2 +- .../Outbound/Authentication/FactoryTest.php | 18 +- .../Outbound/Formatter/FactoryTest.php | 18 +- .../Magento/Paypal/Model/VoidTest.php | 6 +- .../Magento/PubSub/Event/QueueHandlerTest.php | 160 -- .../Magento/PubSub/Job/QueueHandlerTest.php | 164 -- .../PubSub/Message/DispatcherAsyncTest.php | 79 - .../Magento/PubSub/_files/config.xml | 17 - .../Integrity/Modular/LayoutFilesTest.php | 6 +- .../Modular/_files/skip_blocks_ce.php | 8 - .../Model => View/Design}/Theme/LabelTest.php | 16 +- .../Block/Adminhtml/AbstractFormTest.php | 113 - .../Adminhtml/Role/Edit/Tab/MainTest.php | 138 -- .../Adminhtml/Role/Edit/Tab/ResourceTest.php | 190 -- .../Block/Adminhtml/User/Edit/FormTest.php | 36 - .../Adminhtml/User/Edit/Tab/MainTest.php | 148 -- .../Block/Adminhtml/User/Edit/TabsTest.php | 138 -- .../Webapi/Block/Adminhtml/User/EditTest.php | 73 - .../Magento/Webapi/Model/Acl/RoleTest.php | 59 - .../Magento/Webapi/Model/Acl/RuleTest.php | 86 - .../Magento/Webapi/Model/Acl/UserTest.php | 72 - .../Webapi/Model/Config/_files/webapi.php | 21 +- .../Webapi/Model/Config/_files/webapiA.xml | 10 +- .../Webapi/Model/Config/_files/webapiB.xml | 8 +- .../Webapi/Model/Resource/Acl/RoleTest.php | 123 -- .../Webapi/Model/Resource/Acl/RuleTest.php | 72 - .../testsuite/Magento/Webapi/_files/role.php | 30 - .../Magento/Webapi/_files/role_with_rule.php | 43 - .../Magento/Webapi/_files/user_with_role.php | 43 - .../Adminhtml/Registration/ActivateTest.php | 72 - .../Create/Form/ContainerTest.php | 71 - .../Registration/Create/FormTest.php | 99 - .../Adminhtml/Registration/FailedTest.php | 56 - .../Adminhtml/Subscription/Edit/FormTest.php | 118 -- .../Block/Adminhtml/Subscription/EditTest.php | 86 - .../Subscription/Grid/Renderer/ActionTest.php | 58 - .../Block/Adminhtml/SubscriptionTest.php | 46 - .../Adminhtml/Webhook/RegistrationTest.php | 228 -- .../Adminhtml/Webhook/SubscriptionTest.php | 197 -- .../Magento/Webhook/Model/EndpointTest.php | 72 - .../Webhook/Model/Event/FactoryTest.php | 58 - .../Webhook/Model/Event/QueueReaderTest.php | 48 - .../Webhook/Model/Event/QueueWriterTest.php | 87 - .../Magento/Webhook/Model/EventTest.php | 82 - .../Magento/Webhook/Model/Job/FactoryTest.php | 51 - .../Webhook/Model/Job/QueueReaderTest.php | 60 - .../Webhook/Model/Job/QueueWriterTest.php | 58 - .../Magento/Webhook/Model/JobTest.php | 171 -- .../Magento/Webhook/Model/ObserverTest.php | 144 -- .../Webhook/Model/Resource/EndpointTest.php | 126 -- .../Model/Resource/Event/CollectionTest.php | 181 -- .../Webhook/Model/Resource/EventTest.php | 49 - .../Model/Resource/Job/CollectionTest.php | 187 -- .../Webhook/Model/Resource/JobTest.php | 46 - .../Resource/Subscription/CollectionTest.php | 222 -- .../Subscription/Grid/CollectionTest.php | 202 -- .../Model/Resource/SubscriptionTest.php | 96 - .../Webhook/Model/Subscription/ConfigTest.php | 103 - .../Model/Subscription/Options/StatusTest.php | 46 - .../Webhook/Model/SubscriptionTest.php | 488 ----- .../Magento/Webhook/Model/UserTest.php | 47 - .../Model/Webapi/EventHandler/FactoryTest.php | 40 - .../Webhook/Model/Webapi/User/FactoryTest.php | 92 - .../Webhook/Service/SubscriptionV1Test.php | 289 --- .../Edit/Chooser/DesignAbstractionTest.php | 50 +- .../Instance/Edit/Chooser/LayoutTest.php | 2 +- .../js/testsuite/mage/suggest/suggest-test.js | 21 + .../Dependency/_files/tables_ce.php | 9 +- .../Test/Integrity/Di/CompilerTest.php | 12 +- .../Integrity/Library/_files/blacklist.txt | 1 + .../Integrity/_files/blacklist/namespace.txt | 3 +- .../Magento/Test/Legacy/LayoutTest.php | 1 + .../Test/Legacy/_files/obsolete_classes.php | 14 + .../Legacy/_files/obsolete_config_nodes.php | 2 - .../Test/Legacy/_files/obsolete_constants.php | 31 +- .../Test/Legacy/_files/obsolete_methods.php | 2 + .../Test/Php/_files/blacklist/common.txt | 1 - .../Php/_files/phpcpd/blacklist/common.txt | 1 - .../Test/Php/_files/whitelist/common.txt | 1 - .../Magento/Test/Block/Adminhtml.php | 10 +- .../App/Resource/Config/ReaderTest.php | 3 +- .../Authz/Service/AuthorizationV1Test.php | 93 + .../System/Config/Form/Field/ImportTest.php | 2 +- .../Backend/Groupprice/AbstractTest.php | 2 +- .../Block/Adminhtml/Form/Field/StockTest.php | 2 +- .../Checkout/Block/Onepage/SuccessTest.php | 82 + .../Code/Reader/ArgumentsReaderTest.php | 9 + .../_files/ClassesForArgumentsReader.php | 30 +- .../Code/Validator/ArgumentSequenceTest.php | 6 +- .../Code/Validator/TypeDuplicationTest.php | 75 + .../_files/ClassesForTypeDuplication.php | 175 ++ .../Core/App/Action/Plugin/DesignTest.php | 2 +- .../Model/DataService/Config/ReaderTest.php | 4 +- .../Magento/Core/Model/DesignLoaderTest.php | 4 +- .../Layout/Argument/Handler/ArrayTest.php | 8 +- .../Model/Layout/Argument/ProcessorTest.php | 6 +- .../Magento/Core/Model/Layout/MergeTest.php | 41 + .../Core/Model/Theme/Domain/PhysicalTest.php | 2 +- .../Core/Model/Theme/Domain/StagingTest.php | 2 +- .../Core/Model/Theme/Domain/VirtualTest.php | 4 +- .../Magento/Data/Form/Element/FactoryTest.php | 2 +- .../Controller/Varien/Router/StandardTest.php | 4 +- .../Magento/DesignEditor/Model/StateTest.php | 4 +- .../DesignEditor/Model/Theme/ContextTest.php | 4 +- .../Controller/Adminhtml/IntegrationTest.php | 168 +- .../Integration/Helper/Oauth/ConsumerTest.php | 33 +- .../Magento/Integration/Model/ManagerTest.php | 10 +- .../Magento/Integration/Oauth/OauthTest.php | 8 +- .../Integration/Service/IntegrationV1Test.php | 101 +- .../Integration/Service/OauthV1Test.php | 144 ++ .../PluginList/PluginListTest.php | 4 +- .../testsuite/Magento/Log/Model/ShellTest.php | 2 +- .../Outbound/Authentication/FactoryTest.php | 2 - .../Outbound/Authentication/HmacTest.php | 2 - .../Outbound/Formatter/FactoryTest.php | 2 - .../Magento/Outbound/Formatter/JsonTest.php | 2 - .../Magento/PubSub/Event/QueueHandlerTest.php | 181 -- .../Magento/PubSub/Job/QueueHandlerTest.php | 236 --- .../Magento/Theme/Model/ConfigTest.php | 4 +- .../Theme => Theme/Model}/CopyServiceTest.php | 14 +- .../Layout/Argument/HandlerFactoryTest.php | 15 +- .../Adminhtml/Role/Edit/Tab/ResourceTest.php | 96 - .../Block/Adminhtml/Role/Edit/TabsTest.php | 136 -- .../Webapi/Block/Adminhtml/Role/EditTest.php | 158 -- .../Webapi/Block/Adminhtml/RoleTest.php | 96 - .../Webapi/Block/Adminhtml/User/EditTest.php | 143 -- .../Webapi/Block/Adminhtml/UserTest.php | 75 - .../Magento/Webapi/Controller/RestTest.php | 38 +- .../Webapi/Controller/Soap/HandlerTest.php | 187 +- .../Acl/Resource/Config/Converter/DomTest.php | 68 - .../_files/converted_valid_webapi_acl.php | 48 - .../Converter/_files/valid_webapi_acl.xml | 41 - .../Acl/Resource/Config/SchemaLocatorTest.php | 57 - .../Model/Acl/Resource/ProviderTest.php | 70 - .../Webapi/Model/Acl/Role/FactoryTest.php | 75 - .../Model/Acl/Role/InRoleUserUpdaterTest.php | 58 - .../Model/Acl/Role/UsersUpdaterTest.php | 138 -- .../Magento/Webapi/Model/Acl/RoleTest.php | 122 -- .../Magento/Webapi/Model/Acl/RuleTest.php | 146 -- .../Webapi/Model/Acl/User/FactoryTest.php | 75 - .../Webapi/Model/Acl/User/RoleUpdaterTest.php | 68 - .../Magento/Webapi/Model/Acl/UserTest.php | 168 -- .../Authorization/Loader/ResourceTest.php | 135 -- .../Model/Authorization/Loader/RoleTest.php | 127 -- .../Model/Authorization/Loader/RuleTest.php | 119 -- .../Model/Authorization/Role/FactoryTest.php | 69 - .../Model/Authorization/RoleLocatorTest.php | 46 - .../Magento/Webapi/Model/Config/XsdTest.php | 222 ++ .../Webapi/Model/Config/_files/webapi.php | 12 +- .../Webapi/Model/Config/_files/webapi.xml | 9 +- .../Model/Plugin/IntegrationServiceV1Test.php | 90 + .../Magento/Webapi/Model/Plugin/SetupTest.php | 14 +- .../Model/Resource/Acl/AbstractTest.php | 61 - .../Webapi/Model/Resource/Acl/RoleTest.php | 150 -- .../Webapi/Model/Resource/Acl/RuleTest.php | 207 -- .../Webapi/Model/Resource/Acl/UserTest.php | 124 -- .../Magento/Webapi/Model/Soap/ConfigTest.php | 9 +- .../Webapi/Model/Source/Acl/RoleTest.php | 84 - .../Adminhtml/Registration/ActivateTest.php | 88 - .../Create/Form/ContainerTest.php | 83 - .../Registration/Create/FormTest.php | 111 - .../Adminhtml/Registration/FailedTest.php | 77 - .../Adminhtml/Subscription/Edit/FormTest.php | 126 -- .../Block/Adminhtml/Subscription/EditTest.php | 69 - .../Subscription/Grid/Renderer/ActionTest.php | 99 - .../Block/Adminhtml/SubscriptionTest.php | 47 - .../Adminhtml/Webhook/RegistrationTest.php | 364 ---- .../Adminhtml/Webhook/SubscriptionTest.php | 606 ------ .../Magento/Webhook/Model/EndpointTest.php | 214 -- .../Webhook/Model/Event/FactoryTest.php | 94 - .../Webhook/Model/Event/QueueReaderTest.php | 89 - .../Webhook/Model/Event/QueueWriterTest.php | 76 - .../Magento/Webhook/Model/EventTest.php | 193 -- .../Magento/Webhook/Model/Job/FactoryTest.php | 71 - .../Webhook/Model/Job/QueueReaderTest.php | 80 - .../Webhook/Model/Job/QueueWriterTest.php | 90 - .../Magento/Webhook/Model/JobTest.php | 388 ---- .../Magento/Webhook/Model/ObserverTest.php | 230 -- .../Webhook/Model/Resource/EndpointTest.php | 136 -- .../Model/Resource/Event/CollectionTest.php | 63 - .../Webhook/Model/Resource/EventTest.php | 49 - .../Model/Resource/Job/CollectionTest.php | 61 - .../Webhook/Model/Resource/JobTest.php | 48 - .../Resource/Subscription/CollectionTest.php | 285 --- .../Subscription/Grid/CollectionTest.php | 77 - .../Model/Resource/SubscriptionTest.php | 220 -- .../Model/Source/AuthenticationTest.php | 43 - .../Webhook/Model/Source/FormatTest.php | 43 - .../Magento/Webhook/Model/Source/HookTest.php | 43 - .../Magento/Webhook/Model/Source/Pkg.php | 69 - .../Webhook/Model/Subscription/ConfigTest.php | 263 --- .../Model/Subscription/FactoryTest.php | 67 - .../Model/Subscription/Options/StatusTest.php | 59 - .../Webhook/Model/SubscriptionTest.php | 529 ----- .../Webhook/Model/User/FactoryTest.php | 54 - .../Magento/Webhook/Model/UserTest.php | 132 -- .../Model/Webapi/EventHandler/FactoryTest.php | 57 - .../Webhook/Model/Webapi/EventHandlerTest.php | 179 -- .../Webhook/Model/Webapi/User/FactoryTest.php | 257 --- .../Magento/Webhook/Model/_files/acl.xml | 36 - .../Magento/Webhook/Model/_files/acl.xsd | 154 -- .../Magento/Webhook/Model/_files/acl2.xml | 41 - .../Webhook/Service/SubscriptionV1Test.php | 486 ----- .../Tools/Di/Code/Scanner/XmlScanner.php | 2 +- .../factory_table_names/replace_ce.php | 4 - .../Acl/Resource/Config/Reader/Filesystem.php | 13 +- lib/Magento/App/Resource/Config/Reader.php | 19 +- lib/Magento/Cache/Config/Reader.php | 19 +- lib/Magento/Code/Reader/ArgumentsReader.php | 21 + .../Code/Validator/ArgumentSequence.php | 47 +- .../Code/Validator/TypeDuplication.php | 125 ++ lib/Magento/DB/Tree/Node.php | 2 +- lib/Magento/Data/Form.php | 6 +- lib/Magento/Data/Form/AbstractForm.php | 12 +- .../Data/Form/Element/AbstractElement.php | 10 +- lib/Magento/Data/Form/Element/Button.php | 10 +- lib/Magento/Data/Form/Element/Checkbox.php | 10 +- lib/Magento/Data/Form/Element/Checkboxes.php | 10 +- lib/Magento/Data/Form/Element/Column.php | 10 +- lib/Magento/Data/Form/Element/Date.php | 14 +- lib/Magento/Data/Form/Element/Editor.php | 10 +- lib/Magento/Data/Form/Element/Fieldset.php | 14 +- lib/Magento/Data/Form/Element/File.php | 10 +- lib/Magento/Data/Form/Element/Gallery.php | 10 +- lib/Magento/Data/Form/Element/Hidden.php | 10 +- lib/Magento/Data/Form/Element/Image.php | 10 +- lib/Magento/Data/Form/Element/Imagefile.php | 10 +- lib/Magento/Data/Form/Element/Label.php | 10 +- lib/Magento/Data/Form/Element/Link.php | 10 +- lib/Magento/Data/Form/Element/Multiline.php | 10 +- lib/Magento/Data/Form/Element/Multiselect.php | 10 +- lib/Magento/Data/Form/Element/Note.php | 10 +- lib/Magento/Data/Form/Element/Password.php | 10 +- lib/Magento/Data/Form/Element/Radio.php | 10 +- lib/Magento/Data/Form/Element/Radios.php | 10 +- lib/Magento/Data/Form/Element/Reset.php | 10 +- lib/Magento/Data/Form/Element/Select.php | 10 +- lib/Magento/Data/Form/Element/Submit.php | 10 +- lib/Magento/Data/Form/Element/Text.php | 10 +- lib/Magento/Data/Form/Element/Textarea.php | 10 +- lib/Magento/Data/Form/Element/Time.php | 10 +- lib/Magento/Data/Form/ElementFactory.php | 2 +- lib/Magento/Data/Tree.php | 2 +- lib/Magento/Data/Tree/Db.php | 2 +- lib/Magento/Event/Config/Reader.php | 21 +- .../Interception/PluginList/PluginList.php | 6 +- .../Module/Declaration/Reader/Filesystem.php | 11 +- lib/Magento/Oauth/Oauth.php | 2 +- lib/Magento/Oauth/OauthInterface.php | 4 +- lib/Magento/Oauth/TokenProviderInterface.php | 2 +- lib/Magento/Object/Copy/Config/Reader.php | 7 +- .../ObjectManager/Config/Reader/Dom.php | 17 +- .../Outbound/Authentication/Factory.php | 2 - lib/Magento/View/Asset/MinifyService.php | 7 - .../Magento/View/Design}/Theme/Label.php | 23 +- .../View/Design/Theme/Label/ListInterface.php | 17 +- .../View/Design/Theme/LabelFactory.php | 44 +- .../View/Design/Theme/ListInterface.php | 18 +- lib/Magento/View/DesignInterface.php | 5 + .../Magento/View}/DesignLoader.php | 4 +- .../View/Element/Html/Link/Current.php | 8 +- lib/Magento/View/Element/Template/Context.php | 22 +- .../View}/Layout/Argument/HandlerFactory.php | 42 +- .../Layout/Argument/HandlerInterface.php | 6 +- .../Magento/View}/Layout/PageType/Config.php | 4 +- .../Layout/PageType/Config/Converter.php | 2 +- .../View}/Layout/PageType/Config/Reader.php | 6 +- .../Layout/PageType/Config/SchemaLocator.php | 2 +- .../View/Layout/ProcessorInterface.php | 26 +- lib/Magento/View/Service.php | 2 +- pub/lib/mage/backend/suggest.js | 21 +- 1024 files changed, 5777 insertions(+), 33033 deletions(-) delete mode 100644 app/code/Magento/Core/Model/Layout/Argument/HandlerFactoryInterface.php rename app/{design/frontend/magento_plushe/Magento_Core => code/Magento/Core/view/frontend}/template.phtml (100%) rename app/{design/frontend/magento_plushe/Magento_Customer => code/Magento/Customer/view/frontend}/account/customer.phtml (95%) delete mode 100644 app/code/Magento/Integration/Block/Adminhtml/Integration/Token.php create mode 100644 app/code/Magento/Integration/Block/Adminhtml/Integration/Tokens.php delete mode 100644 app/code/Magento/Integration/Block/Adminhtml/Widget/Grid/Column/Renderer/Button/IntegrationAbstract.php delete mode 100644 app/code/Magento/Integration/Helper/Oauth/Consumer.php create mode 100644 app/code/Magento/Integration/Service/OauthV1.php create mode 100644 app/code/Magento/Integration/Service/OauthV1Interface.php rename app/code/Magento/Integration/view/adminhtml/layout/{adminhtml_integration_activate_permissions_popup.xml => adminhtml_integration_permissionsdialog.xml} (100%) rename app/code/Magento/Integration/view/adminhtml/layout/{adminhtml_integration_activate_tokens_popup.xml => adminhtml_integration_tokensdialog.xml} (95%) rename app/code/Magento/{Core/Model/Theme => Theme/Model}/CopyService.php (99%) delete mode 100644 app/code/Magento/Webapi/Block/Adminhtml/Role.php delete mode 100644 app/code/Magento/Webapi/Block/Adminhtml/Role/Edit.php delete mode 100644 app/code/Magento/Webapi/Block/Adminhtml/Role/Edit/Form.php delete mode 100644 app/code/Magento/Webapi/Block/Adminhtml/Role/Edit/Tab/Main.php delete mode 100644 app/code/Magento/Webapi/Block/Adminhtml/Role/Edit/Tab/Resource.php delete mode 100644 app/code/Magento/Webapi/Block/Adminhtml/Role/Edit/Tabs.php delete mode 100644 app/code/Magento/Webapi/Block/Adminhtml/User.php delete mode 100644 app/code/Magento/Webapi/Block/Adminhtml/User/Edit.php delete mode 100644 app/code/Magento/Webapi/Block/Adminhtml/User/Edit/Form.php delete mode 100644 app/code/Magento/Webapi/Block/Adminhtml/User/Edit/Tab/Main.php delete mode 100644 app/code/Magento/Webapi/Block/Adminhtml/User/Edit/Tabs.php delete mode 100644 app/code/Magento/Webapi/Controller/Adminhtml/Webapi/Role.php delete mode 100644 app/code/Magento/Webapi/Controller/Adminhtml/Webapi/User.php delete mode 100644 app/code/Magento/Webapi/Model/Acl/Builder.php delete mode 100644 app/code/Magento/Webapi/Model/Acl/Cache.php delete mode 100644 app/code/Magento/Webapi/Model/Acl/Resource/Config/Converter/Dom.php delete mode 100644 app/code/Magento/Webapi/Model/Acl/Resource/Config/Reader/Filesystem.php delete mode 100644 app/code/Magento/Webapi/Model/Acl/Resource/Config/SchemaLocator.php delete mode 100644 app/code/Magento/Webapi/Model/Acl/Resource/Provider.php delete mode 100644 app/code/Magento/Webapi/Model/Acl/Resource/ProviderInterface.php delete mode 100644 app/code/Magento/Webapi/Model/Acl/Role.php delete mode 100644 app/code/Magento/Webapi/Model/Acl/Role/Factory.php delete mode 100644 app/code/Magento/Webapi/Model/Acl/Role/InRoleUserUpdater.php delete mode 100644 app/code/Magento/Webapi/Model/Acl/Role/UsersUpdater.php delete mode 100644 app/code/Magento/Webapi/Model/Acl/Rule.php delete mode 100644 app/code/Magento/Webapi/Model/Acl/Rule/Factory.php delete mode 100644 app/code/Magento/Webapi/Model/Acl/User.php delete mode 100644 app/code/Magento/Webapi/Model/Acl/User/Factory.php delete mode 100644 app/code/Magento/Webapi/Model/Acl/User/RoleUpdater.php delete mode 100644 app/code/Magento/Webapi/Model/Authorization/Loader/Resource.php delete mode 100644 app/code/Magento/Webapi/Model/Authorization/Loader/Role.php delete mode 100644 app/code/Magento/Webapi/Model/Authorization/Loader/Rule.php delete mode 100644 app/code/Magento/Webapi/Model/Authorization/Policy/Acl.php delete mode 100644 app/code/Magento/Webapi/Model/Authorization/Role/Factory.php delete mode 100644 app/code/Magento/Webapi/Model/Authorization/Role/Locator/Factory.php delete mode 100644 app/code/Magento/Webapi/Model/Authorization/RoleLocator.php create mode 100644 app/code/Magento/Webapi/Model/Authz/UserLocator.php create mode 100644 app/code/Magento/Webapi/Model/Plugin/IntegrationServiceV1.php delete mode 100644 app/code/Magento/Webapi/Model/Resource/Acl/Role.php delete mode 100644 app/code/Magento/Webapi/Model/Resource/Acl/Role/Collection.php delete mode 100644 app/code/Magento/Webapi/Model/Resource/Acl/Rule.php delete mode 100644 app/code/Magento/Webapi/Model/Resource/Acl/Rule/Collection.php delete mode 100644 app/code/Magento/Webapi/Model/Resource/Acl/User.php delete mode 100644 app/code/Magento/Webapi/Model/Resource/Acl/User/Collection.php delete mode 100644 app/code/Magento/Webapi/Model/Source/Acl/Role.php delete mode 100644 app/code/Magento/Webapi/etc/acl.xsd delete mode 100644 app/code/Magento/Webapi/etc/adminhtml/acl.xml delete mode 100644 app/code/Magento/Webapi/etc/adminhtml/menu.xml delete mode 100644 app/code/Magento/Webapi/etc/adminhtml/routes.xml delete mode 100644 app/code/Magento/Webapi/etc/config.xml delete mode 100644 app/code/Magento/Webapi/etc/validation.xml rename dev/tests/integration/testsuite/Magento/Webapi/Block/Adminhtml/Role/Edit/FormTest.php => app/code/Magento/Webapi/sql/webapi_setup/upgrade-1.0.0.3-1.0.0.4.php (71%) delete mode 100644 app/code/Magento/Webapi/view/adminhtml/layout/adminhtml_webapi_role_edit.xml delete mode 100644 app/code/Magento/Webapi/view/adminhtml/layout/adminhtml_webapi_role_edit_tab_users_grid_block.xml delete mode 100644 app/code/Magento/Webapi/view/adminhtml/layout/adminhtml_webapi_role_grid_block.xml delete mode 100644 app/code/Magento/Webapi/view/adminhtml/layout/adminhtml_webapi_role_index.xml delete mode 100644 app/code/Magento/Webapi/view/adminhtml/layout/adminhtml_webapi_role_rolegrid.xml delete mode 100644 app/code/Magento/Webapi/view/adminhtml/layout/adminhtml_webapi_role_usersgrid.xml delete mode 100644 app/code/Magento/Webapi/view/adminhtml/layout/adminhtml_webapi_user_edit.xml delete mode 100644 app/code/Magento/Webapi/view/adminhtml/layout/adminhtml_webapi_user_edit_tab_roles_grid_block.xml delete mode 100644 app/code/Magento/Webapi/view/adminhtml/layout/adminhtml_webapi_user_grid.xml delete mode 100644 app/code/Magento/Webapi/view/adminhtml/layout/adminhtml_webapi_user_grid_block.xml delete mode 100644 app/code/Magento/Webapi/view/adminhtml/layout/adminhtml_webapi_user_index.xml delete mode 100644 app/code/Magento/Webapi/view/adminhtml/layout/adminhtml_webapi_user_rolesgrid.xml delete mode 100644 app/code/Magento/Webapi/view/adminhtml/rolesedit.phtml delete mode 100644 app/code/Magento/Webapi/view/adminhtml/rolesusersgridjs.phtml delete mode 100644 app/code/Magento/Webhook/Block/Adminhtml/Integration/Activate/Permissions/Tab/Webhook.php delete mode 100644 app/code/Magento/Webhook/Block/Adminhtml/Registration/Activate.php delete mode 100644 app/code/Magento/Webhook/Block/Adminhtml/Registration/Create/Form.php delete mode 100644 app/code/Magento/Webhook/Block/Adminhtml/Registration/Create/Form/Container.php delete mode 100644 app/code/Magento/Webhook/Block/Adminhtml/Registration/Failed.php delete mode 100644 app/code/Magento/Webhook/Block/Adminhtml/Subscription.php delete mode 100644 app/code/Magento/Webhook/Block/Adminhtml/Subscription/Edit.php delete mode 100644 app/code/Magento/Webhook/Block/Adminhtml/Subscription/Edit/Form.php delete mode 100644 app/code/Magento/Webhook/Block/Adminhtml/Subscription/Grid/Renderer/Action.php delete mode 100644 app/code/Magento/Webhook/Controller/Adminhtml/Webhook/Registration.php delete mode 100644 app/code/Magento/Webhook/Controller/Adminhtml/Webhook/Subscription.php delete mode 100644 app/code/Magento/Webhook/Helper/Data.php delete mode 100644 app/code/Magento/Webhook/Model/Config.php delete mode 100644 app/code/Magento/Webhook/Model/Endpoint.php delete mode 100644 app/code/Magento/Webhook/Model/Event.php delete mode 100644 app/code/Magento/Webhook/Model/Event/Factory.php delete mode 100644 app/code/Magento/Webhook/Model/Event/QueueReader.php delete mode 100644 app/code/Magento/Webhook/Model/Event/QueueWriter.php delete mode 100644 app/code/Magento/Webhook/Model/Job.php delete mode 100644 app/code/Magento/Webhook/Model/Job/Factory.php delete mode 100644 app/code/Magento/Webhook/Model/Job/QueueReader.php delete mode 100644 app/code/Magento/Webhook/Model/Job/QueueWriter.php delete mode 100644 app/code/Magento/Webhook/Model/Observer.php delete mode 100644 app/code/Magento/Webhook/Model/Resource/Endpoint.php delete mode 100644 app/code/Magento/Webhook/Model/Resource/Event.php delete mode 100644 app/code/Magento/Webhook/Model/Resource/Event/Collection.php delete mode 100644 app/code/Magento/Webhook/Model/Resource/Job.php delete mode 100644 app/code/Magento/Webhook/Model/Resource/Job/Collection.php delete mode 100644 app/code/Magento/Webhook/Model/Resource/Subscription.php delete mode 100644 app/code/Magento/Webhook/Model/Resource/Subscription/Collection.php delete mode 100644 app/code/Magento/Webhook/Model/Resource/Subscription/Grid/Collection.php delete mode 100644 app/code/Magento/Webhook/Model/Source/Authentication.php delete mode 100644 app/code/Magento/Webhook/Model/Source/Format.php delete mode 100644 app/code/Magento/Webhook/Model/Source/Hook.php delete mode 100644 app/code/Magento/Webhook/Model/Subscription.php delete mode 100644 app/code/Magento/Webhook/Model/Subscription/Config.php delete mode 100644 app/code/Magento/Webhook/Model/Subscription/Options/Status.php delete mode 100644 app/code/Magento/Webhook/Model/User.php delete mode 100644 app/code/Magento/Webhook/Model/User/Factory.php delete mode 100644 app/code/Magento/Webhook/Model/Webapi/EventHandler.php delete mode 100644 app/code/Magento/Webhook/Model/Webapi/EventHandler/Factory.php delete mode 100644 app/code/Magento/Webhook/Model/Webapi/User/Factory.php delete mode 100644 app/code/Magento/Webhook/Service/SubscriptionV1.php delete mode 100644 app/code/Magento/Webhook/Service/SubscriptionV1Interface.php delete mode 100644 app/code/Magento/Webhook/etc/adminhtml/acl.xml delete mode 100644 app/code/Magento/Webhook/etc/adminhtml/menu.xml delete mode 100644 app/code/Magento/Webhook/etc/adminhtml/routes.xml delete mode 100644 app/code/Magento/Webhook/etc/crontab.xml delete mode 100644 app/code/Magento/Webhook/etc/di.xml delete mode 100644 app/code/Magento/Webhook/etc/events.xml delete mode 100644 app/code/Magento/Webhook/etc/frontend/routes.xml delete mode 100755 app/code/Magento/Webhook/etc/module.xml delete mode 100644 app/code/Magento/Webhook/etc/webapi.xml delete mode 100644 app/code/Magento/Webhook/etc/webapi/acl.xml delete mode 100644 app/code/Magento/Webhook/schema/service/SubscriptionV1.xsd delete mode 100644 app/code/Magento/Webhook/sql/webhook_setup/install-1.0.0.0.php delete mode 100644 app/code/Magento/Webhook/view/adminhtml/css/boxes.css delete mode 100644 app/code/Magento/Webhook/view/adminhtml/css/modal.css delete mode 100644 app/code/Magento/Webhook/view/adminhtml/css/webhook.css delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/accordion_close.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/accordion_close.png delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/accordion_open.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/accordion_open.png delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/add_btn_icon-disabled.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/add_btn_icon.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/address_list_li.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/address_list_on_arrow.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/address_list_over_arrow.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/address_list_over_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/ajax-loader-tr.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/ajax-loader.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/application_view_tile.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/arrow_sort_move.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/bg_collapse.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/bg_create_order_totals.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/bg_notifications.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/bg_window_mask.png delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/bkg_btn-close.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/bkg_btn-close2.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/bkg_search-magnifier.png delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/blank.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/box_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/breadcrumb_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/btn_add-image_icon.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/btn_add-variable_icon.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/btn_add-widget_icon.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/btn_add-widget_icon2.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/btn_back_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/btn_bare_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/btn_bg-disabled.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/btn_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/btn_bg.png delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/btn_cancel_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/btn_delete_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/btn_go.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/btn_gr_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/btn_gr_on.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/btn_gr_over.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/btn_loading-icon.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/btn_login.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/btn_on_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/btn_over_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/btn_show-hide_icon.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/btn_task_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/button-close.png delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/cancel_btn_active_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/cancel_btn_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/cancel_btn_icon.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/cancel_btn_over_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/cancel_icon.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/config_tab_dt_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/dashboard-close.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/db-graph-bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/db-graph-bottom-bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/db-graph-line-bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/db-graph-line2-bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/db-graph-x-bg.png delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/db-header-bg.png delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/db-menu-bg-hov.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/db-menu-bg-up.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/db-menu-bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/db-menu-sep-last.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/db-menu-sep.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/db-menu-start.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/db-scroll-bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/db-scroll-but-bot-roll.png delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/db-scroll-but-bot.png delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/db-scroll-but-top-roll.png delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/db-scroll-but-top.png delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/db-scroll-roller.png delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/db-tab-bottom-left-bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/db-tab-bottom-mid-bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/db-tab-bottom-right-bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/db-tab-footer.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/db-tab-header-sep.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/db-tab-header.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/db-tab-left.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/db-tab-right.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/dotted_divider_dark.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/dotted_divider_light.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/edit_icon.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/entry_edit_head_arrow_down.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/entry_edit_head_arrow_down2.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/entry_edit_head_arrow_up.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/entry_edit_head_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/error-msg.png delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/error_msg_icon.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/fam_account.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/fam_application_form_delete.png delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/fam_application_view_tile.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/fam_asterisk_orange.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/fam_bin.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/fam_bullet_disk.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/fam_bullet_error.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/fam_bullet_success.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/fam_calendar.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/fam_cart.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/fam_comment.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/fam_creditcards.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/fam_folder_database.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/fam_folder_palette.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/fam_folder_table.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/fam_group.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/fam_help.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/fam_house.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/fam_layout.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/fam_leaf.png delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/fam_link.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/fam_lorry.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/fam_money.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/fam_money_add.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/fam_monitor.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/fam_newspaper.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/fam_newspaper_delete.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/fam_newspaper_error.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/fam_newspaper_go.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/fam_package.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/fam_package_go.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/fam_page_white.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/fam_page_white_edit.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/fam_rainbow.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/fam_refresh.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/fam_server_database.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/fam_status_online.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/fam_tag_orange.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/fam_user.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/fam_user_comment.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/fam_user_edit.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/filter_row_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/footer_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/ghost-dark.png delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/ghost.png delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/gift-message-collapse.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/gift-message-expand.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/gift-message-grid-column-bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/green_button.png delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/green_circle_right.png delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/grey_button.png delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/grey_circle_right.png delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/grid-cal.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/grid_sort_asc.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/grid_sort_desc.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/grid_th_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/grid_th_onclick_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/grouped_to_order_icon.png delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/header_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/header_top_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/hor_arrow.png delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/horiz_tabs_ul_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/i_notice.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/i_question-mark.png delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/ico_success.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/icon-tooltip.png delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/icon_btn_add.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/icon_btn_back.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/icon_btn_delete.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/icon_btn_save.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/icon_edit_address.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/icon_export.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/icon_export.png delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/icon_feed.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/icon_feed.png delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/icon_note_list.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/icon_remove_address.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/image-placeholder.png delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/loader-small.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/login_box_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/login_box_bg.jpg delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/login_box_bg_auth.jpg delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/login_box_bottom.jpg delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/login_box_legal_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/login_logo.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/logo-large.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/logo.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/massaction_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/massaction_button_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/massaction_links_delimiter.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/middle_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/more_arrow.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/nav1_active.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/nav1_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/nav1_off.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/nav1_on.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/nav1_over.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/nav1_sep.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/nav2_last_li_bg.png delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/nav2_last_li_over_bg.png delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/nav2_li_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/nav2_li_bg.png delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/nav2_li_over_bg.png delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/nav2_link_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/nav2_parent_arrow.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/nav3_bg.png delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/nav_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/nav_list_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/nav_nest_link_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/nav_nest_link_over_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/nav_on_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/nav_parent_arrow.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/note_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/note_cell_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/note_msg_icon.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/notice-msg.png delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/pager_arrow_left.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/pager_arrow_left_off.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/pager_arrow_right.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/pager_arrow_right_off.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/process_spinner.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/product_rating_blank_star.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/product_rating_full_star.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/red_button.png delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/red_circle_right.png delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/rule-ajax-loader.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/rule_chooser_trigger.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/rule_component_add.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/rule_component_apply.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/rule_component_remove.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/save_btn_icon.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/sec_nav_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/section_menu_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/section_menu_bottom.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/section_menu_link_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/section_menu_link_over_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/section_menu_over_span_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/section_menu_span_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/section_menu_ul_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/side_col_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/simple_container_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/sort-arrow-down.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/sort-arrow-down.png delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/sort-arrow-up.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/sort-arrow-up.png delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/sort_heading_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/sort_on_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/sort_row_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/spacer.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/sub_button_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/success-msg.png delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/success_msg_icon.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/tabs_link_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/tabs_link_over_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/tabs_span_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/tag_blue_edit.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/tn_cancel_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/tooltip_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/tooltip_corner.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/tooltip_top.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/tree_icons/join.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/tree_icons/joinbottom.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/tree_icons/line.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/tree_icons/minus.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/tree_icons/minusbottom.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/tree_icons/nolines_minus.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/tree_icons/nolines_plus.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/validation_advice_bg.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/varien_logo.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/ver_arrow.png delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/warning_msg_icon.gif delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/window_close.png delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/window_content.png delete mode 100644 app/code/Magento/Webhook/view/adminhtml/images/window_top.png delete mode 100644 app/code/Magento/Webhook/view/adminhtml/js/validate_form.js delete mode 100644 app/code/Magento/Webhook/view/adminhtml/js/webhook.js delete mode 100644 app/code/Magento/Webhook/view/adminhtml/layout/adminhtml_integration_activate_permissions_webhook.xml delete mode 100644 app/code/Magento/Webhook/view/adminhtml/layout/adminhtml_webhook_registration_activate.xml delete mode 100644 app/code/Magento/Webhook/view/adminhtml/layout/adminhtml_webhook_registration_failed.xml delete mode 100644 app/code/Magento/Webhook/view/adminhtml/layout/adminhtml_webhook_registration_succeeded.xml delete mode 100644 app/code/Magento/Webhook/view/adminhtml/layout/adminhtml_webhook_registration_user.xml delete mode 100644 app/code/Magento/Webhook/view/adminhtml/layout/adminhtml_webhook_subscription_edit.xml delete mode 100644 app/code/Magento/Webhook/view/adminhtml/layout/adminhtml_webhook_subscription_grid.xml delete mode 100644 app/code/Magento/Webhook/view/adminhtml/layout/adminhtml_webhook_subscription_index.xml delete mode 100644 app/code/Magento/Webhook/view/adminhtml/registration/activate.phtml delete mode 100644 app/code/Magento/Webhook/view/adminhtml/registration/create/container.phtml delete mode 100644 app/code/Magento/Webhook/view/adminhtml/registration/failed.phtml delete mode 100644 app/code/Magento/Webhook/view/adminhtml/registration/succeeded.phtml delete mode 100644 app/design/frontend/magento_plushe/Magento_Bundle/layout/review_product_list.xml delete mode 100644 app/design/frontend/magento_plushe/Magento_Cms/default/footerbanners.phtml delete mode 100644 app/design/frontend/magento_plushe/Magento_Cms/default/home.phtml delete mode 100644 app/design/frontend/magento_plushe/Magento_Contacts/layout/contacts_index_index.xml delete mode 100644 app/design/frontend/magento_plushe/Magento_Customer/layout/customer_account.xml delete mode 100644 app/design/frontend/magento_plushe/Magento_PageCache/layout/default.xml delete mode 100644 app/design/frontend/magento_plushe/Magento_Rating/detailed.phtml delete mode 100644 app/design/frontend/magento_plushe/Magento_Review/layout/review_product_view.xml create mode 100644 app/design/frontend/magento_plushe/Magento_Theme/layout/default_head_blocks.xml delete mode 100644 dev/tests/integration/testsuite/Magento/PubSub/Event/QueueHandlerTest.php delete mode 100644 dev/tests/integration/testsuite/Magento/PubSub/Job/QueueHandlerTest.php delete mode 100644 dev/tests/integration/testsuite/Magento/PubSub/Message/DispatcherAsyncTest.php rename dev/tests/integration/testsuite/Magento/{Core/Model => View/Design}/Theme/LabelTest.php (77%) delete mode 100644 dev/tests/integration/testsuite/Magento/Webapi/Block/Adminhtml/AbstractFormTest.php delete mode 100644 dev/tests/integration/testsuite/Magento/Webapi/Block/Adminhtml/Role/Edit/Tab/MainTest.php delete mode 100644 dev/tests/integration/testsuite/Magento/Webapi/Block/Adminhtml/Role/Edit/Tab/ResourceTest.php delete mode 100644 dev/tests/integration/testsuite/Magento/Webapi/Block/Adminhtml/User/Edit/FormTest.php delete mode 100644 dev/tests/integration/testsuite/Magento/Webapi/Block/Adminhtml/User/Edit/Tab/MainTest.php delete mode 100644 dev/tests/integration/testsuite/Magento/Webapi/Block/Adminhtml/User/Edit/TabsTest.php delete mode 100644 dev/tests/integration/testsuite/Magento/Webapi/Block/Adminhtml/User/EditTest.php delete mode 100644 dev/tests/integration/testsuite/Magento/Webapi/Model/Acl/RoleTest.php delete mode 100644 dev/tests/integration/testsuite/Magento/Webapi/Model/Acl/RuleTest.php delete mode 100644 dev/tests/integration/testsuite/Magento/Webapi/Model/Acl/UserTest.php delete mode 100644 dev/tests/integration/testsuite/Magento/Webapi/Model/Resource/Acl/RoleTest.php delete mode 100644 dev/tests/integration/testsuite/Magento/Webapi/Model/Resource/Acl/RuleTest.php delete mode 100644 dev/tests/integration/testsuite/Magento/Webapi/_files/role.php delete mode 100644 dev/tests/integration/testsuite/Magento/Webapi/_files/role_with_rule.php delete mode 100644 dev/tests/integration/testsuite/Magento/Webapi/_files/user_with_role.php delete mode 100644 dev/tests/integration/testsuite/Magento/Webhook/Block/Adminhtml/Registration/ActivateTest.php delete mode 100644 dev/tests/integration/testsuite/Magento/Webhook/Block/Adminhtml/Registration/Create/Form/ContainerTest.php delete mode 100644 dev/tests/integration/testsuite/Magento/Webhook/Block/Adminhtml/Registration/Create/FormTest.php delete mode 100644 dev/tests/integration/testsuite/Magento/Webhook/Block/Adminhtml/Registration/FailedTest.php delete mode 100644 dev/tests/integration/testsuite/Magento/Webhook/Block/Adminhtml/Subscription/Edit/FormTest.php delete mode 100644 dev/tests/integration/testsuite/Magento/Webhook/Block/Adminhtml/Subscription/EditTest.php delete mode 100644 dev/tests/integration/testsuite/Magento/Webhook/Block/Adminhtml/Subscription/Grid/Renderer/ActionTest.php delete mode 100644 dev/tests/integration/testsuite/Magento/Webhook/Block/Adminhtml/SubscriptionTest.php delete mode 100644 dev/tests/integration/testsuite/Magento/Webhook/Controller/Adminhtml/Webhook/RegistrationTest.php delete mode 100644 dev/tests/integration/testsuite/Magento/Webhook/Controller/Adminhtml/Webhook/SubscriptionTest.php delete mode 100644 dev/tests/integration/testsuite/Magento/Webhook/Model/EndpointTest.php delete mode 100644 dev/tests/integration/testsuite/Magento/Webhook/Model/Event/FactoryTest.php delete mode 100644 dev/tests/integration/testsuite/Magento/Webhook/Model/Event/QueueReaderTest.php delete mode 100644 dev/tests/integration/testsuite/Magento/Webhook/Model/Event/QueueWriterTest.php delete mode 100644 dev/tests/integration/testsuite/Magento/Webhook/Model/EventTest.php delete mode 100644 dev/tests/integration/testsuite/Magento/Webhook/Model/Job/FactoryTest.php delete mode 100644 dev/tests/integration/testsuite/Magento/Webhook/Model/Job/QueueReaderTest.php delete mode 100644 dev/tests/integration/testsuite/Magento/Webhook/Model/Job/QueueWriterTest.php delete mode 100644 dev/tests/integration/testsuite/Magento/Webhook/Model/JobTest.php delete mode 100644 dev/tests/integration/testsuite/Magento/Webhook/Model/ObserverTest.php delete mode 100644 dev/tests/integration/testsuite/Magento/Webhook/Model/Resource/EndpointTest.php delete mode 100644 dev/tests/integration/testsuite/Magento/Webhook/Model/Resource/Event/CollectionTest.php delete mode 100644 dev/tests/integration/testsuite/Magento/Webhook/Model/Resource/EventTest.php delete mode 100644 dev/tests/integration/testsuite/Magento/Webhook/Model/Resource/Job/CollectionTest.php delete mode 100644 dev/tests/integration/testsuite/Magento/Webhook/Model/Resource/JobTest.php delete mode 100644 dev/tests/integration/testsuite/Magento/Webhook/Model/Resource/Subscription/CollectionTest.php delete mode 100644 dev/tests/integration/testsuite/Magento/Webhook/Model/Resource/Subscription/Grid/CollectionTest.php delete mode 100644 dev/tests/integration/testsuite/Magento/Webhook/Model/Resource/SubscriptionTest.php delete mode 100644 dev/tests/integration/testsuite/Magento/Webhook/Model/Subscription/ConfigTest.php delete mode 100644 dev/tests/integration/testsuite/Magento/Webhook/Model/Subscription/Options/StatusTest.php delete mode 100644 dev/tests/integration/testsuite/Magento/Webhook/Model/SubscriptionTest.php delete mode 100644 dev/tests/integration/testsuite/Magento/Webhook/Model/UserTest.php delete mode 100644 dev/tests/integration/testsuite/Magento/Webhook/Model/Webapi/EventHandler/FactoryTest.php delete mode 100644 dev/tests/integration/testsuite/Magento/Webhook/Model/Webapi/User/FactoryTest.php delete mode 100644 dev/tests/integration/testsuite/Magento/Webhook/Service/SubscriptionV1Test.php create mode 100644 dev/tests/unit/testsuite/Magento/Authz/Service/AuthorizationV1Test.php create mode 100644 dev/tests/unit/testsuite/Magento/Checkout/Block/Onepage/SuccessTest.php create mode 100644 dev/tests/unit/testsuite/Magento/Code/Validator/TypeDuplicationTest.php create mode 100644 dev/tests/unit/testsuite/Magento/Code/Validator/_files/ClassesForTypeDuplication.php create mode 100644 dev/tests/unit/testsuite/Magento/Integration/Service/OauthV1Test.php delete mode 100644 dev/tests/unit/testsuite/Magento/PubSub/Event/QueueHandlerTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/PubSub/Job/QueueHandlerTest.php rename dev/tests/unit/testsuite/Magento/{Core/Model/Theme => Theme/Model}/CopyServiceTest.php (97%) rename dev/tests/unit/testsuite/Magento/{Core/Model => View}/Layout/Argument/HandlerFactoryTest.php (85%) delete mode 100644 dev/tests/unit/testsuite/Magento/Webapi/Block/Adminhtml/Role/Edit/Tab/ResourceTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webapi/Block/Adminhtml/Role/Edit/TabsTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webapi/Block/Adminhtml/Role/EditTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webapi/Block/Adminhtml/RoleTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webapi/Block/Adminhtml/User/EditTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webapi/Block/Adminhtml/UserTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webapi/Model/Acl/Resource/Config/Converter/DomTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webapi/Model/Acl/Resource/Config/Converter/_files/converted_valid_webapi_acl.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webapi/Model/Acl/Resource/Config/Converter/_files/valid_webapi_acl.xml delete mode 100644 dev/tests/unit/testsuite/Magento/Webapi/Model/Acl/Resource/Config/SchemaLocatorTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webapi/Model/Acl/Resource/ProviderTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webapi/Model/Acl/Role/FactoryTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webapi/Model/Acl/Role/InRoleUserUpdaterTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webapi/Model/Acl/Role/UsersUpdaterTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webapi/Model/Acl/RoleTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webapi/Model/Acl/RuleTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webapi/Model/Acl/User/FactoryTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webapi/Model/Acl/User/RoleUpdaterTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webapi/Model/Acl/UserTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webapi/Model/Authorization/Loader/ResourceTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webapi/Model/Authorization/Loader/RoleTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webapi/Model/Authorization/Loader/RuleTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webapi/Model/Authorization/Role/FactoryTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webapi/Model/Authorization/RoleLocatorTest.php create mode 100644 dev/tests/unit/testsuite/Magento/Webapi/Model/Config/XsdTest.php create mode 100644 dev/tests/unit/testsuite/Magento/Webapi/Model/Plugin/IntegrationServiceV1Test.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webapi/Model/Resource/Acl/AbstractTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webapi/Model/Resource/Acl/RoleTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webapi/Model/Resource/Acl/RuleTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webapi/Model/Resource/Acl/UserTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webapi/Model/Source/Acl/RoleTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webhook/Block/Adminhtml/Registration/ActivateTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webhook/Block/Adminhtml/Registration/Create/Form/ContainerTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webhook/Block/Adminhtml/Registration/Create/FormTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webhook/Block/Adminhtml/Registration/FailedTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webhook/Block/Adminhtml/Subscription/Edit/FormTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webhook/Block/Adminhtml/Subscription/EditTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webhook/Block/Adminhtml/Subscription/Grid/Renderer/ActionTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webhook/Block/Adminhtml/SubscriptionTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webhook/Controller/Adminhtml/Webhook/RegistrationTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webhook/Controller/Adminhtml/Webhook/SubscriptionTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webhook/Model/EndpointTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webhook/Model/Event/FactoryTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webhook/Model/Event/QueueReaderTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webhook/Model/Event/QueueWriterTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webhook/Model/EventTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webhook/Model/Job/FactoryTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webhook/Model/Job/QueueReaderTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webhook/Model/Job/QueueWriterTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webhook/Model/JobTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webhook/Model/ObserverTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webhook/Model/Resource/EndpointTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webhook/Model/Resource/Event/CollectionTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webhook/Model/Resource/EventTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webhook/Model/Resource/Job/CollectionTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webhook/Model/Resource/JobTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webhook/Model/Resource/Subscription/CollectionTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webhook/Model/Resource/Subscription/Grid/CollectionTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webhook/Model/Resource/SubscriptionTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webhook/Model/Source/AuthenticationTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webhook/Model/Source/FormatTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webhook/Model/Source/HookTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webhook/Model/Source/Pkg.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webhook/Model/Subscription/ConfigTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webhook/Model/Subscription/FactoryTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webhook/Model/Subscription/Options/StatusTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webhook/Model/SubscriptionTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webhook/Model/User/FactoryTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webhook/Model/UserTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webhook/Model/Webapi/EventHandler/FactoryTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webhook/Model/Webapi/EventHandlerTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webhook/Model/Webapi/User/FactoryTest.php delete mode 100644 dev/tests/unit/testsuite/Magento/Webhook/Model/_files/acl.xml delete mode 100644 dev/tests/unit/testsuite/Magento/Webhook/Model/_files/acl.xsd delete mode 100644 dev/tests/unit/testsuite/Magento/Webhook/Model/_files/acl2.xml delete mode 100644 dev/tests/unit/testsuite/Magento/Webhook/Service/SubscriptionV1Test.php create mode 100644 lib/Magento/Code/Validator/TypeDuplication.php rename {app/code/Magento/Core/Model => lib/Magento/View/Design}/Theme/Label.php (66%) rename app/code/Magento/Webhook/Exception.php => lib/Magento/View/Design/Theme/Label/ListInterface.php (81%) rename app/code/Magento/Webhook/Model/Subscription/Factory.php => lib/Magento/View/Design/Theme/LabelFactory.php (60%) rename app/code/Magento/Webapi/Model/Authorization/Role.php => lib/Magento/View/Design/Theme/ListInterface.php (76%) rename {app/code/Magento/Core/Model => lib/Magento/View}/DesignLoader.php (98%) rename {app/code/Magento/Core/Model => lib/Magento/View}/Layout/Argument/HandlerFactory.php (58%) rename {app/code/Magento/Core/Model => lib/Magento/View}/Layout/Argument/HandlerInterface.php (90%) rename {app/code/Magento/Core/Model => lib/Magento/View}/Layout/PageType/Config.php (95%) rename {app/code/Magento/Core/Model => lib/Magento/View}/Layout/PageType/Config/Converter.php (96%) rename {app/code/Magento/Core/Model => lib/Magento/View}/Layout/PageType/Config/Reader.php (89%) rename {app/code/Magento/Core/Model => lib/Magento/View}/Layout/PageType/Config/SchemaLocator.php (97%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1c8730a663489..4baa1101f39e9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,12 +1,40 @@ +2.0.0.0-dev56 +============= +* Fixed bugs: + * Fixed placing order with PayPal Payments Advanced and Payflow Link + * Fixed losing previously assigned categories after saving the product with changed category selector field + * Fixed losing of a newly created category assignment after variations generation during Configurable product or Gift Card creation + * Fixed the error in order placement with Recurring profile payment +* GitHub requests: + * [#299](https://github.com/magento/magento2/pull/299) -- Fix for issue Refactor Mage_Rating_Model_Resource_Rating_Collection + * [#341](https://github.com/magento/magento2/pull/341) -- Replacing simple preg calls with less expensive alternates +* Modularity improvements: + * Layout page type config moved to library + * Design loader moved to library + * Theme label moved to library +* Themes update: + * Reduced amount of templates and layouts in magento_plushe theme + * Responsive design improvements +* Integrity improvements: + * Covered all Magento classes with argument sequence validator + * Added arguments type duplication validator +* Implemented API Integration UX flows: + * Ability to create and edit API Integrations + * Ability to delete API integrations that were not created using configuration files +* Removed System REST menu item and all associated UX flows: + * Users, Roles, and Webhook Subscriptions sub-menu items were removed +* Removed the Webhook module + 2.0.0.0-dev55 ============= * Modularity improvements: - * Session configuration moved to library - * FormKey logic was moved from Session - * SessionIdFlags from Session was removed + * Session configuration is moved to library + * FormKey logic is moved out from Session model + * SessionIdFlags is removed from Session model * Move Page logic to the Theme module and library -* Created integration module UX +* Created UX for the Integration module * Created authorization service (Magento_Authz module) + * Implemented an API Authz check in the Webapi framework * Fixed bugs: * Fixed the issue that prevented a customer group's shopping cart rules from applying properly to prices. The issue occurred when a customer was manually assigned to a customer group and automatic group assignment was enabled. * Fixed the bug with schema upgrade scripts not running after installation diff --git a/app/code/Magento/Adminhtml/Block/Urlrewrite/Edit/Form.php b/app/code/Magento/Adminhtml/Block/Urlrewrite/Edit/Form.php index 2769b31300a89..04f0465b272f7 100644 --- a/app/code/Magento/Adminhtml/Block/Urlrewrite/Edit/Form.php +++ b/app/code/Magento/Adminhtml/Block/Urlrewrite/Edit/Form.php @@ -174,7 +174,7 @@ protected function _prepareForm() // Prepare form /** @var \Magento\Data\Form $form */ $form = $this->_formFactory->create(array( - 'attributes' => array( + 'data' => array( 'id' => 'edit_form', 'use_container' => true, 'method' => 'post', diff --git a/app/code/Magento/Authorizenet/Model/Directpost.php b/app/code/Magento/Authorizenet/Model/Directpost.php index c9abc5bce283e..878c38cfcd87d 100644 --- a/app/code/Magento/Authorizenet/Model/Directpost.php +++ b/app/code/Magento/Authorizenet/Model/Directpost.php @@ -53,79 +53,80 @@ class Directpost extends \Magento\Paygate\Model\Authorizenet */ protected $_storeManager; - /** - * @var \Magento\Sales\Model\OrderFactory - */ - protected $_orderFactory; - /** * @var \Magento\Sales\Model\QuoteFactory */ protected $_quoteFactory; - /** - * @var \Magento\Authorizenet\Model\Directpost\RequestFactory - */ - protected $_requestFactory; - /** * @var \Magento\Authorizenet\Model\Directpost\Response */ protected $_response; /** - * Construct - * - * @param \Magento\Paygate\Model\Authorizenet\CardsFactory $cardsFactory - * @param \Magento\Paygate\Model\Authorizenet\RequestFactory $parentRequestFactory - * @param \Magento\Paygate\Model\Authorizenet\ResultFactory $resultFactory - * @param \Magento\Sales\Model\OrderFactory $orderFactory - * @param \Magento\Core\Model\Session\AbstractSession $session - * @param \Magento\Logger $logger * @param \Magento\Event\ManagerInterface $eventManager - * @param \Magento\Paygate\Helper\Data $paygateData - * @param \Magento\Module\ModuleListInterface $moduleList - * @param \Magento\Core\Model\Store\Config $coreStoreConfig * @param \Magento\Payment\Helper\Data $paymentData + * @param \Magento\Core\Model\Store\Config $coreStoreConfig * @param \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory + * @param \Magento\Logger $logger + * @param \Magento\Module\ModuleListInterface $moduleList * @param \Magento\Core\Model\LocaleInterface $locale * @param \Magento\Centinel\Model\Service $centinelService - * @param \Magento\Core\Model\StoreManagerInterface $storeManager + * @param \Magento\Paygate\Model\Authorizenet\CardsFactory $cardsFactory + * @param \Magento\Paygate\Model\Authorizenet\RequestFactory $requestFactory + * @param \Magento\Paygate\Model\Authorizenet\ResultFactory $resultFactory * @param \Magento\Sales\Model\OrderFactory $orderFactory + * @param \Magento\Core\Model\Session\AbstractSession $session + * @param \Magento\Paygate\Helper\Data $paygateData + * @param \Magento\Core\Model\StoreManagerInterface $storeManager * @param \Magento\Sales\Model\QuoteFactory $quoteFactory - * @param \Magento\Authorizenet\Model\Directpost\RequestFactory $requestFactory + * @param \Magento\Authorizenet\Model\Directpost\RequestFactory $directRequestFactory * @param \Magento\Authorizenet\Model\Directpost\Response $response * @param array $data + * + * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( - \Magento\Paygate\Model\Authorizenet\CardsFactory $cardsFactory, - \Magento\Paygate\Model\Authorizenet\RequestFactory $parentRequestFactory, - \Magento\Paygate\Model\Authorizenet\ResultFactory $resultFactory, - \Magento\Sales\Model\OrderFactory $orderFactory, - \Magento\Core\Model\Session\AbstractSession $session, - \Magento\Logger $logger, \Magento\Event\ManagerInterface $eventManager, - \Magento\Paygate\Helper\Data $paygateData, - \Magento\Module\ModuleListInterface $moduleList, - \Magento\Core\Model\Store\Config $coreStoreConfig, \Magento\Payment\Helper\Data $paymentData, + \Magento\Core\Model\Store\Config $coreStoreConfig, \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory, + \Magento\Logger $logger, + \Magento\Module\ModuleListInterface $moduleList, \Magento\Core\Model\LocaleInterface $locale, \Magento\Centinel\Model\Service $centinelService, - \Magento\Core\Model\StoreManagerInterface $storeManager, + \Magento\Paygate\Model\Authorizenet\CardsFactory $cardsFactory, + \Magento\Paygate\Model\Authorizenet\RequestFactory $requestFactory, + \Magento\Paygate\Model\Authorizenet\ResultFactory $resultFactory, \Magento\Sales\Model\OrderFactory $orderFactory, + \Magento\Core\Model\Session\AbstractSession $session, + \Magento\Paygate\Helper\Data $paygateData, + \Magento\Core\Model\StoreManagerInterface $storeManager, \Magento\Sales\Model\QuoteFactory $quoteFactory, - \Magento\Authorizenet\Model\Directpost\RequestFactory $requestFactory, + \Magento\Authorizenet\Model\Directpost\RequestFactory $directRequestFactory, \Magento\Authorizenet\Model\Directpost\Response $response, array $data = array() ) { - parent::__construct($cardsFactory, $parentRequestFactory, $resultFactory, $orderFactory, $session, - $logger, $eventManager, $paygateData, $moduleList, $coreStoreConfig, $paymentData, - $logAdapterFactory, $locale, $centinelService, $data); + parent::__construct( + $eventManager, + $paymentData, + $coreStoreConfig, + $logAdapterFactory, + $logger, + $moduleList, + $locale, + $centinelService, + $cardsFactory, + $requestFactory, + $resultFactory, + $orderFactory, + $session, + $paygateData, + $data + ); $this->_storeManager = $storeManager; - $this->_orderFactory = $orderFactory; $this->_quoteFactory = $quoteFactory; - $this->_requestFactory = $requestFactory; + $this->_requestFactory = $directRequestFactory; $this->_response = $response; } diff --git a/app/code/Magento/Authorizenet/Model/Directpost/Session.php b/app/code/Magento/Authorizenet/Model/Directpost/Session.php index 778a9f409225e..e7e3dfb566fd9 100644 --- a/app/code/Magento/Authorizenet/Model/Directpost/Session.php +++ b/app/code/Magento/Authorizenet/Model/Directpost/Session.php @@ -39,15 +39,15 @@ class Session extends \Magento\Core\Model\Session\AbstractSession * @param \Magento\Core\Model\Session\Context $context * @param \Magento\Session\SidResolverInterface $sidResolver * @param \Magento\Session\Config\ConfigInterface $sessionConfig + * @param null $sessionName * @param array $data - * @param string|null $sessionName */ public function __construct( \Magento\Core\Model\Session\Context $context, \Magento\Session\SidResolverInterface $sidResolver, \Magento\Session\Config\ConfigInterface $sessionConfig, - array $data = array(), - $sessionName = null + $sessionName = null, + array $data = array() ) { parent::__construct($context, $sidResolver, $sessionConfig, $data); $this->start('authorizenet_directpost', $sessionName); diff --git a/app/code/Magento/Authz/Service/AuthorizationV1.php b/app/code/Magento/Authz/Service/AuthorizationV1.php index cce2256d61a24..3c8d7d86a6efc 100644 --- a/app/code/Magento/Authz/Service/AuthorizationV1.php +++ b/app/code/Magento/Authz/Service/AuthorizationV1.php @@ -192,6 +192,23 @@ public function getAllowedResources(UserIdentifier $userIdentifier) return $allowedResources; } + /** + * {@inheritdoc} + */ + public function removePermissions(UserIdentifier $userIdentifier) + { + try { + $this->_deleteRole($userIdentifier); + } catch (ServiceException $e) { + throw $e; + } catch (\Exception $e) { + $this->_logger->logException($e); + throw new ServiceException( + __('Error happened while deleting role and permissions. Check exception log for details.') + ); + } + } + /** * Create new ACL role. * @@ -223,6 +240,28 @@ protected function _createRole($userIdentifier) return $role; } + /** + * Remove an ACL role. This deletes the cascading permissions + * + * @param UserIdentifier $userIdentifier + * @return Role + * @throws \LogicException + */ + protected function _deleteRole($userIdentifier) + { + $userType = $userIdentifier->getUserType(); + $userId = $userIdentifier->getUserId(); + switch ($userType) { + case UserIdentifier::USER_TYPE_INTEGRATION: + $roleName = $userType . $userId; + break; + default: + throw new \LogicException("Unknown user type: '{$userType}'."); + } + $role = $this->_roleFactory->create()->load($roleName, 'role_name'); + return $role->delete(); + } + /** * Identify user role from user identifier. * diff --git a/app/code/Magento/Authz/Service/AuthorizationV1Interface.php b/app/code/Magento/Authz/Service/AuthorizationV1Interface.php index 02b6f60d2c140..80cf0be14d375 100644 --- a/app/code/Magento/Authz/Service/AuthorizationV1Interface.php +++ b/app/code/Magento/Authz/Service/AuthorizationV1Interface.php @@ -69,4 +69,12 @@ public function isAllowed($resources, UserIdentifier $userIdentifier = null); * @throws ServiceException */ public function getAllowedResources(UserIdentifier $userIdentifier); + + /** + * Remove user role and associated permissions. + * + * @param UserIdentifier $userIdentifier + * @throws ServiceException + */ + public function removePermissions(UserIdentifier $userIdentifier); } diff --git a/app/code/Magento/Backend/App/Action/Context.php b/app/code/Magento/Backend/App/Action/Context.php index 1eec150730b63..c0728e95e4182 100644 --- a/app/code/Magento/Backend/App/Action/Context.php +++ b/app/code/Magento/Backend/App/Action/Context.php @@ -81,11 +81,11 @@ class Context extends \Magento\App\Action\Context * @param \Magento\App\ResponseInterface $response * @param \Magento\ObjectManager $objectManager * @param \Magento\Event\ManagerInterface $eventManager - * @param \Magento\Backend\Model\Session $session * @param \Magento\UrlInterface $url * @param \Magento\App\Response\RedirectInterface $redirect * @param \Magento\App\ActionFlag $actionFlag * @param \Magento\App\ViewInterface $view + * @param \Magento\Backend\Model\Session $session * @param \Magento\AuthorizationInterface $authorization * @param \Magento\Backend\Model\Auth $auth * @param \Magento\Backend\Helper\Data $helper @@ -100,11 +100,11 @@ public function __construct( \Magento\App\ResponseInterface $response, \Magento\ObjectManager $objectManager, \Magento\Event\ManagerInterface $eventManager, - \Magento\Backend\Model\Session $session, \Magento\UrlInterface $url, \Magento\App\Response\RedirectInterface $redirect, \Magento\App\ActionFlag $actionFlag, \Magento\App\ViewInterface $view, + \Magento\Backend\Model\Session $session, \Magento\AuthorizationInterface $authorization, \Magento\Backend\Model\Auth $auth, \Magento\Backend\Helper\Data $helper, @@ -114,16 +114,8 @@ public function __construct( \Magento\Core\Model\LocaleInterface $locale, $canUseBaseUrl = false ) { - parent::__construct( - $request, - $response, - $objectManager, - $eventManager, - $url, - $redirect, - $actionFlag, - $view - ); + parent::__construct($request, $response, $objectManager, $eventManager, $url, $redirect, $actionFlag, $view); + $this->_session = $session; $this->_authorization = $authorization; $this->_auth = $auth; diff --git a/app/code/Magento/Backend/App/Router/DefaultRouter.php b/app/code/Magento/Backend/App/Router/DefaultRouter.php index 57c1b9c5d02fe..bde535d4029a3 100644 --- a/app/code/Magento/Backend/App/Router/DefaultRouter.php +++ b/app/code/Magento/Backend/App/Router/DefaultRouter.php @@ -44,22 +44,22 @@ class DefaultRouter extends \Magento\Core\App\Router\Base protected $_coreConfig; /** - * @param \Magento\Core\Model\Config $coreConfig * @param \Magento\App\ActionFactory $actionFactory * @param \Magento\App\DefaultPathInterface $defaultPath * @param \Magento\App\ResponseFactory $responseFactory * @param \Magento\App\Route\ConfigInterface $routeConfig * @param \Magento\App\State $appState - * @param \Magento\Core\Model\Url|\Magento\UrlInterface $url - * @param \Magento\Core\Model\StoreManager|\Magento\Core\Model\StoreManagerInterface $storeManager + * @param \Magento\UrlInterface $url + * @param \Magento\Core\Model\StoreManagerInterface $storeManager * @param \Magento\Core\Model\Store\Config $storeConfig * @param \Magento\Core\Model\Url\SecurityInfoInterface $urlSecurityInfo - * @param $routerId + * @param string $routerId + * @param \Magento\Core\Model\Config $coreConfig * @param \Magento\Backend\App\ConfigInterface $backendConfig - * @throws \InvalidArgumentException + * + * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( - \Magento\Core\Model\Config $coreConfig, \Magento\App\ActionFactory $actionFactory, \Magento\App\DefaultPathInterface $defaultPath, \Magento\App\ResponseFactory $responseFactory, @@ -70,11 +70,20 @@ public function __construct( \Magento\Core\Model\Store\Config $storeConfig, \Magento\Core\Model\Url\SecurityInfoInterface $urlSecurityInfo, $routerId, + \Magento\Core\Model\Config $coreConfig, \Magento\Backend\App\ConfigInterface $backendConfig ) { parent::__construct( - $actionFactory, $defaultPath, $responseFactory, $routeConfig, $appState, $url, $storeManager, $storeConfig, - $urlSecurityInfo, $routerId + $actionFactory, + $defaultPath, + $responseFactory, + $routeConfig, + $appState, + $url, + $storeManager, + $storeConfig, + $urlSecurityInfo, + $routerId ); $this->_coreConfig = $coreConfig; $this->_backendConfig = $backendConfig; diff --git a/app/code/Magento/Backend/Block/Context.php b/app/code/Magento/Backend/Block/Context.php index be933a5adb5a5..28420ebb514d7 100644 --- a/app/code/Magento/Backend/Block/Context.php +++ b/app/code/Magento/Backend/Block/Context.php @@ -51,14 +51,14 @@ class Context extends \Magento\View\Element\Context * @param \Magento\View\Url $viewUrl * @param \Magento\View\ConfigInterface $viewConfig * @param \Magento\App\Cache\StateInterface $cacheState - * @param \Magento\AuthorizationInterface $authorization * @param \Magento\Logger $logger * @param \Magento\Core\Model\App $app * @param \Magento\Escaper $escaper * @param \Magento\Filter\FilterManager $filterManager * @param \Magento\Core\Model\LocaleInterface $locale + * @param \Magento\AuthorizationInterface $authorization * @param array $data - * + * * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( @@ -77,12 +77,12 @@ public function __construct( \Magento\View\Url $viewUrl, \Magento\View\ConfigInterface $viewConfig, \Magento\App\Cache\StateInterface $cacheState, - \Magento\AuthorizationInterface $authorization, \Magento\Logger $logger, \Magento\Core\Model\App $app, \Magento\Escaper $escaper, \Magento\Filter\FilterManager $filterManager, \Magento\Core\Model\LocaleInterface $locale, + \Magento\AuthorizationInterface $authorization, array $data = array() ) { $this->_authorization = $authorization; diff --git a/app/code/Magento/Backend/Block/System/Config/Form/Field/Export.php b/app/code/Magento/Backend/Block/System/Config/Form/Field/Export.php index f5fdd0edbe4e5..3bdedf592d049 100644 --- a/app/code/Magento/Backend/Block/System/Config/Form/Field/Export.php +++ b/app/code/Magento/Backend/Block/System/Config/Form/Field/Export.php @@ -41,21 +41,21 @@ class Export extends \Magento\Data\Form\Element\AbstractElement protected $_helperFactory; /** - * @param \Magento\Escaper $escaper * @param \Magento\Data\Form\Element\Factory $factoryElement * @param \Magento\Data\Form\Element\CollectionFactory $factoryCollection + * @param \Magento\Escaper $escaper * @param \Magento\App\Helper\HelperFactory $helperFactory - * @param array $attributes + * @param array $data */ public function __construct( - \Magento\Escaper $escaper, \Magento\Data\Form\Element\Factory $factoryElement, \Magento\Data\Form\Element\CollectionFactory $factoryCollection, + \Magento\Escaper $escaper, \Magento\App\Helper\HelperFactory $helperFactory, - array $attributes = array() + array $data = array() ) { $this->_helperFactory = $helperFactory; - parent::__construct($escaper, $factoryElement, $factoryCollection, $attributes); + parent::__construct($factoryElement, $factoryCollection, $escaper, $data); } public function getElementHtml() diff --git a/app/code/Magento/Backend/Block/System/Config/Form/Field/Regexceptions.php b/app/code/Magento/Backend/Block/System/Config/Form/Field/Regexceptions.php index 933a2a1986e62..a65b00c769500 100644 --- a/app/code/Magento/Backend/Block/System/Config/Form/Field/Regexceptions.php +++ b/app/code/Magento/Backend/Block/System/Config/Form/Field/Regexceptions.php @@ -38,20 +38,20 @@ class Regexceptions protected $_elementFactory; /** - * @var \Magento\Core\Model\Theme\LabelFactory + * @var \Magento\View\Design\Theme\LabelFactory */ protected $_labelFactory; /** * @param \Magento\Backend\Block\Template\Context $context * @param \Magento\Data\Form\Element\Factory $elementFactory - * @param \Magento\Core\Model\Theme\LabelFactory $labelFactory + * @param \Magento\View\Design\Theme\LabelFactory $labelFactory * @param array $data */ public function __construct( \Magento\Backend\Block\Template\Context $context, \Magento\Data\Form\Element\Factory $elementFactory, - \Magento\Core\Model\Theme\LabelFactory $labelFactory, + \Magento\View\Design\Theme\LabelFactory $labelFactory, array $data = array() ) { $this->_elementFactory = $elementFactory; @@ -84,7 +84,7 @@ protected function _construct() public function renderCellTemplate($columnName) { if ($columnName == 'value' && isset($this->_columns[$columnName])) { - /** @var $label \Magento\Core\Model\Theme\Label */ + /** @var $label \Magento\View\Design\Theme\Label */ $label = $this->_labelFactory->create(); $options = $label->getLabelsCollection(__('-- No Theme --')); $element = $this->_elementFactory->create('select'); diff --git a/app/code/Magento/Backend/Block/System/Design/Edit/Tab/General.php b/app/code/Magento/Backend/Block/System/Design/Edit/Tab/General.php index f41d6865deaad..9c94e95dd29bf 100644 --- a/app/code/Magento/Backend/Block/System/Design/Edit/Tab/General.php +++ b/app/code/Magento/Backend/Block/System/Design/Edit/Tab/General.php @@ -28,7 +28,7 @@ class General extends \Magento\Backend\Block\Widget\Form\Generic { /** - * @var \Magento\Core\Model\Theme\LabelFactory + * @var \Magento\View\Design\Theme\LabelFactory */ protected $_labelFactory; @@ -41,7 +41,7 @@ class General extends \Magento\Backend\Block\Widget\Form\Generic * @param \Magento\Backend\Block\Template\Context $context * @param \Magento\Core\Model\Registry $registry * @param \Magento\Data\FormFactory $formFactory - * @param \Magento\Core\Model\Theme\LabelFactory $labelFactory + * @param \Magento\View\Design\Theme\LabelFactory $labelFactory * @param \Magento\Core\Model\System\Store $systemStore * @param array $data */ @@ -49,7 +49,7 @@ public function __construct( \Magento\Backend\Block\Template\Context $context, \Magento\Core\Model\Registry $registry, \Magento\Data\FormFactory $formFactory, - \Magento\Core\Model\Theme\LabelFactory $labelFactory, + \Magento\View\Design\Theme\LabelFactory $labelFactory, \Magento\Core\Model\System\Store $systemStore, array $data = array() ) { @@ -90,7 +90,7 @@ protected function _prepareForm() )); } - /** @var $label \Magento\Core\Model\Theme\Label */ + /** @var $label \Magento\View\Design\Theme\Label */ $label = $this->_labelFactory->create(); $options = $label->getLabelsCollection(__('-- Please Select --')); $fieldset->addField('design', 'select', array( diff --git a/app/code/Magento/Backend/Block/System/Store/Delete/Form.php b/app/code/Magento/Backend/Block/System/Store/Delete/Form.php index 24afcf4cd7a50..17f69c304b69b 100644 --- a/app/code/Magento/Backend/Block/System/Store/Delete/Form.php +++ b/app/code/Magento/Backend/Block/System/Store/Delete/Form.php @@ -53,7 +53,7 @@ protected function _prepareForm() /** @var \Magento\Data\Form $form */ $form = $this->_formFactory->create(array( - 'attributes' => array( + 'data' => array( 'id' => 'edit_form', 'action' => $this->getData('action'), 'method' => 'post', diff --git a/app/code/Magento/Backend/Block/System/Store/Edit/AbstractForm.php b/app/code/Magento/Backend/Block/System/Store/Edit/AbstractForm.php index c2b29edc020d0..d8a6907cf186b 100644 --- a/app/code/Magento/Backend/Block/System/Store/Edit/AbstractForm.php +++ b/app/code/Magento/Backend/Block/System/Store/Edit/AbstractForm.php @@ -56,7 +56,7 @@ protected function _prepareForm() { /** @var \Magento\Data\Form $form */ $form = $this->_formFactory->create(array( - 'attributes' => array( + 'data' => array( 'id' => 'edit_form', 'action' => $this->getData('action'), 'method' => 'post', diff --git a/app/code/Magento/Backend/Block/System/Variable/Edit/Form.php b/app/code/Magento/Backend/Block/System/Variable/Edit/Form.php index 418f10eadd835..e434932502b61 100644 --- a/app/code/Magento/Backend/Block/System/Variable/Edit/Form.php +++ b/app/code/Magento/Backend/Block/System/Variable/Edit/Form.php @@ -54,7 +54,7 @@ protected function _prepareForm() { /** @var \Magento\Data\Form $form */ $form = $this->_formFactory->create(array( - 'attributes' => array( + 'data' => array( 'id' => 'edit_form', 'action' => $this->getData('action'), 'method' => 'post', diff --git a/app/code/Magento/Backend/Block/Template/Context.php b/app/code/Magento/Backend/Block/Template/Context.php index cc5d8166fb1eb..3ebe55ef7568c 100644 --- a/app/code/Magento/Backend/Block/Template/Context.php +++ b/app/code/Magento/Backend/Block/Template/Context.php @@ -66,16 +66,16 @@ class Context extends \Magento\View\Element\Template\Context * @param \Magento\View\Url $viewUrl * @param \Magento\View\ConfigInterface $viewConfig * @param \Magento\App\Cache\StateInterface $cacheState - * @param \Magento\App\Dir $dirs * @param \Magento\Logger $logger - * @param \Magento\Filesystem $filesystem - * @param \Magento\View\FileSystem $viewFileSystem - * @param \Magento\View\TemplateEnginePool $enginePool * @param \Magento\Core\Model\App $app - * @param \Magento\App\State $appState * @param \Magento\Escaper $escaper * @param \Magento\Filter\FilterManager $filterManager * @param \Magento\Core\Model\LocaleInterface $locale + * @param \Magento\App\Dir $dirs + * @param \Magento\Filesystem $filesystem + * @param \Magento\View\FileSystem $viewFileSystem + * @param \Magento\View\TemplateEnginePool $enginePool + * @param \Magento\App\State $appState * @param \Magento\Core\Model\StoreManagerInterface $storeManager * @param \Magento\AuthorizationInterface $authorization * @param \Magento\Backend\Model\Session $backendSession @@ -101,16 +101,16 @@ public function __construct( \Magento\View\Url $viewUrl, \Magento\View\ConfigInterface $viewConfig, \Magento\App\Cache\StateInterface $cacheState, - \Magento\App\Dir $dirs, \Magento\Logger $logger, - \Magento\Filesystem $filesystem, - \Magento\View\FileSystem $viewFileSystem, - \Magento\View\TemplateEnginePool $enginePool, \Magento\Core\Model\App $app, - \Magento\App\State $appState, \Magento\Escaper $escaper, \Magento\Filter\FilterManager $filterManager, \Magento\Core\Model\LocaleInterface $locale, + \Magento\App\Dir $dirs, + \Magento\Filesystem $filesystem, + \Magento\View\FileSystem $viewFileSystem, + \Magento\View\TemplateEnginePool $enginePool, + \Magento\App\State $appState, \Magento\Core\Model\StoreManagerInterface $storeManager, \Magento\AuthorizationInterface $authorization, \Magento\Backend\Model\Session $backendSession, @@ -138,16 +138,16 @@ public function __construct( $viewUrl, $viewConfig, $cacheState, - $dirs, $logger, - $filesystem, - $viewFileSystem, - $enginePool, $app, - $appState, $escaper, $filterManager, $locale, + $dirs, + $filesystem, + $viewFileSystem, + $enginePool, + $appState, $storeManager, $data ); diff --git a/app/code/Magento/Backend/Block/Widget/Container.php b/app/code/Magento/Backend/Block/Widget/Container.php index 558184496dbe1..d040ea541b1fa 100644 --- a/app/code/Magento/Backend/Block/Widget/Container.php +++ b/app/code/Magento/Backend/Block/Widget/Container.php @@ -163,7 +163,7 @@ public function removeButton($buttonId) * @param mixed $data * @return \Magento\Backend\Block\Widget\Container */ - protected function _updateButton($buttonId, $key=null, $data) + protected function _updateButton($buttonId, $key, $data) { foreach ($this->_buttons as $level => $buttons) { if (isset($buttons[$buttonId])) { @@ -194,7 +194,7 @@ protected function _updateButton($buttonId, $key=null, $data) * @param mixed $data * @return \Magento\Backend\Block\Widget\Container */ - public function updateButton($buttonId, $key = null, $data) + public function updateButton($buttonId, $key, $data) { return $this->_updateButton($buttonId, $key, $data); } diff --git a/app/code/Magento/Backend/Block/Widget/Grid/Column/Filter/Theme.php b/app/code/Magento/Backend/Block/Widget/Grid/Column/Filter/Theme.php index d7f94fb6c59b8..60ec3d0bab603 100644 --- a/app/code/Magento/Backend/Block/Widget/Grid/Column/Filter/Theme.php +++ b/app/code/Magento/Backend/Block/Widget/Grid/Column/Filter/Theme.php @@ -33,20 +33,20 @@ class Theme extends \Magento\Backend\Block\Widget\Grid\Column\Filter\AbstractFilter { /** - * @var \Magento\Core\Model\Theme\LabelFactory + * @var \Magento\View\Design\Theme\LabelFactory */ protected $_labelFactory; /** * @param \Magento\Backend\Block\Context $context * @param \Magento\Core\Model\Resource\Helper $resourceHelper - * @param \Magento\Core\Model\Theme\LabelFactory $labelFactory + * @param \Magento\View\Design\Theme\LabelFactory $labelFactory * @param array $data */ public function __construct( \Magento\Backend\Block\Context $context, \Magento\Core\Model\Resource\Helper $resourceHelper, - \Magento\Core\Model\Theme\LabelFactory $labelFactory, + \Magento\View\Design\Theme\LabelFactory $labelFactory, array $data = array() ) { $this->_labelFactory = $labelFactory; @@ -87,7 +87,7 @@ public function getOptions() { $options = $this->getColumn()->getOptions(); if (empty($options) || !is_array($options)) { - /** @var $label \Magento\Core\Model\Theme\Label */ + /** @var $label \Magento\View\Design\Theme\Label */ $label = $this->_labelFactory->create(); $options = $label->getLabelsCollection(); } diff --git a/app/code/Magento/Backend/Block/Widget/Grid/Massaction/Additional.php b/app/code/Magento/Backend/Block/Widget/Grid/Massaction/Additional.php index 94ccea59c988d..0d8f1d5373561 100644 --- a/app/code/Magento/Backend/Block/Widget/Grid/Massaction/Additional.php +++ b/app/code/Magento/Backend/Block/Widget/Grid/Massaction/Additional.php @@ -40,7 +40,7 @@ class Additional extends \Magento\Backend\Block\Widget\Form\Generic { /** - * @var \Magento\Core\Model\Layout\Argument\HandlerFactory + * @var \Magento\View\Layout\Argument\HandlerFactory */ protected $_handlerFactory; @@ -48,14 +48,14 @@ class Additional extends \Magento\Backend\Block\Widget\Form\Generic * @param \Magento\Backend\Block\Template\Context $context * @param \Magento\Core\Model\Registry $registry * @param \Magento\Data\FormFactory $formFactory - * @param \Magento\Core\Model\Layout\Argument\HandlerFactory $handlerFactory + * @param \Magento\View\Layout\Argument\HandlerFactory $handlerFactory * @param array $data */ public function __construct( \Magento\Backend\Block\Template\Context $context, \Magento\Core\Model\Registry $registry, \Magento\Data\FormFactory $formFactory, - \Magento\Core\Model\Layout\Argument\HandlerFactory $handlerFactory, + \Magento\View\Layout\Argument\HandlerFactory $handlerFactory, array $data = array() ) { parent::__construct($context, $registry, $formFactory, $data); diff --git a/app/code/Magento/Backend/Controller/Adminhtml/System/Config/System/Storage.php b/app/code/Magento/Backend/Controller/Adminhtml/System/Config/System/Storage.php index caebd1ee74263..327a5432a94bd 100644 --- a/app/code/Magento/Backend/Controller/Adminhtml/System/Config/System/Storage.php +++ b/app/code/Magento/Backend/Controller/Adminhtml/System/Config/System/Storage.php @@ -152,6 +152,7 @@ public function statusAction() ->save(); } } + // fall-through intentional case \Magento\Core\Model\File\Storage\Flag::STATE_FINISHED: case \Magento\Core\Model\File\Storage\Flag::STATE_NOTIFIED: $flagData = $flag->getFlagData(); diff --git a/app/code/Magento/Backend/Model/Config/Structure/Reader.php b/app/code/Magento/Backend/Model/Config/Structure/Reader.php index 57e1953bb0726..babc69fc95d24 100644 --- a/app/code/Magento/Backend/Model/Config/Structure/Reader.php +++ b/app/code/Magento/Backend/Model/Config/Structure/Reader.php @@ -65,6 +65,7 @@ class Reader extends \Magento\Config\Reader\Filesystem * @param string $fileName * @param array $idAttributes * @param string $domDocumentClass + * @param string $defaultScope */ public function __construct( \Magento\Config\FileResolverInterface $fileResolver, @@ -73,10 +74,18 @@ public function __construct( \Magento\Config\ValidationStateInterface $validationState, $fileName = 'system.xml', $idAttributes = array(), - $domDocumentClass = 'Magento\Config\Dom' + $domDocumentClass = 'Magento\Config\Dom', + $defaultScope = 'global' ) { parent::__construct( - $fileResolver, $converter, $schemaLocator, $validationState, $fileName, $idAttributes, $domDocumentClass + $fileResolver, + $converter, + $schemaLocator, + $validationState, + $fileName, + $idAttributes, + $domDocumentClass, + $defaultScope ); } } diff --git a/app/code/Magento/Backend/Model/Locale.php b/app/code/Magento/Backend/Model/Locale.php index f79c42fb435fe..07daff86781d0 100644 --- a/app/code/Magento/Backend/Model/Locale.php +++ b/app/code/Magento/Backend/Model/Locale.php @@ -55,10 +55,6 @@ class Locale extends \Magento\Core\Model\Locale /** * @param \Magento\Event\ManagerInterface $eventManager - * @param \Magento\Backend\Model\Session $session - * @param \Magento\Backend\Model\Locale\Manager $localeManager - * @param \Magento\App\RequestInterface $request - * @param \Magento\Core\Model\Locale\Validator $localeValidator * @param \Magento\Core\Helper\Translate $translate * @param \Magento\Core\Model\Store\Config $coreStoreConfig * @param \Magento\App\State $appState @@ -67,16 +63,16 @@ class Locale extends \Magento\Core\Model\Locale * @param \Magento\Core\Model\App $app * @param \Magento\Stdlib\DateTime $dateTime * @param \Magento\Core\Model\Date $dateModel - * @param string $locale - * + * @param \Magento\Backend\Model\Session $session + * @param \Magento\Backend\Model\Locale\Manager $localeManager + * @param \Magento\App\RequestInterface $request + * @param \Magento\Core\Model\Locale\Validator $localeValidator + * @param mixed $locale + * * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( \Magento\Event\ManagerInterface $eventManager, - \Magento\Backend\Model\Session $session, - \Magento\Backend\Model\Locale\Manager $localeManager, - \Magento\App\RequestInterface $request, - \Magento\Core\Model\Locale\Validator $localeValidator, \Magento\Core\Helper\Translate $translate, \Magento\Core\Model\Store\Config $coreStoreConfig, \Magento\App\State $appState, @@ -85,6 +81,10 @@ public function __construct( \Magento\Core\Model\App $app, \Magento\Stdlib\DateTime $dateTime, \Magento\Core\Model\Date $dateModel, + \Magento\Backend\Model\Session $session, + \Magento\Backend\Model\Locale\Manager $localeManager, + \Magento\App\RequestInterface $request, + \Magento\Core\Model\Locale\Validator $localeValidator, $locale = null ) { $this->_session = $session; diff --git a/app/code/Magento/Backend/Model/Menu/Config/Reader.php b/app/code/Magento/Backend/Model/Menu/Config/Reader.php index cbe1a9de74b96..73dfd4841d706 100644 --- a/app/code/Magento/Backend/Model/Menu/Config/Reader.php +++ b/app/code/Magento/Backend/Model/Menu/Config/Reader.php @@ -35,6 +35,7 @@ class Reader extends \Magento\Config\Reader\Filesystem * @param string $fileName * @param array $idAttributes * @param string $domDocumentClass + * @param string $defaultScope */ public function __construct( \Magento\Config\FileResolverInterface $fileResolver, @@ -43,10 +44,18 @@ public function __construct( \Magento\Config\ValidationStateInterface $validationState, $fileName = 'menu.xml', $idAttributes = array(), - $domDocumentClass = 'Magento\Backend\Model\Menu\Config\Menu\Dom' + $domDocumentClass = 'Magento\Backend\Model\Menu\Config\Menu\Dom', + $defaultScope = 'global' ) { parent::__construct( - $fileResolver, $converter, $schemaLocator, $validationState, $fileName, $idAttributes, $domDocumentClass + $fileResolver, + $converter, + $schemaLocator, + $validationState, + $fileName, + $idAttributes, + $domDocumentClass, + $defaultScope ); } } diff --git a/app/code/Magento/Backend/Model/Url.php b/app/code/Magento/Backend/Model/Url.php index f4e902d153c1f..a79a347df59da 100644 --- a/app/code/Magento/Backend/Model/Url.php +++ b/app/code/Magento/Backend/Model/Url.php @@ -105,18 +105,18 @@ class Url extends \Magento\Core\Model\Url * @var \Magento\Data\Form\FormKey */ protected $formKey; - + /** * @param \Magento\App\Route\ConfigInterface $routeConfig * @param \Magento\App\RequestInterface $request * @param \Magento\Core\Model\Url\SecurityInfoInterface $urlSecurityInfo * @param \Magento\Core\Model\Store\Config $coreStoreConfig - * @param \Magento\Backend\Helper\Data $backendHelper + * @param \Magento\Core\Model\App $app + * @param \Magento\Core\Model\StoreManagerInterface $storeManager * @param \Magento\Core\Model\Session $session * @param \Magento\Session\SidResolverInterface $sidResolver + * @param \Magento\Backend\Helper\Data $backendHelper * @param Menu\Config $menuConfig - * @param \Magento\Core\Model\App $app - * @param \Magento\Core\Model\StoreManagerInterface $storeManager * @param \Magento\App\CacheInterface $cache * @param Auth\Session $authSession * @param \Magento\Encryption\EncryptorInterface $encryptor @@ -126,18 +126,20 @@ class Url extends \Magento\Core\Model\Url * @param \Magento\Data\Form\FormKey $formKey * @param null $areaCode * @param array $data + * + * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( \Magento\App\Route\ConfigInterface $routeConfig, \Magento\App\RequestInterface $request, \Magento\Core\Model\Url\SecurityInfoInterface $urlSecurityInfo, \Magento\Core\Model\Store\Config $coreStoreConfig, - \Magento\Backend\Helper\Data $backendHelper, + \Magento\Core\Model\App $app, + \Magento\Core\Model\StoreManagerInterface $storeManager, \Magento\Core\Model\Session $session, \Magento\Session\SidResolverInterface $sidResolver, + \Magento\Backend\Helper\Data $backendHelper, \Magento\Backend\Model\Menu\Config $menuConfig, - \Magento\Core\Model\App $app, - \Magento\Core\Model\StoreManagerInterface $storeManager, \Magento\App\CacheInterface $cache, \Magento\Backend\Model\Auth\Session $authSession, \Magento\Encryption\EncryptorInterface $encryptor, diff --git a/app/code/Magento/Backend/etc/adminhtml/system.xml b/app/code/Magento/Backend/etc/adminhtml/system.xml index a03ce759c0406..44e6841acd7a3 100644 --- a/app/code/Magento/Backend/etc/adminhtml/system.xml +++ b/app/code/Magento/Backend/etc/adminhtml/system.xml @@ -124,7 +124,7 @@ - Magento\Core\Model\Theme\Label::getLabelsCollectionForSystemConfiguration + Magento\View\Design\Theme\Label::getLabelsCollectionForSystemConfiguration Magento\Core\Model\Design\Backend\Theme diff --git a/app/code/Magento/Backend/etc/di.xml b/app/code/Magento/Backend/etc/di.xml index 638faa9da90e1..550e9ec0cdfde 100644 --- a/app/code/Magento/Backend/etc/di.xml +++ b/app/code/Magento/Backend/etc/di.xml @@ -31,6 +31,7 @@ + diff --git a/app/code/Magento/Bundle/Model/Product/Price.php b/app/code/Magento/Bundle/Model/Product/Price.php index 9a5b72029060e..409ad68b7fa1b 100644 --- a/app/code/Magento/Bundle/Model/Product/Price.php +++ b/app/code/Magento/Bundle/Model/Product/Price.php @@ -140,7 +140,7 @@ public function getTotalBundleItemsPrice($product, $qty = null) * @param \Magento\Catalog\Model\Product $product * @return double */ - public function getFinalPrice($qty = null, $product) + public function getFinalPrice($qty, $product) { if (is_null($qty) && !is_null($product->getCalculatedFinalPrice())) { return $product->getCalculatedFinalPrice(); @@ -523,7 +523,7 @@ protected function _applyTierPrice($product, $qty, $finalPrice) * @param \Magento\Catalog\Model\Product $product * @return decimal */ - public function getTierPrice($qty=null, $product) + public function getTierPrice($qty, $product) { $allGroups = \Magento\Customer\Model\Group::CUST_GROUP_ALL; $prices = $product->getData('tier_price'); diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Category/Helper/Image.php b/app/code/Magento/Catalog/Block/Adminhtml/Category/Helper/Image.php index 1164f299018f6..28e8f57bbc792 100644 --- a/app/code/Magento/Catalog/Block/Adminhtml/Category/Helper/Image.php +++ b/app/code/Magento/Catalog/Block/Adminhtml/Category/Helper/Image.php @@ -41,23 +41,23 @@ class Image extends \Magento\Data\Form\Element\Image protected $_storeManager; /** - * @param \Magento\Core\Model\StoreManagerInterface $storeManager - * @param \Magento\Escaper $escaper * @param \Magento\Data\Form\Element\Factory $factoryElement * @param \Magento\Data\Form\Element\CollectionFactory $factoryCollection + * @param \Magento\Escaper $escaper * @param \Magento\UrlInterface $urlBuilder - * @param array $attributes + * @param \Magento\Core\Model\StoreManagerInterface $storeManager + * @param array $data */ public function __construct( - \Magento\Core\Model\StoreManagerInterface $storeManager, - \Magento\Escaper $escaper, \Magento\Data\Form\Element\Factory $factoryElement, \Magento\Data\Form\Element\CollectionFactory $factoryCollection, + \Magento\Escaper $escaper, \Magento\UrlInterface $urlBuilder, - $attributes = array() + \Magento\Core\Model\StoreManagerInterface $storeManager, + $data = array() ) { $this->_storeManager = $storeManager; - parent::__construct($escaper, $factoryElement, $factoryCollection, $urlBuilder, $attributes); + parent::__construct($factoryElement, $factoryCollection, $escaper, $urlBuilder, $data); } protected function _getUrl() diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Form/Renderer/Attribute/Urlkey.php b/app/code/Magento/Catalog/Block/Adminhtml/Form/Renderer/Attribute/Urlkey.php index f77878d44083f..d9acf3257a916 100644 --- a/app/code/Magento/Catalog/Block/Adminhtml/Form/Renderer/Attribute/Urlkey.php +++ b/app/code/Magento/Catalog/Block/Adminhtml/Form/Renderer/Attribute/Urlkey.php @@ -82,7 +82,7 @@ public function getElementHtml() 'disabled' => true, ); /** @var \Magento\Data\Form\Element\Hidden $hidden */ - $hidden = $this->_elementFactory->create('hidden', array('attributes' => $data)); + $hidden = $this->_elementFactory->create('hidden', array('data' => $data)); $hidden->setForm($element->getForm()); $storeId = $element->getForm()->getDataObject()->getStoreId(); @@ -91,7 +91,7 @@ public function getElementHtml() $data['value'] = $element->getValue(); $data['checked'] = $this->_catalogData->shouldSaveUrlRewritesHistory($storeId); /** @var \Magento\Data\Form\Element\Checkbox $checkbox */ - $checkbox = $this->_elementFactory->create('checkbox', array('attributes' => $data)); + $checkbox = $this->_elementFactory->create('checkbox', array('data' => $data)); $checkbox->setForm($element->getForm()); return parent::getElementHtml() . '
' . $hidden->getElementHtml() . $checkbox->getElementHtml() . $checkbox->getLabelHtml(); diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Helper/Form/Wysiwyg.php b/app/code/Magento/Catalog/Block/Adminhtml/Helper/Form/Wysiwyg.php index 22481c85d9139..39768756a3e98 100644 --- a/app/code/Magento/Catalog/Block/Adminhtml/Helper/Form/Wysiwyg.php +++ b/app/code/Magento/Catalog/Block/Adminhtml/Helper/Form/Wysiwyg.php @@ -60,30 +60,30 @@ class Wysiwyg extends \Magento\Data\Form\Element\Textarea protected $_layout; /** - * @param \Magento\Cms\Model\Wysiwyg\Config $wysiwygConfig - * @param \Magento\View\LayoutInterface $layout - * @param \Magento\Escaper $escaper * @param \Magento\Data\Form\Element\Factory $factoryElement * @param \Magento\Data\Form\Element\CollectionFactory $factoryCollection + * @param \Magento\Escaper $escaper + * @param \Magento\Cms\Model\Wysiwyg\Config $wysiwygConfig + * @param \Magento\View\LayoutInterface $layout * @param \Magento\Module\Manager $moduleManager * @param \Magento\Backend\Helper\Data $backendData - * @param array $attributes + * @param array $data */ public function __construct( - \Magento\Cms\Model\Wysiwyg\Config $wysiwygConfig, - \Magento\View\LayoutInterface $layout, - \Magento\Escaper $escaper, \Magento\Data\Form\Element\Factory $factoryElement, \Magento\Data\Form\Element\CollectionFactory $factoryCollection, + \Magento\Escaper $escaper, + \Magento\Cms\Model\Wysiwyg\Config $wysiwygConfig, + \Magento\View\LayoutInterface $layout, \Magento\Module\Manager $moduleManager, \Magento\Backend\Helper\Data $backendData, - array $attributes = array() + array $data = array() ) { $this->_wysiwygConfig = $wysiwygConfig; $this->_layout = $layout; $this->_moduleManager = $moduleManager; $this->_backendData = $backendData; - parent::__construct($escaper, $factoryElement, $factoryCollection, $attributes); + parent::__construct($factoryElement, $factoryCollection, $escaper, $data); } /** diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Helper/Form/Wysiwyg/Content.php b/app/code/Magento/Catalog/Block/Adminhtml/Helper/Form/Wysiwyg/Content.php index e732d9182d4fe..b57e110878298 100644 --- a/app/code/Magento/Catalog/Block/Adminhtml/Helper/Form/Wysiwyg/Content.php +++ b/app/code/Magento/Catalog/Block/Adminhtml/Helper/Form/Wysiwyg/Content.php @@ -69,7 +69,7 @@ protected function _prepareForm() { /** @var \Magento\Data\Form $form */ $form = $this->_formFactory->create(array( - 'attributes' => array( + 'data' => array( 'id' => 'wysiwyg_edit_form', 'action' => $this->getData('action'), 'method' => 'post', diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Edit/Form.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Edit/Form.php index 8c173867c54b4..15fa712d5a930 100644 --- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Edit/Form.php +++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Edit/Form.php @@ -41,7 +41,7 @@ protected function _prepareForm() { /** @var \Magento\Data\Form $form */ $form = $this->_formFactory->create(array( - 'attributes' => array( + 'data' => array( 'id' => 'edit_form', 'action' => $this->getData('action'), 'method' => 'post', diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Edit/Tab/Advanced.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Edit/Tab/Advanced.php index 60792a268b0e5..690e3f927a4de 100644 --- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Edit/Tab/Advanced.php +++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Edit/Tab/Advanced.php @@ -79,7 +79,7 @@ protected function _prepareForm() { $attributeObject = $this->getAttributeObject(); - $form = $this->_formFactory->create(array('attributes' => array( + $form = $this->_formFactory->create(array('data' => array( 'id' => 'edit_form', 'action' => $this->getData('action'), 'method' => 'post' diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Edit/Tab/Front.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Edit/Tab/Front.php index 8ccfc9a5ebaca..70e7792346671 100644 --- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Edit/Tab/Front.php +++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Edit/Tab/Front.php @@ -69,7 +69,7 @@ protected function _prepareForm() /** @var \Magento\Data\Form $form */ $form = $this->_formFactory->create(array( - 'attributes' => array( + 'data' => array( 'id' => 'edit_form', 'action' => $this->getData('action'), 'method' => 'post', diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/NewCategory.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/NewCategory.php index 521f1fa1b86ca..b336778eadc47 100644 --- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/NewCategory.php +++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/NewCategory.php @@ -72,7 +72,7 @@ protected function _prepareForm() { /** @var \Magento\Data\Form $form */ $form = $this->_formFactory->create(array( - 'attributes' => array( + 'data' => array( 'id' => 'new_category_form', )) ); diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Helper/Form/BaseImage.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Helper/Form/BaseImage.php index 28dce9b62ca08..d1b6807ba37b9 100644 --- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Helper/Form/BaseImage.php +++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Helper/Form/BaseImage.php @@ -63,26 +63,26 @@ class BaseImage extends \Magento\Data\Form\Element\AbstractElement protected $_viewUrl; /** - * @param \Magento\Escaper $escaper * @param \Magento\Data\Form\Element\Factory $factoryElement * @param \Magento\Data\Form\Element\CollectionFactory $factoryCollection + * @param \Magento\Escaper $escaper * @param \Magento\View\UrlFactory $coreViewUrlFactory * @param \Magento\Backend\Model\UrlFactory $backendUrlFactory * @param \Magento\Catalog\Helper\Data $catalogData * @param \Magento\File\Size $fileConfig - * @param array $attributes + * @param array $data */ public function __construct( - \Magento\Escaper $escaper, \Magento\Data\Form\Element\Factory $factoryElement, \Magento\Data\Form\Element\CollectionFactory $factoryCollection, + \Magento\Escaper $escaper, \Magento\View\UrlFactory $coreViewUrlFactory, \Magento\Backend\Model\UrlFactory $backendUrlFactory, \Magento\Catalog\Helper\Data $catalogData, \Magento\File\Size $fileConfig, - array $attributes = array() + array $data = array() ) { - parent::__construct($escaper, $factoryElement, $factoryCollection, $attributes); + parent::__construct($factoryElement, $factoryCollection, $escaper, $data); $this->_viewUrl = $coreViewUrlFactory->create(); $this->_url = $backendUrlFactory->create(); diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Helper/Form/Category.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Helper/Form/Category.php index c25f519a3d1e9..8fd0a345c7d3f 100644 --- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Helper/Form/Category.php +++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Helper/Form/Category.php @@ -48,40 +48,35 @@ class Category extends \Magento\Data\Form\Element\Multiselect */ protected $_collectionFactory; - /** - * @var \Magento\Core\Helper\Data - */ - protected $_coreData; - /** * @var \Magento\Json\EncoderInterface */ protected $_jsonEncoder; /** - * @param \Magento\Catalog\Model\Resource\Category\CollectionFactory $collectionFactory - * @param \Magento\Json\EncoderInterface $jsonEncoder - * @param \Magento\Escaper $escaper * @param \Magento\Data\Form\Element\Factory $factoryElement * @param \Magento\Data\Form\Element\CollectionFactory $factoryCollection + * @param \Magento\Escaper $escaper + * @param \Magento\Catalog\Model\Resource\Category\CollectionFactory $collectionFactory * @param \Magento\Backend\Helper\Data $backendData * @param \Magento\View\LayoutInterface $layout - * @param array $attributes + * @param \Magento\Json\EncoderInterface $jsonEncoder + * @param array $data */ public function __construct( - \Magento\Catalog\Model\Resource\Category\CollectionFactory $collectionFactory, - \Magento\Json\EncoderInterface $jsonEncoder, - \Magento\Escaper $escaper, \Magento\Data\Form\Element\Factory $factoryElement, \Magento\Data\Form\Element\CollectionFactory $factoryCollection, + \Magento\Escaper $escaper, + \Magento\Catalog\Model\Resource\Category\CollectionFactory $collectionFactory, \Magento\Backend\Helper\Data $backendData, \Magento\View\LayoutInterface $layout, - array $attributes = array() + \Magento\Json\EncoderInterface $jsonEncoder, + array $data = array() ) { $this->_jsonEncoder = $jsonEncoder; $this->_collectionFactory = $collectionFactory; $this->_backendData = $backendData; - parent::__construct($escaper, $factoryElement, $factoryCollection, $attributes); + parent::__construct($factoryElement, $factoryCollection, $escaper, $data); $this->_layout = $layout; } diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Helper/Form/Gallery.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Helper/Form/Gallery.php index fba2da65e8a24..0c2f515892d88 100644 --- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Helper/Form/Gallery.php +++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Helper/Form/Gallery.php @@ -47,24 +47,24 @@ class Gallery extends \Magento\Data\Form\Element\AbstractElement protected $_layout; /** - * @param \Magento\View\LayoutInterface $layout - * @param \Magento\Core\Model\StoreManagerInterface $storeManager - * @param \Magento\Escaper $escaper * @param \Magento\Data\Form\Element\Factory $factoryElement * @param \Magento\Data\Form\Element\CollectionFactory $factoryCollection - * @param array $attributes + * @param \Magento\Escaper $escaper + * @param \Magento\View\LayoutInterface $layout + * @param \Magento\Core\Model\StoreManagerInterface $storeManager + * @param array $data */ public function __construct( - \Magento\View\LayoutInterface $layout, - \Magento\Core\Model\StoreManagerInterface $storeManager, - \Magento\Escaper $escaper, \Magento\Data\Form\Element\Factory $factoryElement, \Magento\Data\Form\Element\CollectionFactory $factoryCollection, - $attributes = array() + \Magento\Escaper $escaper, + \Magento\View\LayoutInterface $layout, + \Magento\Core\Model\StoreManagerInterface $storeManager, + $data = array() ) { $this->_layout = $layout; $this->_storeManager = $storeManager; - parent::__construct($escaper, $factoryElement, $factoryCollection, $attributes); + parent::__construct($factoryElement, $factoryCollection, $escaper, $data); } public function getElementHtml() diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Helper/Form/Price.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Helper/Form/Price.php index c4c19bab14478..deb8206f74c97 100644 --- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Helper/Form/Price.php +++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Helper/Form/Price.php @@ -53,27 +53,27 @@ class Price extends \Magento\Data\Form\Element\Text protected $_locale; /** - * @param \Magento\Core\Model\StoreManagerInterface $storeManager - * @param \Magento\Core\Model\LocaleInterface $locale - * @param \Magento\Escaper $escaper * @param \Magento\Data\Form\Element\Factory $factoryElement * @param \Magento\Data\Form\Element\CollectionFactory $factoryCollection + * @param \Magento\Escaper $escaper + * @param \Magento\Core\Model\StoreManagerInterface $storeManager + * @param \Magento\Core\Model\LocaleInterface $locale * @param \Magento\Tax\Helper\Data $taxData - * @param array $attributes + * @param array $data */ public function __construct( - \Magento\Core\Model\StoreManagerInterface $storeManager, - \Magento\Core\Model\LocaleInterface $locale, - \Magento\Escaper $escaper, \Magento\Data\Form\Element\Factory $factoryElement, \Magento\Data\Form\Element\CollectionFactory $factoryCollection, + \Magento\Escaper $escaper, + \Magento\Core\Model\StoreManagerInterface $storeManager, + \Magento\Core\Model\LocaleInterface $locale, \Magento\Tax\Helper\Data $taxData, - array $attributes = array() + array $data = array() ) { $this->_locale = $locale; $this->_storeManager = $storeManager; $this->_taxData = $taxData; - parent::__construct($escaper, $factoryElement, $factoryCollection, $attributes); + parent::__construct($factoryElement, $factoryCollection, $escaper, $data); } protected function _construct() 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 75cab01e27d2a..374ac3b195fdb 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 @@ -52,26 +52,26 @@ class Weight extends \Magento\Data\Form\Element\Text protected $_helper; /** - * @param \Magento\Escaper $escaper * @param \Magento\Data\Form\Element\Factory $factoryElement * @param \Magento\Data\Form\Element\CollectionFactory $factoryCollection + * @param \Magento\Escaper $escaper * @param \Magento\Catalog\Helper\Product $helper - * @param array $attributes + * @param array $data */ public function __construct( - \Magento\Escaper $escaper, \Magento\Data\Form\Element\Factory $factoryElement, \Magento\Data\Form\Element\CollectionFactory $factoryCollection, + \Magento\Escaper $escaper, \Magento\Catalog\Helper\Product $helper, - array $attributes = array() + array $data = array() ) { $this->_helper = $helper; $this->_virtual = $factoryElement->create('checkbox'); $this->_virtual->setId(self::VIRTUAL_FIELD_HTML_ID)->setName('is_virtual') ->setLabel($this->_helper->getTypeSwitcherControlLabel()); - $attributes['class'] = + $data['class'] = 'validate-number validate-zero-or-greater validate-number-range number-range-0-99999999.9999'; - parent::__construct($escaper, $factoryElement, $factoryCollection, $attributes); + parent::__construct($factoryElement, $factoryCollection, $escaper, $data); } /** diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Search/Edit/Form.php b/app/code/Magento/Catalog/Block/Adminhtml/Search/Edit/Form.php index 67e85f553d8f8..5af166e54249e 100644 --- a/app/code/Magento/Catalog/Block/Adminhtml/Search/Edit/Form.php +++ b/app/code/Magento/Catalog/Block/Adminhtml/Search/Edit/Form.php @@ -82,7 +82,7 @@ protected function _prepareForm() /** @var \Magento\Data\Form $form */ $form = $this->_formFactory->create(array( - 'attributes' => array( + 'data' => array( 'id' => 'edit_form', 'action' => $this->getData('action'), 'method' => 'post', diff --git a/app/code/Magento/Catalog/Block/Category/View.php b/app/code/Magento/Catalog/Block/Category/View.php index 2c6d33afdba42..b35ce907683e7 100644 --- a/app/code/Magento/Catalog/Block/Category/View.php +++ b/app/code/Magento/Catalog/Block/Category/View.php @@ -103,7 +103,7 @@ protected function _prepareLayout() /** * want to show rss feed in the url */ - if ($this->IsRssCatalogEnable() && $this->IsTopCategory()) { + if ($this->isRssCatalogEnable() && $this->isTopCategory()) { $title = __('%1 RSS Feed', $this->getCurrentCategory()->getName()); $headBlock->addRss($title, $this->getRssLink()); } @@ -116,12 +116,12 @@ protected function _prepareLayout() return $this; } - public function IsRssCatalogEnable() + public function isRssCatalogEnable() { return $this->_storeConfig->getConfig('rss/catalog/category'); } - public function IsTopCategory() + public function isTopCategory() { return $this->getCurrentCategory()->getLevel()==2; } diff --git a/app/code/Magento/Catalog/Block/Product/ProductList/Upsell.php b/app/code/Magento/Catalog/Block/Product/ProductList/Upsell.php index 4dfa461a47c86..976d021cc7443 100644 --- a/app/code/Magento/Catalog/Block/Product/ProductList/Upsell.php +++ b/app/code/Magento/Catalog/Block/Product/ProductList/Upsell.php @@ -79,7 +79,6 @@ class Upsell extends \Magento\Catalog\Block\Product\AbstractProduct * @param \Magento\Checkout\Model\Resource\Cart $checkoutCart * @param \Magento\Catalog\Model\Product\Visibility $catalogProductVisibility * @param \Magento\Checkout\Model\Session $checkoutSession - * @param \Magento\Core\Model\Registry $coreRegistry * @param array $data */ public function __construct( @@ -92,7 +91,6 @@ public function __construct( \Magento\Checkout\Model\Resource\Cart $checkoutCart, \Magento\Catalog\Model\Product\Visibility $catalogProductVisibility, \Magento\Checkout\Model\Session $checkoutSession, - \Magento\Core\Model\Registry $coreRegistry, array $data = array() ) { $this->_checkoutCart = $checkoutCart; @@ -194,7 +192,7 @@ public function getIterableItem() /** * Set how many items we need to show in upsell block - * Notice: this parametr will be also applied + * Notice: this parameter will be also applied * * @param string $type * @param int $limit diff --git a/app/code/Magento/Catalog/Model/Attribute/Backend/Customlayoutupdate.php b/app/code/Magento/Catalog/Model/Attribute/Backend/Customlayoutupdate.php index 23a5997ac928b..307a86b15ceb8 100644 --- a/app/code/Magento/Catalog/Model/Attribute/Backend/Customlayoutupdate.php +++ b/app/code/Magento/Catalog/Model/Attribute/Backend/Customlayoutupdate.php @@ -34,29 +34,20 @@ class Customlayoutupdate extends \Magento\Eav\Model\Entity\Attribute\Backend\AbstractBackend { - /** - * Product custom layout update attribute validate function. - * In case invalid data throws exception. - * - * @param \Magento\Object $object - * @throws \Magento\Eav\Model\Entity\Attribute\Exception - */ /** - * Layoutupdate validator factory + * Layout update validator factory * * @var \Magento\Core\Model\Layout\Update\ValidatorFactory */ protected $_layoutUpdateValidatorFactory; /** - * Construct - * - * @param \Magento\Core\Model\Layout\Update\ValidatorFactory $layoutUpdateValidatorFactory * @param \Magento\Logger $logger + * @param \Magento\Core\Model\Layout\Update\ValidatorFactory $layoutUpdateValidatorFactory */ public function __construct( - \Magento\Core\Model\Layout\Update\ValidatorFactory $layoutUpdateValidatorFactory, - \Magento\Logger $logger + \Magento\Logger $logger, + \Magento\Core\Model\Layout\Update\ValidatorFactory $layoutUpdateValidatorFactory ) { $this->_layoutUpdateValidatorFactory = $layoutUpdateValidatorFactory; parent::__construct($logger); diff --git a/app/code/Magento/Catalog/Model/Attribute/Config/Reader.php b/app/code/Magento/Catalog/Model/Attribute/Config/Reader.php index a03c78a96a326..237ab6022e632 100644 --- a/app/code/Magento/Catalog/Model/Attribute/Config/Reader.php +++ b/app/code/Magento/Catalog/Model/Attribute/Config/Reader.php @@ -27,23 +27,45 @@ class Reader extends \Magento\Config\Reader\Filesystem { + /** + * List of id attributes for merge + * + * @var array + */ + protected $_idAttributes = array( + '/config/group' => 'name', + '/config/group/attribute' => 'name', + ); + /** * @param \Magento\Config\FileResolverInterface $fileResolver - * @param \Magento\Catalog\Model\Attribute\Config\Converter $converter - * @param \Magento\Catalog\Model\Attribute\Config\SchemaLocator $schemaLocator + * @param Converter $converter + * @param SchemaLocator $schemaLocator * @param \Magento\Config\ValidationStateInterface $validationState + * @param string $fileName + * @param array $idAttributes + * @param string $domDocumentClass + * @param string $defaultScope */ public function __construct( \Magento\Config\FileResolverInterface $fileResolver, \Magento\Catalog\Model\Attribute\Config\Converter $converter, \Magento\Catalog\Model\Attribute\Config\SchemaLocator $schemaLocator, - \Magento\Config\ValidationStateInterface $validationState + \Magento\Config\ValidationStateInterface $validationState, + $fileName = 'catalog_attributes.xml', + $idAttributes = array(), + $domDocumentClass = 'Magento\Config\Dom', + $defaultScope = 'global' ) { - $fileName = 'catalog_attributes.xml'; - $idAttributes = array( - '/config/group' => 'name', - '/config/group/attribute' => 'name', + parent::__construct( + $fileResolver, + $converter, + $schemaLocator, + $validationState, + $fileName, + $idAttributes, + $domDocumentClass, + $defaultScope ); - parent::__construct($fileResolver, $converter, $schemaLocator, $validationState, $fileName, $idAttributes); } } diff --git a/app/code/Magento/Catalog/Model/Category/Indexer/Flat.php b/app/code/Magento/Catalog/Model/Category/Indexer/Flat.php index f126ea6af484b..b16fea5c54300 100644 --- a/app/code/Magento/Catalog/Model/Category/Indexer/Flat.php +++ b/app/code/Magento/Catalog/Model/Category/Indexer/Flat.php @@ -210,6 +210,7 @@ protected function _registerEvent(\Magento\Index\Model\Event $event) $this->_registerCoreStoreEvent($event); break; } + // fall-through intentional case \Magento\Core\Model\Store\Group::ENTITY: $event->addNewData('catalog_category_flat_skip_call_event_handler', true); $process = $event->getProcess(); diff --git a/app/code/Magento/Catalog/Model/Layer/Filter/Price.php b/app/code/Magento/Catalog/Model/Layer/Filter/Price.php index 2e2539825a53e..2a77459993f48 100644 --- a/app/code/Magento/Catalog/Model/Layer/Filter/Price.php +++ b/app/code/Magento/Catalog/Model/Layer/Filter/Price.php @@ -89,24 +89,22 @@ class Price extends \Magento\Catalog\Model\Layer\Filter\AbstractFilter protected $_customerSession; /** - * Class constructor - * * @param \Magento\Catalog\Model\Layer\Filter\ItemFactory $filterItemFactory * @param \Magento\Core\Model\StoreManagerInterface $storeManager + * @param \Magento\Catalog\Model\Layer $catalogLayer * @param \Magento\Catalog\Model\Resource\Layer\Filter\PriceFactory $filterPriceFactory * @param \Magento\Customer\Model\Session $customerSession * @param \Magento\Catalog\Model\Layer\Filter\Price\Algorithm $catalogLayerFilterPriceAlgorithm - * @param \Magento\Catalog\Model\Layer $catalogLayer * @param \Magento\Core\Model\Registry $coreRegistry * @param array $data */ public function __construct( \Magento\Catalog\Model\Layer\Filter\ItemFactory $filterItemFactory, \Magento\Core\Model\StoreManagerInterface $storeManager, + \Magento\Catalog\Model\Layer $catalogLayer, \Magento\Catalog\Model\Resource\Layer\Filter\PriceFactory $filterPriceFactory, \Magento\Customer\Model\Session $customerSession, \Magento\Catalog\Model\Layer\Filter\Price\Algorithm $catalogLayerFilterPriceAlgorithm, - \Magento\Catalog\Model\Layer $catalogLayer, \Magento\Core\Model\Registry $coreRegistry, array $data = array() ) { diff --git a/app/code/Magento/Catalog/Model/Product/Attribute/Backend/Groupprice.php b/app/code/Magento/Catalog/Model/Product/Attribute/Backend/Groupprice.php index 9972c5f786118..7db7a9859c2d9 100644 --- a/app/code/Magento/Catalog/Model/Product/Attribute/Backend/Groupprice.php +++ b/app/code/Magento/Catalog/Model/Product/Attribute/Backend/Groupprice.php @@ -42,28 +42,25 @@ class Groupprice protected $_productAttributeBackendGroupprice; /** - * Construct - * * @param \Magento\Logger $logger * @param \Magento\Directory\Model\CurrencyFactory $currencyFactory - * @param \Magento\Catalog\Model\Resource\Product\Attribute\Backend\Groupprice $productAttributeBackendGroupprice * @param \Magento\Core\Model\StoreManagerInterface $storeManager - * @param \Magento\Catalog\Model\Product\Type $catalogProductType * @param \Magento\Catalog\Helper\Data $catalogData * @param \Magento\Core\Model\Config $config + * @param \Magento\Catalog\Model\Product\Type $catalogProductType + * @param \Magento\Catalog\Model\Resource\Product\Attribute\Backend\Groupprice $productAttributeBackendGroupprice */ public function __construct( \Magento\Logger $logger, \Magento\Directory\Model\CurrencyFactory $currencyFactory, - \Magento\Catalog\Model\Resource\Product\Attribute\Backend\Groupprice $productAttributeBackendGroupprice, \Magento\Core\Model\StoreManagerInterface $storeManager, - \Magento\Catalog\Model\Product\Type $catalogProductType, \Magento\Catalog\Helper\Data $catalogData, - \Magento\Core\Model\Config $config + \Magento\Core\Model\Config $config, + \Magento\Catalog\Model\Product\Type $catalogProductType, + \Magento\Catalog\Model\Resource\Product\Attribute\Backend\Groupprice $productAttributeBackendGroupprice ) { $this->_productAttributeBackendGroupprice = $productAttributeBackendGroupprice; - parent::__construct($logger, $currencyFactory, $storeManager, $catalogProductType, $catalogData, - $config); + parent::__construct($logger, $currencyFactory, $storeManager, $catalogData, $config, $catalogProductType); } /** diff --git a/app/code/Magento/Catalog/Model/Product/Attribute/Backend/Groupprice/AbstractGroupprice.php b/app/code/Magento/Catalog/Model/Product/Attribute/Backend/Groupprice/AbstractGroupprice.php index 40bc88be6ab5c..cae206db4b7f0 100644 --- a/app/code/Magento/Catalog/Model/Product/Attribute/Backend/Groupprice/AbstractGroupprice.php +++ b/app/code/Magento/Catalog/Model/Product/Attribute/Backend/Groupprice/AbstractGroupprice.php @@ -60,22 +60,20 @@ abstract protected function _getDuplicateErrorMessage(); protected $_catalogProductType; /** - * Construct - * * @param \Magento\Logger $logger * @param \Magento\Directory\Model\CurrencyFactory $currencyFactory * @param \Magento\Core\Model\StoreManagerInterface $storeManager - * @param \Magento\Catalog\Model\Product\Type $catalogProductType * @param \Magento\Catalog\Helper\Data $catalogData * @param \Magento\Core\Model\Config $config + * @param \Magento\Catalog\Model\Product\Type $catalogProductType */ public function __construct( \Magento\Logger $logger, \Magento\Directory\Model\CurrencyFactory $currencyFactory, \Magento\Core\Model\StoreManagerInterface $storeManager, - \Magento\Catalog\Model\Product\Type $catalogProductType, \Magento\Catalog\Helper\Data $catalogData, - \Magento\Core\Model\Config $config + \Magento\Core\Model\Config $config, + \Magento\Catalog\Model\Product\Type $catalogProductType ) { $this->_catalogProductType = $catalogProductType; parent::__construct($logger, $currencyFactory, $storeManager, $catalogData, $config); diff --git a/app/code/Magento/Catalog/Model/Product/Attribute/Backend/Startdate.php b/app/code/Magento/Catalog/Model/Product/Attribute/Backend/Startdate.php index f2d3db3d839c9..95466d771f5d5 100644 --- a/app/code/Magento/Catalog/Model/Product/Attribute/Backend/Startdate.php +++ b/app/code/Magento/Catalog/Model/Product/Attribute/Backend/Startdate.php @@ -45,16 +45,14 @@ class Startdate extends \Magento\Eav\Model\Entity\Attribute\Backend\Datetime protected $_date; /** - * Construct - * - * @param \Magento\Core\Model\Date $date - * @param \Magento\Core\Model\LocaleInterface $locale * @param \Magento\Logger $logger + * @param \Magento\Core\Model\LocaleInterface $locale + * @param \Magento\Core\Model\Date $date */ public function __construct( - \Magento\Core\Model\Date $date, + \Magento\Logger $logger, \Magento\Core\Model\LocaleInterface $locale, - \Magento\Logger $logger + \Magento\Core\Model\Date $date ) { $this->_date = $date; parent::__construct($logger, $locale); diff --git a/app/code/Magento/Catalog/Model/Product/Attribute/Backend/Tierprice.php b/app/code/Magento/Catalog/Model/Product/Attribute/Backend/Tierprice.php index 5de002872a20e..f2b357a73b7e2 100644 --- a/app/code/Magento/Catalog/Model/Product/Attribute/Backend/Tierprice.php +++ b/app/code/Magento/Catalog/Model/Product/Attribute/Backend/Tierprice.php @@ -45,28 +45,25 @@ class Tierprice protected $_productAttributeBackendTierprice; /** - * Construct - * * @param \Magento\Logger $logger * @param \Magento\Directory\Model\CurrencyFactory $currencyFactory - * @param \Magento\Catalog\Model\Resource\Product\Attribute\Backend\Tierprice $productAttributeTierprice * @param \Magento\Core\Model\StoreManagerInterface $storeManager - * @param \Magento\Catalog\Model\Product\Type $catalogProductType * @param \Magento\Catalog\Helper\Data $catalogData * @param \Magento\Core\Model\Config $config + * @param \Magento\Catalog\Model\Product\Type $catalogProductType + * @param \Magento\Catalog\Model\Resource\Product\Attribute\Backend\Tierprice $productAttributeTierprice */ public function __construct( \Magento\Logger $logger, \Magento\Directory\Model\CurrencyFactory $currencyFactory, - \Magento\Catalog\Model\Resource\Product\Attribute\Backend\Tierprice $productAttributeTierprice, \Magento\Core\Model\StoreManagerInterface $storeManager, - \Magento\Catalog\Model\Product\Type $catalogProductType, \Magento\Catalog\Helper\Data $catalogData, - \Magento\Core\Model\Config $config + \Magento\Core\Model\Config $config, + \Magento\Catalog\Model\Product\Type $catalogProductType, + \Magento\Catalog\Model\Resource\Product\Attribute\Backend\Tierprice $productAttributeTierprice ) { $this->_productAttributeBackendTierprice = $productAttributeTierprice; - parent::__construct($logger, $currencyFactory, $storeManager, $catalogProductType, $catalogData, - $config); + parent::__construct($logger, $currencyFactory, $storeManager, $catalogData, $config, $catalogProductType); } /** diff --git a/app/code/Magento/Catalog/Model/Product/Indexer/Flat.php b/app/code/Magento/Catalog/Model/Product/Indexer/Flat.php index 1e2e5bde24991..eb0732a228f1d 100644 --- a/app/code/Magento/Catalog/Model/Product/Indexer/Flat.php +++ b/app/code/Magento/Catalog/Model/Product/Indexer/Flat.php @@ -294,6 +294,7 @@ protected function _registerEvent(\Magento\Index\Model\Event $event) $this->_registerCoreStoreEvent($event); break; } + // fall-through intentional case \Magento\Catalog\Model\Resource\Eav\Attribute::ENTITY: case \Magento\Core\Model\Store\Group::ENTITY: $event->addNewData('catalog_product_flat_skip_call_event_handler', true); diff --git a/app/code/Magento/Catalog/Model/Product/Option/Type/Date.php b/app/code/Magento/Catalog/Model/Product/Option/Type/Date.php index e27fd34751ee7..9c71199729f4a 100644 --- a/app/code/Magento/Catalog/Model/Product/Option/Type/Date.php +++ b/app/code/Magento/Catalog/Model/Product/Option/Type/Date.php @@ -48,17 +48,15 @@ class Date extends \Magento\Catalog\Model\Product\Option\Type\DefaultType protected $_locale; /** - * Construct - * - * @param \Magento\Core\Model\LocaleInterface $locale * @param \Magento\Checkout\Model\Session $checkoutSession * @param \Magento\Core\Model\Store\Config $coreStoreConfig + * @param \Magento\Core\Model\LocaleInterface $locale * @param array $data */ public function __construct( - \Magento\Core\Model\LocaleInterface $locale, \Magento\Checkout\Model\Session $checkoutSession, \Magento\Core\Model\Store\Config $coreStoreConfig, + \Magento\Core\Model\LocaleInterface $locale, array $data = array() ) { $this->_locale = $locale; diff --git a/app/code/Magento/Catalog/Model/Product/Option/Type/File.php b/app/code/Magento/Catalog/Model/Product/Option/Type/File.php index ed4a58fd8048f..c9fcc3e8d550c 100644 --- a/app/code/Magento/Catalog/Model/Product/Option/Type/File.php +++ b/app/code/Magento/Catalog/Model/Product/Option/Type/File.php @@ -90,30 +90,28 @@ class File extends \Magento\Catalog\Model\Product\Option\Type\DefaultType protected $_itemOptionFactory; /** - * Construct - * + * @param \Magento\Checkout\Model\Session $checkoutSession + * @param \Magento\Core\Model\Store\Config $coreStoreConfig * @param \Magento\Sales\Model\Quote\Item\OptionFactory $itemOptionFactory * @param \Magento\UrlInterface $url * @param \Magento\App\Dir $dir - * @param \Magento\Checkout\Model\Session $checkoutSession * @param \Magento\Escaper $escaper * @param \Magento\Core\Helper\File\Storage\Database $coreFileStorageDatabase - * @param \Magento\Core\Model\Store\Config $coreStoreConfig * @param \Magento\Filesystem $filesystem * @param \Magento\File\Size $fileSize * @param array $data */ public function __construct( + \Magento\Checkout\Model\Session $checkoutSession, + \Magento\Core\Model\Store\Config $coreStoreConfig, \Magento\Sales\Model\Quote\Item\OptionFactory $itemOptionFactory, \Magento\UrlInterface $url, \Magento\App\Dir $dir, - \Magento\Checkout\Model\Session $checkoutSession, \Magento\Escaper $escaper, \Magento\Core\Helper\File\Storage\Database $coreFileStorageDatabase, - \Magento\Core\Model\Store\Config $coreStoreConfig, \Magento\Filesystem $filesystem, \Magento\File\Size $fileSize, - $data = array() + array $data = array() ) { $this->_itemOptionFactory = $itemOptionFactory; $this->_url = $url; diff --git a/app/code/Magento/Catalog/Model/Product/Option/Type/Select.php b/app/code/Magento/Catalog/Model/Product/Option/Type/Select.php index 83ac16ae1187d..3164914a931ab 100644 --- a/app/code/Magento/Catalog/Model/Product/Option/Type/Select.php +++ b/app/code/Magento/Catalog/Model/Product/Option/Type/Select.php @@ -50,16 +50,16 @@ class Select extends \Magento\Catalog\Model\Product\Option\Type\DefaultType /** * @param \Magento\Checkout\Model\Session $checkoutSession + * @param \Magento\Core\Model\Store\Config $coreStoreConfig * @param \Magento\Stdlib\String $string * @param \Magento\Escaper $escaper - * @param \Magento\Core\Model\Store\Config $coreStoreConfig * @param array $data */ public function __construct( \Magento\Checkout\Model\Session $checkoutSession, + \Magento\Core\Model\Store\Config $coreStoreConfig, \Magento\Stdlib\String $string, \Magento\Escaper $escaper, - \Magento\Core\Model\Store\Config $coreStoreConfig, array $data = array() ) { $this->string = $string; diff --git a/app/code/Magento/Catalog/Model/Product/Type/AbstractType.php b/app/code/Magento/Catalog/Model/Product/Type/AbstractType.php index 985f1b154f7d0..2e8eaa7711a29 100644 --- a/app/code/Magento/Catalog/Model/Product/Type/AbstractType.php +++ b/app/code/Magento/Catalog/Model/Product/Type/AbstractType.php @@ -899,7 +899,7 @@ public function getStoreFilter($product) * @param \Magento\Catalog\Model\Product $product * @return \Magento\Catalog\Model\Product\Type\AbstractType */ - public function setStoreFilter($store = null, $product) + public function setStoreFilter($store, $product) { $cacheKey = '_cache_instance_store_filter'; $product->setData($cacheKey, $store); diff --git a/app/code/Magento/Catalog/Model/Product/Type/Configurable.php b/app/code/Magento/Catalog/Model/Product/Type/Configurable.php index e680ecaac99b5..77c5227e90b3e 100644 --- a/app/code/Magento/Catalog/Model/Product/Type/Configurable.php +++ b/app/code/Magento/Catalog/Model/Product/Type/Configurable.php @@ -161,14 +161,18 @@ class Configurable extends \Magento\Catalog\Model\Product\Type\AbstractType protected $_typeConfigurableFactory; /** - * Construct - * * @codingStandardsIgnoreStart/End * * @param \Magento\Catalog\Model\ProductFactory $productFactory * @param \Magento\Catalog\Model\Product\Option $catalogProductOption * @param \Magento\Eav\Model\Config $eavConfig * @param \Magento\Catalog\Model\Product\Type $catalogProductType + * @param \Magento\Event\ManagerInterface $eventManager + * @param \Magento\Core\Helper\Data $coreData + * @param \Magento\Core\Helper\File\Storage\Database $fileStorageDb + * @param \Magento\Filesystem $filesystem + * @param \Magento\Core\Model\Registry $coreRegistry + * @param \Magento\Logger $logger * @param \Magento\Catalog\Model\Resource\Product\Type\ConfigurableFactory $typeConfigurableFactory * @param \Magento\Eav\Model\EntityFactory $entityFactory * @param \Magento\Eav\Model\Entity\Attribute\SetFactory $attributeSetFactory @@ -178,14 +182,8 @@ class Configurable extends \Magento\Catalog\Model\Product\Type\AbstractType * @param \Magento\Catalog\Model\Resource\Product\Type\Configurable\Attribute\CollectionFactory $attributeCollectionFactory * @param \Magento\Catalog\Model\Resource\Product\Type\Configurable $catalogProductTypeConfigurable * @param \Magento\Core\Model\StoreManagerInterface $storeManager - * @param \Magento\Event\ManagerInterface $eventManager - * @param \Magento\Core\Helper\Data $coreData - * @param \Magento\Core\Helper\File\Storage\Database $fileStorageDb - * @param \Magento\Filesystem $filesystem - * @param \Magento\Core\Model\Registry $coreRegistry - * @param \Magento\Logger $logger * @param array $data - * + * * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( @@ -193,6 +191,12 @@ public function __construct( \Magento\Catalog\Model\Product\Option $catalogProductOption, \Magento\Eav\Model\Config $eavConfig, \Magento\Catalog\Model\Product\Type $catalogProductType, + \Magento\Event\ManagerInterface $eventManager, + \Magento\Core\Helper\Data $coreData, + \Magento\Core\Helper\File\Storage\Database $fileStorageDb, + \Magento\Filesystem $filesystem, + \Magento\Core\Model\Registry $coreRegistry, + \Magento\Logger $logger, \Magento\Catalog\Model\Resource\Product\Type\ConfigurableFactory $typeConfigurableFactory, \Magento\Eav\Model\EntityFactory $entityFactory, \Magento\Eav\Model\Entity\Attribute\SetFactory $attributeSetFactory, @@ -202,12 +206,6 @@ public function __construct( \Magento\Catalog\Model\Resource\Product\Type\Configurable\Attribute\CollectionFactory $attributeCollectionFactory, \Magento\Catalog\Model\Resource\Product\Type\Configurable $catalogProductTypeConfigurable, \Magento\Core\Model\StoreManagerInterface $storeManager, - \Magento\Event\ManagerInterface $eventManager, - \Magento\Core\Helper\Data $coreData, - \Magento\Core\Helper\File\Storage\Database $fileStorageDb, - \Magento\Filesystem $filesystem, - \Magento\Core\Model\Registry $coreRegistry, - \Magento\Logger $logger, array $data = array() ) { $this->_typeConfigurableFactory = $typeConfigurableFactory; @@ -219,8 +217,19 @@ public function __construct( $this->_attributeCollectionFactory = $attributeCollectionFactory; $this->_catalogProductTypeConfigurable = $catalogProductTypeConfigurable; $this->_storeManager = $storeManager; - parent::__construct($productFactory, $catalogProductOption, $eavConfig, $catalogProductType, - $eventManager, $coreData, $fileStorageDb, $filesystem, $coreRegistry, $logger, $data); + parent::__construct( + $productFactory, + $catalogProductOption, + $eavConfig, + $catalogProductType, + $eventManager, + $coreData, + $fileStorageDb, + $filesystem, + $coreRegistry, + $logger, + $data + ); } /** diff --git a/app/code/Magento/Catalog/Model/Product/Type/Configurable/Price.php b/app/code/Magento/Catalog/Model/Product/Type/Configurable/Price.php index 7e4045ee6b0cd..e9c5b9e3b07ad 100644 --- a/app/code/Magento/Catalog/Model/Product/Type/Configurable/Price.php +++ b/app/code/Magento/Catalog/Model/Product/Type/Configurable/Price.php @@ -42,7 +42,7 @@ class Price extends \Magento\Catalog\Model\Product\Type\Price * @param \Magento\Catalog\Model\Product $product * @return double */ - public function getFinalPrice($qty=null, $product) + public function getFinalPrice($qty, $product) { if (is_null($qty) && !is_null($product->getCalculatedFinalPrice())) { return $product->getCalculatedFinalPrice(); diff --git a/app/code/Magento/Catalog/Model/Product/Type/Grouped.php b/app/code/Magento/Catalog/Model/Product/Type/Grouped.php index 2e1060925c179..aadecf9b8c66e 100644 --- a/app/code/Magento/Catalog/Model/Product/Type/Grouped.php +++ b/app/code/Magento/Catalog/Model/Product/Type/Grouped.php @@ -99,38 +99,38 @@ class Grouped extends \Magento\Catalog\Model\Product\Type\AbstractType protected $_appState; /** - * Construct - * * @param \Magento\Catalog\Model\ProductFactory $productFactory * @param \Magento\Catalog\Model\Product\Option $catalogProductOption * @param \Magento\Eav\Model\Config $eavConfig * @param \Magento\Catalog\Model\Product\Type $catalogProductType - * @param \Magento\Catalog\Model\Resource\Product\Link $catalogProductLink - * @param \Magento\Core\Model\StoreManagerInterface $storeManager - * @param \Magento\Catalog\Model\Product\Status $catalogProductStatus * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Helper\Data $coreData * @param \Magento\Core\Helper\File\Storage\Database $fileStorageDb * @param \Magento\Filesystem $filesystem * @param \Magento\Core\Model\Registry $coreRegistry * @param \Magento\Logger $logger + * @param \Magento\Catalog\Model\Resource\Product\Link $catalogProductLink + * @param \Magento\Core\Model\StoreManagerInterface $storeManager + * @param \Magento\Catalog\Model\Product\Status $catalogProductStatus * @param \Magento\App\State $appState * @param array $data + * + * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( \Magento\Catalog\Model\ProductFactory $productFactory, \Magento\Catalog\Model\Product\Option $catalogProductOption, \Magento\Eav\Model\Config $eavConfig, \Magento\Catalog\Model\Product\Type $catalogProductType, - \Magento\Catalog\Model\Resource\Product\Link $catalogProductLink, - \Magento\Core\Model\StoreManagerInterface $storeManager, - \Magento\Catalog\Model\Product\Status $catalogProductStatus, \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Helper\Data $coreData, \Magento\Core\Helper\File\Storage\Database $fileStorageDb, \Magento\Filesystem $filesystem, \Magento\Core\Model\Registry $coreRegistry, \Magento\Logger $logger, + \Magento\Catalog\Model\Resource\Product\Link $catalogProductLink, + \Magento\Core\Model\StoreManagerInterface $storeManager, + \Magento\Catalog\Model\Product\Status $catalogProductStatus, \Magento\App\State $appState, array $data = array() ) { @@ -138,8 +138,19 @@ public function __construct( $this->_storeManager = $storeManager; $this->_catalogProductStatus = $catalogProductStatus; $this->_appState = $appState; - parent::__construct($productFactory, $catalogProductOption, $eavConfig, $catalogProductType, - $eventManager, $coreData, $fileStorageDb, $filesystem, $coreRegistry, $logger, $data); + parent::__construct( + $productFactory, + $catalogProductOption, + $eavConfig, + $catalogProductType, + $eventManager, + $coreData, + $fileStorageDb, + $filesystem, + $coreRegistry, + $logger, + $data + ); } /** diff --git a/app/code/Magento/Catalog/Model/Product/Type/Grouped/Price.php b/app/code/Magento/Catalog/Model/Product/Type/Grouped/Price.php index 0e22db24152e0..8591eaeb5f4cf 100644 --- a/app/code/Magento/Catalog/Model/Product/Type/Grouped/Price.php +++ b/app/code/Magento/Catalog/Model/Product/Type/Grouped/Price.php @@ -42,7 +42,7 @@ class Price extends \Magento\Catalog\Model\Product\Type\Price * @param \Magento\Catalog\Model\Product $product * @return double */ - public function getFinalPrice($qty=null, $product) + public function getFinalPrice($qty, $product) { if (is_null($qty) && !is_null($product->getCalculatedFinalPrice())) { return $product->getCalculatedFinalPrice(); diff --git a/app/code/Magento/Catalog/Model/Product/Type/Price.php b/app/code/Magento/Catalog/Model/Product/Type/Price.php index 8d1b57b72d01f..2b6c8d8d3dd85 100644 --- a/app/code/Magento/Catalog/Model/Product/Type/Price.php +++ b/app/code/Magento/Catalog/Model/Product/Type/Price.php @@ -131,7 +131,7 @@ public function getBasePrice($product, $qty = null) * @param \Magento\Catalog\Model\Product $product * @return float */ - public function getFinalPrice($qty = null, $product) + public function getFinalPrice($qty, $product) { if (is_null($qty) && !is_null($product->getCalculatedFinalPrice())) { return $product->getCalculatedFinalPrice(); @@ -235,7 +235,7 @@ protected function _applyTierPrice($product, $qty, $finalPrice) * @param \Magento\Catalog\Model\Product $product * @return float */ - public function getTierPrice($qty = null, $product) + public function getTierPrice($qty, $product) { $allGroups = \Magento\Customer\Model\Group::CUST_GROUP_ALL; $prices = $product->getData('tier_price'); @@ -353,7 +353,7 @@ public function getTierPriceCount($product) * @param \Magento\Catalog\Model\Product $product * @return array || float */ - public function getFormatedTierPrice($qty=null, $product) + public function getFormatedTierPrice($qty, $product) { $price = $product->getTierPrice($qty); if (is_array($price)) { diff --git a/app/code/Magento/Catalog/Model/ProductOptions/Config/Reader.php b/app/code/Magento/Catalog/Model/ProductOptions/Config/Reader.php index a98b554e56517..b0df41d4e75da 100644 --- a/app/code/Magento/Catalog/Model/ProductOptions/Config/Reader.php +++ b/app/code/Magento/Catalog/Model/ProductOptions/Config/Reader.php @@ -43,6 +43,7 @@ class Reader extends \Magento\Config\Reader\Filesystem * @param string $fileName * @param array $idAttributes * @param string $domDocumentClass + * @param string $defaultScope */ public function __construct( \Magento\Config\FileResolverInterface $fileResolver, @@ -51,10 +52,18 @@ public function __construct( \Magento\Config\ValidationStateInterface $validationState, $fileName = 'product_options.xml', $idAttributes = array(), - $domDocumentClass = 'Magento\Config\Dom' + $domDocumentClass = 'Magento\Config\Dom', + $defaultScope = 'global' ) { parent::__construct( - $fileResolver, $converter, $schemaLocator, $validationState, $fileName, $idAttributes, $domDocumentClass + $fileResolver, + $converter, + $schemaLocator, + $validationState, + $fileName, + $idAttributes, + $domDocumentClass, + $defaultScope ); } } diff --git a/app/code/Magento/Catalog/Model/ProductTypes/Config/Reader.php b/app/code/Magento/Catalog/Model/ProductTypes/Config/Reader.php index 6321b9b5fb75a..b23ae4b3355be 100644 --- a/app/code/Magento/Catalog/Model/ProductTypes/Config/Reader.php +++ b/app/code/Magento/Catalog/Model/ProductTypes/Config/Reader.php @@ -47,6 +47,7 @@ class Reader extends \Magento\Config\Reader\Filesystem * @param string $fileName * @param array $idAttributes * @param string $domDocumentClass + * @param string $defaultScope */ public function __construct( \Magento\Config\FileResolverInterface $fileResolver, @@ -55,10 +56,18 @@ public function __construct( \Magento\Config\ValidationStateInterface $validationState, $fileName = 'product_types.xml', $idAttributes = array(), - $domDocumentClass = 'Magento\Config\Dom' + $domDocumentClass = 'Magento\Config\Dom', + $defaultScope = 'global' ) { parent::__construct( - $fileResolver, $converter, $schemaLocator, $validationState, $fileName, $idAttributes, $domDocumentClass + $fileResolver, + $converter, + $schemaLocator, + $validationState, + $fileName, + $idAttributes, + $domDocumentClass, + $defaultScope ); } } diff --git a/app/code/Magento/Catalog/Model/Resource/Category/Flat.php b/app/code/Magento/Catalog/Model/Resource/Category/Flat.php index 0b9f48aac7901..3ebf8306126bd 100644 --- a/app/code/Magento/Catalog/Model/Resource/Category/Flat.php +++ b/app/code/Magento/Catalog/Model/Resource/Category/Flat.php @@ -736,6 +736,7 @@ protected function _getStaticColumns() } else { break; } + // fall-through intentional case \Magento\DB\Ddl\Table::TYPE_DECIMAL: $options = $column['PRECISION'] . ',' . $column['SCALE']; $_is_unsigned = null; diff --git a/app/code/Magento/Catalog/Model/Resource/Product/Attribute/Backend/Image.php b/app/code/Magento/Catalog/Model/Resource/Product/Attribute/Backend/Image.php index 3a8aa9d12d3f0..4da0fb68e3649 100644 --- a/app/code/Magento/Catalog/Model/Resource/Product/Attribute/Backend/Image.php +++ b/app/code/Magento/Catalog/Model/Resource/Product/Attribute/Backend/Image.php @@ -52,15 +52,13 @@ class Image protected $_fileUploaderFactory; /** - * Construct - * - * @param \Magento\App\Dir $dir * @param \Magento\Logger $logger + * @param \Magento\App\Dir $dir * @param \Magento\Core\Model\File\UploaderFactory $fileUploaderFactory */ public function __construct( - \Magento\App\Dir $dir, \Magento\Logger $logger, + \Magento\App\Dir $dir, \Magento\Core\Model\File\UploaderFactory $fileUploaderFactory ) { $this->_dir = $dir; diff --git a/app/code/Magento/Catalog/Model/Resource/Product/Attribute/Backend/Urlkey.php b/app/code/Magento/Catalog/Model/Resource/Product/Attribute/Backend/Urlkey.php index ab653e852e2cc..b107288adc6cf 100644 --- a/app/code/Magento/Catalog/Model/Resource/Product/Attribute/Backend/Urlkey.php +++ b/app/code/Magento/Catalog/Model/Resource/Product/Attribute/Backend/Urlkey.php @@ -45,15 +45,11 @@ class Urlkey protected $_catalogUrl; /** - * Construct - * - * @param \Magento\Catalog\Model\Url $catalogUrl * @param \Magento\Logger $logger + * @param \Magento\Catalog\Model\Url $catalogUrl */ - public function __construct( - \Magento\Catalog\Model\Url $catalogUrl, - \Magento\Logger $logger - ) { + public function __construct(\Magento\Logger $logger, \Magento\Catalog\Model\Url $catalogUrl) + { $this->_catalogUrl = $catalogUrl; parent::__construct($logger); } diff --git a/app/code/Magento/Catalog/Model/Session.php b/app/code/Magento/Catalog/Model/Session.php index b550dd7961c69..7d9a489b9440c 100644 --- a/app/code/Magento/Catalog/Model/Session.php +++ b/app/code/Magento/Catalog/Model/Session.php @@ -39,15 +39,15 @@ class Session extends \Magento\Core\Model\Session\AbstractSession * @param \Magento\Core\Model\Session\Context $context * @param \Magento\Session\SidResolverInterface $sidResolver * @param \Magento\Session\Config\ConfigInterface $sessionConfig - * @param array $data * @param null $sessionName + * @param array $data */ public function __construct( \Magento\Core\Model\Session\Context $context, \Magento\Session\SidResolverInterface $sidResolver, \Magento\Session\Config\ConfigInterface $sessionConfig, - array $data = array(), - $sessionName = null + $sessionName = null, + array $data = array() ) { parent::__construct($context, $sidResolver, $sessionConfig, $data); $this->start('catalog', $sessionName); diff --git a/app/code/Magento/Catalog/Model/Template/Filter.php b/app/code/Magento/Catalog/Model/Template/Filter.php index 5b52d053f4e3b..331e8c9c64b74 100644 --- a/app/code/Magento/Catalog/Model/Template/Filter.php +++ b/app/code/Magento/Catalog/Model/Template/Filter.php @@ -64,20 +64,20 @@ class Filter extends \Magento\Filter\Template protected $_storeManager; /** - * Construct - * * @param \Magento\Stdlib\String $string * @param \Magento\Core\Model\StoreManagerInterface $storeManager * @param \Magento\View\Url $viewUrl + * @param array $variables */ public function __construct( \Magento\Stdlib\String $string, \Magento\Core\Model\StoreManagerInterface $storeManager, - \Magento\View\Url $viewUrl + \Magento\View\Url $viewUrl, + $variables = array() ) { $this->_storeManager = $storeManager; $this->_viewUrl = $viewUrl; - parent::__construct($string); + parent::__construct($string, $variables); } /** diff --git a/app/code/Magento/Catalog/view/frontend/layout/catalog_product_view.xml b/app/code/Magento/Catalog/view/frontend/layout/catalog_product_view.xml index 5c133f983c1de..4f71e645988c3 100644 --- a/app/code/Magento/Catalog/view/frontend/layout/catalog_product_view.xml +++ b/app/code/Magento/Catalog/view/frontend/layout/catalog_product_view.xml @@ -49,31 +49,10 @@ - - - - - - - - - - - - - - - - - - - - - - - + + getSku sku @@ -82,8 +61,10 @@ itemprop="sku" - - + + + + getShortDescription short_description @@ -93,12 +74,31 @@ itemprop="description" - - - + + + + + + + + + + + + + + + + + + + + + + - + 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 1d8d9c2fd9c04..d867957778645 100644 --- a/app/code/Magento/CatalogInventory/Block/Adminhtml/Form/Field/Stock.php +++ b/app/code/Magento/CatalogInventory/Block/Adminhtml/Form/Field/Stock.php @@ -55,26 +55,24 @@ class Stock extends \Magento\Data\Form\Element\Select protected $_factoryText; /** - * Construct - * - * @param \Magento\Escaper $escaper * @param \Magento\Data\Form\Element\Factory $factoryElement * @param \Magento\Data\Form\Element\CollectionFactory $factoryCollection + * @param \Magento\Escaper $escaper * @param \Magento\Data\Form\Element\TextFactory $factoryText - * @param array $attributes + * @param array $data */ public function __construct( - \Magento\Escaper $escaper, \Magento\Data\Form\Element\Factory $factoryElement, \Magento\Data\Form\Element\CollectionFactory $factoryCollection, + \Magento\Escaper $escaper, \Magento\Data\Form\Element\TextFactory $factoryText, - array $attributes = array() + array $data = array() ) { $this->_factoryText = $factoryText; - $this->_qty = isset($attributes['qty']) ? $attributes['qty'] : $this->_createQtyElement(); - unset($attributes['qty']); - parent::__construct($escaper, $factoryElement, $factoryCollection, $attributes); - $this->setName($attributes['name']); + $this->_qty = isset($data['qty']) ? $data['qty'] : $this->_createQtyElement(); + unset($data['qty']); + parent::__construct($factoryElement, $factoryCollection, $escaper, $data); + $this->setName($data['name']); } /** diff --git a/app/code/Magento/CatalogRule/Block/Adminhtml/Promo/Catalog/Edit/Form.php b/app/code/Magento/CatalogRule/Block/Adminhtml/Promo/Catalog/Edit/Form.php index 34ee5a9e41de6..db3334dcabbd1 100644 --- a/app/code/Magento/CatalogRule/Block/Adminhtml/Promo/Catalog/Edit/Form.php +++ b/app/code/Magento/CatalogRule/Block/Adminhtml/Promo/Catalog/Edit/Form.php @@ -47,7 +47,7 @@ protected function _prepareForm() { /** @var \Magento\Data\Form $form */ $form = $this->_formFactory->create(array( - 'attributes' => array( + 'data' => array( 'id' => 'edit_form', 'action' => $this->getUrl('catalog_rule/promo_catalog/save'), 'method' => 'post', diff --git a/app/code/Magento/CatalogRule/Model/Observer.php b/app/code/Magento/CatalogRule/Model/Observer.php index 5d8ed38d7b08e..36d8448895263 100644 --- a/app/code/Magento/CatalogRule/Model/Observer.php +++ b/app/code/Magento/CatalogRule/Model/Observer.php @@ -107,10 +107,9 @@ class Observer * @param \Magento\Core\Model\LocaleInterface $locale * @param \Magento\Customer\Model\Session $customerSession * @param \Magento\Backend\Model\Session $backendSession - * @param Rule\Product\Price $productPrice * @param \Magento\Core\Model\Registry $coreRegistry * @param \Magento\Stdlib\DateTime $dateTime - * + * * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( @@ -124,7 +123,6 @@ public function __construct( \Magento\Core\Model\LocaleInterface $locale, \Magento\Customer\Model\Session $customerSession, \Magento\Backend\Model\Session $backendSession, - \Magento\CatalogRule\Model\Rule\Product\Price $productPrice, \Magento\Core\Model\Registry $coreRegistry, \Magento\Stdlib\DateTime $dateTime ) { diff --git a/app/code/Magento/CatalogRule/Model/Rule/Action/Collection.php b/app/code/Magento/CatalogRule/Model/Rule/Action/Collection.php index c6928607953a9..4c0918300f10c 100644 --- a/app/code/Magento/CatalogRule/Model/Rule/Action/Collection.php +++ b/app/code/Magento/CatalogRule/Model/Rule/Action/Collection.php @@ -31,17 +31,17 @@ class Collection extends \Magento\Rule\Model\Action\Collection { /** * @param \Magento\View\Url $viewUrl - * @param \Magento\Rule\Model\ActionFactory $actionFactory * @param \Magento\View\LayoutInterface $layout + * @param \Magento\Rule\Model\ActionFactory $actionFactory * @param array $data */ public function __construct( \Magento\View\Url $viewUrl, - \Magento\Rule\Model\ActionFactory $actionFactory, \Magento\View\LayoutInterface $layout, + \Magento\Rule\Model\ActionFactory $actionFactory, array $data = array() ) { - parent::__construct($viewUrl, $actionFactory, $layout, $data); + parent::__construct($viewUrl, $layout, $actionFactory, $data); $this->setType('Magento\CatalogRule\Model\Rule\Action\Collection'); } diff --git a/app/code/Magento/CatalogRule/Model/Rule/Condition/Combine.php b/app/code/Magento/CatalogRule/Model/Rule/Condition/Combine.php index d2183913c5546..5c8a3abe7a01b 100644 --- a/app/code/Magento/CatalogRule/Model/Rule/Condition/Combine.php +++ b/app/code/Magento/CatalogRule/Model/Rule/Condition/Combine.php @@ -37,13 +37,13 @@ class Combine extends \Magento\Rule\Model\Condition\Combine protected $_productFactory; /** - * @param \Magento\CatalogRule\Model\Rule\Condition\ProductFactory $conditionFactory * @param \Magento\Rule\Model\Condition\Context $context + * @param \Magento\CatalogRule\Model\Rule\Condition\ProductFactory $conditionFactory * @param array $data */ public function __construct( - \Magento\CatalogRule\Model\Rule\Condition\ProductFactory $conditionFactory, \Magento\Rule\Model\Condition\Context $context, + \Magento\CatalogRule\Model\Rule\Condition\ProductFactory $conditionFactory, array $data = array() ) { $this->_productFactory = $conditionFactory; diff --git a/app/code/Magento/CatalogSearch/Block/Autocomplete.php b/app/code/Magento/CatalogSearch/Block/Autocomplete.php index 2f282e0cf3051..3acebfb3e7da8 100644 --- a/app/code/Magento/CatalogSearch/Block/Autocomplete.php +++ b/app/code/Magento/CatalogSearch/Block/Autocomplete.php @@ -58,8 +58,9 @@ protected function _toHtml() $item['row_class'] .= ' last'; } - $html .= '
  • ' - . ''.$item['num_of_results'].''.$this->escapeHtml($item['title']).'
  • '; + $escapedTitle = $this->escapeHtml($item['title']); + $html .= '
  • ' + . ''.$item['num_of_results'].''.$escapedTitle.'
  • '; } $html.= ''; diff --git a/app/code/Magento/CatalogSearch/Block/Layer.php b/app/code/Magento/CatalogSearch/Block/Layer.php index 4be2228a3a4b0..5a22b1279fb6b 100644 --- a/app/code/Magento/CatalogSearch/Block/Layer.php +++ b/app/code/Magento/CatalogSearch/Block/Layer.php @@ -63,7 +63,6 @@ class Layer extends \Magento\Catalog\Block\Layer\View * @param \Magento\CatalogSearch\Model\Layer $catalogLayer * @param \Magento\CatalogSearch\Model\Resource\EngineProvider $engineProvider * @param \Magento\CatalogSearch\Helper\Data $catalogSearchData - * @param \Magento\CatalogSearch\Model\Layer $catalogSearchLayer * @param \Magento\Core\Model\Registry $registry * @param array $data */ @@ -72,14 +71,12 @@ public function __construct( \Magento\CatalogSearch\Model\Layer $catalogLayer, \Magento\CatalogSearch\Model\Resource\EngineProvider $engineProvider, \Magento\CatalogSearch\Helper\Data $catalogSearchData, - \Magento\CatalogSearch\Model\Layer $catalogSearchLayer, \Magento\Core\Model\Registry $registry, array $data = array() ) { $this->_engineProvider = $engineProvider; $this->_coreRegistry = $registry; $this->_catalogSearchData = $catalogSearchData; - $this->_catalogSearchLayer = $catalogSearchLayer; parent::__construct($context, $catalogLayer, $data); } diff --git a/app/code/Magento/Checkout/Block/Adminhtml/Agreement/Edit/Form.php b/app/code/Magento/Checkout/Block/Adminhtml/Agreement/Edit/Form.php index 8eacc56285ab9..474938fed3d7c 100644 --- a/app/code/Magento/Checkout/Block/Adminhtml/Agreement/Edit/Form.php +++ b/app/code/Magento/Checkout/Block/Adminhtml/Agreement/Edit/Form.php @@ -72,7 +72,7 @@ protected function _prepareForm() $model = $this->_coreRegistry->registry('checkout_agreement'); /** @var \Magento\Data\Form $form */ $form = $this->_formFactory->create(array( - 'attributes' => array( + 'data' => array( 'id' => 'edit_form', 'action' => $this->getData('action'), 'method' => 'post', diff --git a/app/code/Magento/Checkout/Block/Onepage/Success.php b/app/code/Magento/Checkout/Block/Onepage/Success.php index 97a598a3a0880..c8139e46cc1cb 100644 --- a/app/code/Magento/Checkout/Block/Onepage/Success.php +++ b/app/code/Magento/Checkout/Block/Onepage/Success.php @@ -58,7 +58,7 @@ class Success extends \Magento\View\Element\Template /** * @var \Magento\Sales\Model\Resource\Recurring\Profile\Collection */ - protected $_profileCollFactory; + protected $_recurringProfileCollectionFactory; /** * @var \Magento\Sales\Model\Order\Config @@ -71,7 +71,7 @@ class Success extends \Magento\View\Element\Template * @param \Magento\Customer\Model\Session $customerSession * @param \Magento\Sales\Model\OrderFactory $orderFactory * @param \Magento\Sales\Model\Billing\AgreementFactory $agreementFactory - * @param \Magento\Sales\Model\Resource\Recurring\Profile\CollectionFactory $profileCollFactory + * @param \Magento\Sales\Model\Resource\Recurring\Profile\CollectionFactory $recurringProfileCollectionFactory * @param \Magento\Sales\Model\Order\Config $orderConfig * @param array $data */ @@ -81,17 +81,17 @@ public function __construct( \Magento\Customer\Model\Session $customerSession, \Magento\Sales\Model\OrderFactory $orderFactory, \Magento\Sales\Model\Billing\AgreementFactory $agreementFactory, - \Magento\Sales\Model\Resource\Recurring\Profile\CollectionFactory $profileCollFactory, + \Magento\Sales\Model\Resource\Recurring\Profile\CollectionFactory $recurringProfileCollectionFactory, \Magento\Sales\Model\Order\Config $orderConfig, array $data = array() ) { + parent::__construct($context, $data); $this->_checkoutSession = $checkoutSession; $this->_customerSession = $customerSession; $this->_orderFactory = $orderFactory; $this->_agreementFactory = $agreementFactory; - $this->_profileCollFactory = $profileCollFactory; + $this->_recurringProfileCollectionFactory = $recurringProfileCollectionFactory; $this->_orderConfig = $orderConfig; - parent::__construct($context, $data); } /** @@ -175,9 +175,8 @@ protected function _prepareLastRecurringProfiles() { $profileIds = $this->_checkoutSession->getLastRecurringProfileIds(); if ($profileIds && is_array($profileIds)) { - $collection = $this->_profileCollFactory->create()->getCollection() - ->addFieldToFilter('profile_id', array('in' => $profileIds)) - ; + $collection = $this->_recurringProfileCollectionFactory->create() + ->addFieldToFilter('profile_id', array('in' => $profileIds)); $profiles = array(); foreach ($collection as $profile) { $profiles[] = $profile; diff --git a/app/code/Magento/Checkout/view/frontend/js/opcheckout.js b/app/code/Magento/Checkout/view/frontend/js/opcheckout.js index 1e2f48c7e8d62..501ef6b3c056e 100644 --- a/app/code/Magento/Checkout/view/frontend/js/opcheckout.js +++ b/app/code/Magento/Checkout/view/frontend/js/opcheckout.js @@ -51,35 +51,40 @@ }, _create: function() { - var _this = this; this.checkoutPrice = this.options.quoteBaseGrandTotal; if (this.options.checkout.suggestRegistration) { $(this.options.checkout.loginGuestSelector).prop('checked', false); $(this.options.checkout.loginRegisterSelector).prop('checked', true); } - this.element - .on('click', this.options.checkout.continueSelector, function() { - $.proxy(_this._continue($(this)), _this); - }) - .on('gotoSection', function(event, section) { - $.proxy(_this._ajaxUpdateProgress(section), _this); - _this.element.trigger('enableSection', {selector: _this.options.sectionSelectorPrefix + section}); - }) - .on('ajaxError', $.proxy(this._ajaxError, this)) - .on('showAjaxLoader', $.proxy(this._ajaxSend, this)) - .on('hideAjaxLoader', $.proxy(this._ajaxComplete, this)) - .on('click', this.options.backSelector, function() { - _this.element.trigger('enableSection', {selector: '#' + _this.element.find('.active').prev().attr('id')}); - }) - .on('click', '[data-action="login-form-submit"]', function() { - $(_this.options.checkout.loginFormSelector).submit(); - }); - $(this.options.checkoutProgressContainer).on('click', '[data-goto-section]', $.proxy(function(e) { - var gotoSection = $(e.target).data('goto-section'); - this._ajaxUpdateProgress(gotoSection); - this.element.trigger('enableSection', {selector: _this.options.sectionSelectorPrefix + gotoSection}); - return false; - }, this)); + var events = {}; + events['click ' + this.options.checkout.continueSelector] = function(e) { + this._continue($(e.target)); + }; + events['click ' + this.options.backSelector] = function() { + this.element.trigger('enableSection', {selector: '#' + this.element.find('.active').prev().attr('id')}); + }; + $.extend(events, { + ajaxError: '_ajaxError', + showAjaxLoader: '_ajaxSend', + hideAjaxLoader: '_ajaxComplete', + gotoSection: function(e, section) { + this._ajaxUpdateProgress(section); + this.element.trigger('enableSection', {selector: this.options.sectionSelectorPrefix + section}); + }, + 'click [data-action=login-form-submit]': function() { + $(this.options.checkout.loginFormSelector).submit(); + } + }); + this._on(events); + + this._on($(this.options.checkoutProgressContainer), { + 'click [data-goto-section]' : function(e) { + var gotoSection = $(e.target).data('goto-section'); + this._ajaxUpdateProgress(gotoSection); + this.element.trigger('enableSection', {selector: this.options.sectionSelectorPrefix + gotoSection}); + return false; + } + }); }, /** @@ -236,16 +241,18 @@ _create: function() { this._super(); - this.element - .on('change', this.options.billing.addressDropdownSelector, $.proxy(function(e) { - this.element.find(this.options.billing.newAddressFormSelector).toggle(!$(e.target).val()); - }, this)) - .on('click', this.options.billing.continueSelector, $.proxy(function() { - if ($(this.options.billing.form).validation && $(this.options.billing.form).validation('isValid')) { - this._billingSave(); - } - }, this)) - .find(this.options.billing.form).validation(); + var events = {}; + events['change ' + this.options.billing.addressDropdownSelector] = function(e) { + this.element.find(this.options.billing.newAddressFormSelector).toggle(!$(e.target).val()); + }; + events['click ' + this.options.billing.continueSelector] = function() { + if ($(this.options.billing.form).validation && $(this.options.billing.form).validation('isValid')) { + this._billingSave(); + } + }; + this._on(events); + + this.element.find(this.options.billing.form).validation(); } , _billingSave: function() { @@ -271,27 +278,31 @@ _create: function() { this._super(); - this.element - .on('change', this.options.shipping.addressDropdownSelector, $.proxy(function(e) { - $(this.options.shipping.newAddressFormSelector).toggle(!$(e.target).val()); - }, this)) - .on('input propertychange', this.options.shipping.form + ' :input[name]', $.proxy(function() { - $(this.options.shipping.copyBillingSelector).prop('checked', false); - }, this)) - .on('click', this.options.shipping.copyBillingSelector, $.proxy(function(e) { - if ($(e.target).is(':checked')) { - this._billingToShipping(); - } - }, this)) - .on('click', this.options.shipping.continueSelector, $.proxy(function() { - if ($(this.options.shipping.form).validation && $(this.options.shipping.form).validation('isValid')) { + var events = {}; + events['change ' + this.options.shipping.addressDropdownSelector] = function(e) { + $(this.options.shipping.newAddressFormSelector).toggle(!$(e.target).val()); + }; + var onInputPropChange = function() { + $(this.options.shipping.copyBillingSelector).prop('checked', false); + }; + events['input ' + this.options.shipping.form + ' :input[name]'] = onInputPropChange; + events['propertychange ' + this.options.shipping.form + ' :input[name]'] = onInputPropChange; + events['click ' + this.options.shipping.copyBillingSelector] = function(e) { + if ($(e.target).is(':checked')) { + this._billingToShipping(); + } + }; + events['click ' + this.options.shipping.continueSelector] = function() { + if ($(this.options.shipping.form).validation && $(this.options.shipping.form).validation('isValid')) { this._ajaxContinue(this.options.shipping.saveUrl, $(this.options.shipping.form).serialize(), false, function() { //Trigger indicating shipping save. eg. GiftMessage listens to this to inject gift options this.element.trigger('shippingSave'); }); - } - }, this)) - .find(this.options.shipping.form).validation(); + } + }; + this._on(events); + + this.element.find(this.options.shipping.form).validation(); }, /** @@ -321,26 +332,29 @@ _create: function() { this._super(); - var _this = this; - this.element - .on('click', this.options.shippingMethod.continueSelector, $.proxy(function() { - if (this._validateShippingMethod()&& - $(this.options.shippingMethod.form).validation && - $(this.options.shippingMethod.form).validation('isValid')) { - this._ajaxContinue(this.options.shippingMethod.saveUrl, $(this.options.shippingMethod.form).serialize()); - } - }, this)) - .on('click', 'input[name="shipping_method"]', function() { - var selectedPrice = _this.shippingCodePrice[$(this).val()] || 0, - oldPrice = _this.shippingCodePrice[_this.currentShippingMethod] || 0; - _this.checkoutPrice = _this.checkoutPrice - oldPrice + selectedPrice; - _this.currentShippingMethod = $(this).val(); - }) - .on('contentUpdated', $.proxy(function() { + var events = {}; + events['click ' + this.options.shippingMethod.continueSelector] = function() { + if (this._validateShippingMethod()&& + $(this.options.shippingMethod.form).validation && + $(this.options.shippingMethod.form).validation('isValid')) { + this._ajaxContinue(this.options.shippingMethod.saveUrl, $(this.options.shippingMethod.form).serialize()); + } + }; + $.extend(events, { + 'click input[name=shipping_method]': function(e) { + var selectedPrice = this.shippingCodePrice[$(e.target).val()] || 0, + oldPrice = this.shippingCodePrice[this.currentShippingMethod] || 0; + this.checkoutPrice = this.checkoutPrice - oldPrice + selectedPrice; + this.currentShippingMethod = $(e.target).val(); + }, + 'contentUpdated': function() { this.currentShippingMethod = this.element.find('input[name="shipping_method"]:checked').val(); this.shippingCodePrice = this.element.find('[data-shipping-code-price]').data('shipping-code-price'); - }, this)) - .find(this.options.shippingMethod.form).validation(); + } + }); + this._on(events); + + this.element.find(this.options.shippingMethod.form).validation(); }, /** @@ -378,15 +392,30 @@ _create: function() { this._super(); - this.element - .on('click', this.options.payment.continueSelector, $.proxy(function() { - if (this._validatePaymentMethod() && - $(this.options.payment.form).validation && - $(this.options.payment.form).validation('isValid')) { - this._ajaxContinue(this.options.payment.saveUrl, $(this.options.payment.form).serialize()); - } - }, this)) - .on('updateCheckoutPrice', $.proxy(function(event, data) { + var events = {}; + events['click ' + this.options.payment.continueSelector] = function() { + if (this._validatePaymentMethod() && + $(this.options.payment.form).validation && + $(this.options.payment.form).validation('isValid')) { + this._ajaxContinue(this.options.payment.saveUrl, $(this.options.payment.form).serialize()); + } + }; + events['contentUpdated ' + this.options.payment.form] = function() { + $(this.options.payment.form).find('dd [name^="payment["]').prop('disabled', true); + var checkoutPrice = this.element.find(this.options.payment.form).find('[data-checkout-price]').data('checkout-price'); + if ($.isNumeric(checkoutPrice)) { + this.checkoutPrice = checkoutPrice; + } + if (this.checkoutPrice < this.options.minBalance) { + this._disablePaymentMethods(); + } else { + this._enablePaymentMethods(); + } + }; + events['click ' + this.options.payment.form + ' dt input:radio'] = '_paymentMethodHandler'; + + $.extend(events, { + updateCheckoutPrice: function(event, data) { if (data.price) { this.checkoutPrice += data.price; } @@ -400,21 +429,12 @@ // Remove free input field, show all payment method this._enablePaymentMethods(); } - }, this)) - .on('contentUpdated', this.options.payment.form, $.proxy(function() { - $(this.options.payment.form).find('dd [name^="payment["]').prop('disabled', true); - var checkoutPrice = this.element.find(this.options.payment.form).find('[data-checkout-price]').data('checkout-price'); - if ($.isNumeric(checkoutPrice)) { - this.checkoutPrice = checkoutPrice; - } - if (this.checkoutPrice < this.options.minBalance) { - this._disablePaymentMethods(); - } else { - this._enablePaymentMethods(); - } - }, this)) - .on('click', this.options.payment.form + ' dt input:radio', $.proxy(this._paymentMethodHandler, this)) - .find(this.options.payment.form).validation({ + } + }); + + this._on(events); + + this.element.find(this.options.payment.form).validation({ errorPlacement: function(error, element) { if (element.attr('data-validate') && element.attr('data-validate').indexOf('validate-cc-ukss') >= 0) { element.parents('form').find('[data-validation-msg="validate-cc-ukss"]').html(error); @@ -499,26 +519,27 @@ _create: function() { this._super(); - this.element - .on('click', this.options.review.continueSelector, $.proxy(this._saveOrder, this)) - .on('saveOrder', this.options.review.container, $.proxy(this._saveOrder, this)) - .on('contentUpdated', this.options.review.container, $.proxy(function() { - var paypalIframe = this.element.find(this.options.review.container) - .find('[data-container="paypal-iframe"]'); - if (paypalIframe.length) { - paypalIframe.show(); - $(this.options.review.submitContainer).hide(); - } - }, this)); + var events = {}; + events['click ' + this.options.review.continueSelector] = this._saveOrder; + events['saveOrder' + this.options.review.container] = this._saveOrder; + events['contentUpdated' + this.options.review.container] = function() { + var paypalIframe = this.element.find(this.options.review.container) + .find('[data-container="paypal-iframe"]'); + if (paypalIframe.length) { + paypalIframe.show(); + $(this.options.review.submitContainer).hide(); + } + }; + this._on(events); }, _saveOrder: function() { - if ($(this.options.payment.form).validation && - $(this.options.payment.form).validation('isValid')) { - this._ajaxContinue( - this.options.review.saveUrl, + if ($(this.options.payment.form).validation && + $(this.options.payment.form).validation('isValid')) { + this._ajaxContinue( + this.options.review.saveUrl, $(this.options.payment.form).serialize() + '&' + $(this.options.review.agreementFormSelector).serialize()); - } + } } }); })(jQuery, window); diff --git a/app/code/Magento/Checkout/view/frontend/layout/checkout_cart_index.xml b/app/code/Magento/Checkout/view/frontend/layout/checkout_cart_index.xml index b899db32ef36b..8732368c29fde 100644 --- a/app/code/Magento/Checkout/view/frontend/layout/checkout_cart_index.xml +++ b/app/code/Magento/Checkout/view/frontend/layout/checkout_cart_index.xml @@ -24,6 +24,7 @@ */ --> + diff --git a/app/code/Magento/Checkout/view/frontend/onepage/billing.phtml b/app/code/Magento/Checkout/view/frontend/onepage/billing.phtml index 49eedbea9b0d4..9ea6704cdc689 100644 --- a/app/code/Magento/Checkout/view/frontend/onepage/billing.phtml +++ b/app/code/Magento/Checkout/view/frontend/onepage/billing.phtml @@ -42,7 +42,7 @@ diff --git a/app/code/Magento/Checkout/view/frontend/onepage/login.phtml b/app/code/Magento/Checkout/view/frontend/onepage/login.phtml index 084ebdadb5637..459243004aaed 100644 --- a/app/code/Magento/Checkout/view/frontend/onepage/login.phtml +++ b/app/code/Magento/Checkout/view/frontend/onepage/login.phtml @@ -41,7 +41,7 @@
    diff --git a/app/code/Magento/Checkout/view/frontend/onepage/review/button.phtml b/app/code/Magento/Checkout/view/frontend/onepage/review/button.phtml index 1990699641007..91008edae7de1 100644 --- a/app/code/Magento/Checkout/view/frontend/onepage/review/button.phtml +++ b/app/code/Magento/Checkout/view/frontend/onepage/review/button.phtml @@ -22,4 +22,4 @@ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) */ ?> - + diff --git a/app/code/Magento/Checkout/view/frontend/success.phtml b/app/code/Magento/Checkout/view/frontend/success.phtml index 95681ab6f6e26..b13b4eeab3b85 100644 --- a/app/code/Magento/Checkout/view/frontend/success.phtml +++ b/app/code/Magento/Checkout/view/frontend/success.phtml @@ -23,36 +23,38 @@ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) */ ?> -

    -getOrderId()):?> - getCanViewOrder()) :?> -

    %s', $this->escapeHtml($this->getViewOrderUrl()), $this->escapeHtml($this->getOrderId()))) ?>

    - -

    escapeHtml($this->getOrderId())) ?>

    +
    +

    + getOrderId()):?> + getCanViewOrder()) :?> +

    %s', $this->escapeHtml($this->getViewOrderUrl()), $this->escapeHtml($this->getOrderId()))) ?>

    + +

    escapeHtml($this->getOrderId())) ?>

    + +

    + getCanViewOrder() && $this->getCanPrintOrder()) :?> +

    + here to print a copy of your order confirmation.', $this->getPrintUrl()) ?> + getChildHtml() ?> +

    + -

    - getCanViewOrder() && $this->getCanPrintOrder()) :?> -

    - here to print a copy of your order confirmation.', $this->getPrintUrl()) ?> - getChildHtml() ?> -

    - - -getAgreementRefId()): ?> -

    %s', $this->escapeHtml($this->getAgreementUrl()), $this->escapeHtml($this->getAgreementRefId())))?>

    - + getAgreementRefId()): ?> +

    %s', $this->escapeHtml($this->getAgreementUrl()), $this->escapeHtml($this->getAgreementRefId())))?>

    + -getRecurringProfiles()):?> -

    -
      - -getCanViewProfiles() ? sprintf('%s', $this->escapeHtml($this->getProfileUrl($profile)), $this->escapeHtml($this->getObjectData($profile, 'reference_id'))) : $this->escapeHtml($this->getObjectData($profile, 'reference_id')));?> -
    • escapeHtml($this->getObjectData($profile, 'schedule_description')))?>
    • - -
    - + getRecurringProfiles()):?> +

    +
      + + getCanViewProfiles() ? sprintf('%s', $this->escapeHtml($this->getProfileUrl($profile)), $this->escapeHtml($this->getObjectData($profile, 'reference_id'))) : $this->escapeHtml($this->getObjectData($profile, 'reference_id')));?> +
    • escapeHtml($this->getObjectData($profile, 'schedule_description')))?>
    • + +
    + -
    - -
    +
    + +
    +
    \ No newline at end of file diff --git a/app/code/Magento/Cms/Block/Adminhtml/Block/Edit/Form.php b/app/code/Magento/Cms/Block/Adminhtml/Block/Edit/Form.php index d946aa452c8f5..4a992a8e30c59 100644 --- a/app/code/Magento/Cms/Block/Adminhtml/Block/Edit/Form.php +++ b/app/code/Magento/Cms/Block/Adminhtml/Block/Edit/Form.php @@ -94,7 +94,7 @@ protected function _prepareForm() /** @var \Magento\Data\Form $form */ $form = $this->_formFactory->create(array( - 'attributes' => array( + 'data' => array( 'id' => 'edit_form', 'action' => $this->getData('action'), 'method' => 'post', diff --git a/app/code/Magento/Cms/Block/Adminhtml/Page/Edit/Form.php b/app/code/Magento/Cms/Block/Adminhtml/Page/Edit/Form.php index c12d78114687a..191d22ffcfaaa 100644 --- a/app/code/Magento/Cms/Block/Adminhtml/Page/Edit/Form.php +++ b/app/code/Magento/Cms/Block/Adminhtml/Page/Edit/Form.php @@ -41,7 +41,7 @@ protected function _prepareForm() { /** @var \Magento\Data\Form $form */ $form = $this->_formFactory->create(array( - 'attributes' => array( + 'data' => array( 'id' => 'edit_form', 'action' => $this->getData('action'), 'method' => 'post', diff --git a/app/code/Magento/Cms/Block/Adminhtml/Page/Edit/Tab/Design.php b/app/code/Magento/Cms/Block/Adminhtml/Page/Edit/Tab/Design.php index fd7e6462f1f97..7af55766780c0 100644 --- a/app/code/Magento/Cms/Block/Adminhtml/Page/Edit/Tab/Design.php +++ b/app/code/Magento/Cms/Block/Adminhtml/Page/Edit/Tab/Design.php @@ -33,7 +33,7 @@ class Design implements \Magento\Backend\Block\Widget\Tab\TabInterface { /** - * @var \Magento\Core\Model\Theme\LabelFactory + * @var \Magento\View\Design\Theme\LabelFactory */ protected $_labelFactory; @@ -47,7 +47,7 @@ class Design * @param \Magento\Core\Model\Registry $registry * @param \Magento\Data\FormFactory $formFactory * @param \Magento\Theme\Model\Layout\Source\Layout $pageLayout - * @param \Magento\Core\Model\Theme\LabelFactory $labelFactory + * @param \Magento\View\Design\Theme\LabelFactory $labelFactory * @param array $data */ public function __construct( @@ -55,7 +55,7 @@ public function __construct( \Magento\Core\Model\Registry $registry, \Magento\Data\FormFactory $formFactory, \Magento\Theme\Model\Layout\Source\Layout $pageLayout, - \Magento\Core\Model\Theme\LabelFactory $labelFactory, + \Magento\View\Design\Theme\LabelFactory $labelFactory, array $data = array() ) { $this->_labelFactory = $labelFactory; @@ -86,7 +86,7 @@ protected function _prepareForm() /** @var \Magento\Data\Form $form */ $form = $this->_formFactory->create(array( - 'attributes' => array( + 'data' => array( 'html_id_prefix' => 'page_', )) ); diff --git a/app/code/Magento/Connect/Block/Adminhtml/Extension/Custom/Edit/Form.php b/app/code/Magento/Connect/Block/Adminhtml/Extension/Custom/Edit/Form.php index 3dc6b5bdbdb9a..f302d7aeef88c 100644 --- a/app/code/Magento/Connect/Block/Adminhtml/Extension/Custom/Edit/Form.php +++ b/app/code/Magento/Connect/Block/Adminhtml/Extension/Custom/Edit/Form.php @@ -44,7 +44,7 @@ protected function _prepareForm() { /** @var \Magento\Data\Form $form */ $form = $this->_formFactory->create(array( - 'attributes' => array( + 'data' => array( 'id' => 'edit_form', 'action' => $this->getData('action'), 'method' => 'post', diff --git a/app/code/Magento/Contacts/view/frontend/layout/contacts_index_index.xml b/app/code/Magento/Contacts/view/frontend/layout/contacts_index_index.xml index 6f4471a3afab8..d910d951a3846 100644 --- a/app/code/Magento/Contacts/view/frontend/layout/contacts_index_index.xml +++ b/app/code/Magento/Contacts/view/frontend/layout/contacts_index_index.xml @@ -24,19 +24,12 @@ */ --> + Contact Us - - - 2columns-right.phtml - - - Contact Us - - diff --git a/app/code/Magento/Core/App/Action/Plugin/Design.php b/app/code/Magento/Core/App/Action/Plugin/Design.php index 714c9c4c05f9e..8de0812655490 100644 --- a/app/code/Magento/Core/App/Action/Plugin/Design.php +++ b/app/code/Magento/Core/App/Action/Plugin/Design.php @@ -27,14 +27,14 @@ class Design { /** - * @var \Magento\Core\Model\DesignLoader + * @var \Magento\View\DesignLoader */ protected $_designLoader; /** - * @param \Magento\Core\Model\DesignLoader $designLoader + * @param \Magento\View\DesignLoader $designLoader */ - public function __construct(\Magento\Core\Model\DesignLoader $designLoader) + public function __construct(\Magento\View\DesignLoader $designLoader) { $this->_designLoader = $designLoader; } diff --git a/app/code/Magento/Core/Helper/Url.php b/app/code/Magento/Core/Helper/Url.php index b0f07d5f1b8f7..3a67e2039386d 100644 --- a/app/code/Magento/Core/Helper/Url.php +++ b/app/code/Magento/Core/Helper/Url.php @@ -130,9 +130,10 @@ public function addRequestParam($url, $param) public function removeRequestParam($url, $paramKey, $caseSensitive = false) { $regExpression = '/\\?[^#]*?(' . preg_quote($paramKey, '/') . '\\=[^#&]*&?)/' . ($caseSensitive ? '' : 'i'); - while (preg_match($regExpression, $url, $matches) != 0) { + while (preg_match($regExpression, $url, $matches) !== 0) { $paramString = $matches[1]; - if (preg_match('/&$/', $paramString) == 0) { + // if ampersand is at the end of $paramString + if (substr($paramString, -1, 1) != '&') { $url = preg_replace('/(&|\\?)?' . preg_quote($paramString, '/') . '/', '', $url); } else { $url = str_replace($paramString, '', $url); diff --git a/app/code/Magento/Core/Model/App.php b/app/code/Magento/Core/Model/App.php index bb96568d46310..edf27a95d8efb 100644 --- a/app/code/Magento/Core/Model/App.php +++ b/app/code/Magento/Core/Model/App.php @@ -53,7 +53,7 @@ class App implements \Magento\Core\Model\AppInterface /** * Magento version */ - const VERSION = '2.0.0.0-dev55'; + const VERSION = '2.0.0.0-dev56'; /** @@ -801,7 +801,7 @@ public function getVersionInfo() 'revision' => '0', 'patch' => '0', 'stability' => 'dev', - 'number' => '55', + 'number' => '56', ); } } diff --git a/app/code/Magento/Core/Model/DataService/Config/Reader.php b/app/code/Magento/Core/Model/DataService/Config/Reader.php index 71f1a287a6011..f714a3308d339 100644 --- a/app/code/Magento/Core/Model/DataService/Config/Reader.php +++ b/app/code/Magento/Core/Model/DataService/Config/Reader.php @@ -33,13 +33,11 @@ class Reader extends \Magento\Config\AbstractXml private $_modulesReader; /** - * @param \Magento\Module\Dir\Reader $moduleReader * @param array $configFiles + * @param \Magento\Module\Dir\Reader $moduleReader */ - public function __construct( - \Magento\Module\Dir\Reader $moduleReader, - array $configFiles - ) { + public function __construct(array $configFiles, \Magento\Module\Dir\Reader $moduleReader) + { if (count($configFiles)) { parent::__construct($configFiles); } diff --git a/app/code/Magento/Core/Model/File/Uploader.php b/app/code/Magento/Core/Model/File/Uploader.php index 7b70048ba12b7..22199b3253800 100644 --- a/app/code/Magento/Core/Model/File/Uploader.php +++ b/app/code/Magento/Core/Model/File/Uploader.php @@ -63,18 +63,16 @@ class Uploader extends \Magento\File\Uploader protected $_validator; /** - * Init upload - * + * @param string $fileId * @param \Magento\Core\Helper\File\Storage\Database $coreFileStorageDb * @param \Magento\Core\Helper\File\Storage $coreFileStorage * @param \Magento\Core\Model\File\Validator\NotProtectedExtension $validator - * @param $fileId */ public function __construct( + $fileId, \Magento\Core\Helper\File\Storage\Database $coreFileStorageDb, \Magento\Core\Helper\File\Storage $coreFileStorage, - \Magento\Core\Model\File\Validator\NotProtectedExtension $validator, - $fileId + \Magento\Core\Model\File\Validator\NotProtectedExtension $validator ) { $this->_coreFileStorageDb = $coreFileStorageDb; $this->_coreFileStorage = $coreFileStorage; diff --git a/app/code/Magento/Core/Model/Layout.php b/app/code/Magento/Core/Model/Layout.php index 5f06c0c3db669..dabdb6ffe58d5 100644 --- a/app/code/Magento/Core/Model/Layout.php +++ b/app/code/Magento/Core/Model/Layout.php @@ -917,7 +917,7 @@ public function getServiceCalls() * @param array $options * @throws \Magento\Exception if any of arguments are invalid */ - protected function _generateContainer($name, $label = '', array $options) + protected function _generateContainer($name, $label, array $options) { $this->_structure->setAttribute($name, Element::CONTAINER_OPT_LABEL, $label); unset($options[Element::CONTAINER_OPT_LABEL]); diff --git a/app/code/Magento/Core/Model/Layout/Argument/AbstractHandler.php b/app/code/Magento/Core/Model/Layout/Argument/AbstractHandler.php index 2c72abf591a77..b5551fc61ab19 100644 --- a/app/code/Magento/Core/Model/Layout/Argument/AbstractHandler.php +++ b/app/code/Magento/Core/Model/Layout/Argument/AbstractHandler.php @@ -33,8 +33,7 @@ */ namespace Magento\Core\Model\Layout\Argument; -abstract class AbstractHandler - implements \Magento\Core\Model\Layout\Argument\HandlerInterface +abstract class AbstractHandler implements \Magento\View\Layout\Argument\HandlerInterface { /** * @var \Magento\ObjectManager diff --git a/app/code/Magento/Core/Model/Layout/Argument/Handler/ArrayHandler.php b/app/code/Magento/Core/Model/Layout/Argument/Handler/ArrayHandler.php index 3927a804aed87..bc08284bf0505 100644 --- a/app/code/Magento/Core/Model/Layout/Argument/Handler/ArrayHandler.php +++ b/app/code/Magento/Core/Model/Layout/Argument/Handler/ArrayHandler.php @@ -36,15 +36,15 @@ class ArrayHandler extends \Magento\Core\Model\Layout\Argument\AbstractHandler { /** - * @var \Magento\Core\Model\Layout\Argument\HandlerFactory + * @var \Magento\View\Layout\Argument\HandlerFactory */ protected $_handlerFactory; /** - * @param \Magento\Core\Model\Layout\Argument\HandlerFactory $handlerFactory + * @param \Magento\View\Layout\Argument\HandlerFactory $handlerFactory */ public function __construct( - \Magento\Core\Model\Layout\Argument\HandlerFactory $handlerFactory + \Magento\View\Layout\Argument\HandlerFactory $handlerFactory ) { $this->_handlerFactory = $handlerFactory; } diff --git a/app/code/Magento/Core/Model/Layout/Argument/HandlerFactoryInterface.php b/app/code/Magento/Core/Model/Layout/Argument/HandlerFactoryInterface.php deleted file mode 100644 index 4a8ec64688470..0000000000000 --- a/app/code/Magento/Core/Model/Layout/Argument/HandlerFactoryInterface.php +++ /dev/null @@ -1,43 +0,0 @@ - - */ -namespace Magento\Core\Model\Layout\Argument; - -interface HandlerFactoryInterface -{ - /** - * Create concrete handler object - * @return \Magento\Core\Model\Layout\Argument\HandlerInterface - */ - public function createHandler(); -} diff --git a/app/code/Magento/Core/Model/Layout/Argument/Processor.php b/app/code/Magento/Core/Model/Layout/Argument/Processor.php index b4389dd83d647..b44a9e0ecc673 100644 --- a/app/code/Magento/Core/Model/Layout/Argument/Processor.php +++ b/app/code/Magento/Core/Model/Layout/Argument/Processor.php @@ -36,7 +36,7 @@ class Processor { /** - * @var \Magento\Core\Model\Layout\Argument\HandlerFactory + * @var \Magento\View\Layout\Argument\HandlerFactory */ protected $_handlerFactory; @@ -54,11 +54,11 @@ class Processor /** * @param \Magento\Core\Model\Layout\Argument\Updater $argumentUpdater - * @param \Magento\Core\Model\Layout\Argument\HandlerFactory $handlerFactory + * @param \Magento\View\Layout\Argument\HandlerFactory $handlerFactory */ public function __construct( \Magento\Core\Model\Layout\Argument\Updater $argumentUpdater, - \Magento\Core\Model\Layout\Argument\HandlerFactory $handlerFactory + \Magento\View\Layout\Argument\HandlerFactory $handlerFactory ) { $this->_handlerFactory = $handlerFactory; $this->_argumentUpdater = $argumentUpdater; diff --git a/app/code/Magento/Core/Model/Layout/Merge.php b/app/code/Magento/Core/Model/Layout/Merge.php index 3975d5a91f93d..f7c1d46684aaa 100644 --- a/app/code/Magento/Core/Model/Layout/Merge.php +++ b/app/code/Magento/Core/Model/Layout/Merge.php @@ -712,4 +712,26 @@ public function __destruct() $this->_updates = array(); $this->_layoutUpdatesCache = null; } + + /** + * @inheritdoc + */ + public function isCustomerDesignAbstraction(array $abstraction) + { + if (!isset($abstraction['design_abstraction'])) { + return false; + } + return $abstraction['design_abstraction'] === self::DESIGN_ABSTRACTION_CUSTOM; + } + + /** + * @inheritdoc + */ + public function isPageLayoutDesignAbstraction(array $abstraction) + { + if (!isset($abstraction['design_abstraction'])) { + return false; + } + return $abstraction['design_abstraction'] === self::DESIGN_ABSTRACTION_PAGE_LAYOUT; + } } diff --git a/app/code/Magento/Core/Model/Locale/Hierarchy/Config/Reader.php b/app/code/Magento/Core/Model/Locale/Hierarchy/Config/Reader.php index 998be57d93047..d2ebe44ec1e64 100644 --- a/app/code/Magento/Core/Model/Locale/Hierarchy/Config/Reader.php +++ b/app/code/Magento/Core/Model/Locale/Hierarchy/Config/Reader.php @@ -35,25 +35,34 @@ class Reader extends \Magento\Config\Reader\Filesystem ); /** - * @param \Magento\Core\Model\Locale\Hierarchy\Config\FileResolver $fileResolver - * @param \Magento\Core\Model\Locale\Hierarchy\Config\Converter $converter - * @param \Magento\Core\Model\Locale\Hierarchy\Config\SchemaLocator $schemeLocator + * @param FileResolver $fileResolver + * @param Converter $converter + * @param SchemaLocator $schemaLocator * @param \Magento\Config\ValidationStateInterface $validationState * @param string $fileName * @param array $idAttributes * @param string $domDocumentClass + * @param string $defaultScope */ public function __construct( \Magento\Core\Model\Locale\Hierarchy\Config\FileResolver $fileResolver, \Magento\Core\Model\Locale\Hierarchy\Config\Converter $converter, - \Magento\Core\Model\Locale\Hierarchy\Config\SchemaLocator $schemeLocator, + \Magento\Core\Model\Locale\Hierarchy\Config\SchemaLocator $schemaLocator, \Magento\Config\ValidationStateInterface $validationState, $fileName = 'config.xml', $idAttributes = array(), - $domDocumentClass = 'Magento\Config\Dom' + $domDocumentClass = 'Magento\Config\Dom', + $defaultScope = 'global' ) { parent::__construct( - $fileResolver, $converter, $schemeLocator, $validationState, $fileName, $idAttributes, $domDocumentClass + $fileResolver, + $converter, + $schemaLocator, + $validationState, + $fileName, + $idAttributes, + $domDocumentClass, + $defaultScope ); } } diff --git a/app/code/Magento/Core/Model/Resource/Theme/Collection.php b/app/code/Magento/Core/Model/Resource/Theme/Collection.php index 4f2a3ace42c8d..05efca13a61d9 100644 --- a/app/code/Magento/Core/Model/Resource/Theme/Collection.php +++ b/app/code/Magento/Core/Model/Resource/Theme/Collection.php @@ -29,7 +29,9 @@ */ namespace Magento\Core\Model\Resource\Theme; -class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractCollection +class Collection + extends \Magento\Core\Model\Resource\Db\Collection\AbstractCollection + implements \Magento\View\Design\Theme\Label\ListInterface, \Magento\View\Design\Theme\ListInterface { /** * Default page size @@ -216,4 +218,16 @@ public function filterThemeCustomizations( $this->addAreaFilter($area)->addTypeFilter($type); return $this; } + + /** + * @inheritdoc + */ + public function getLabels() + { + $this->_reset()->clear(); + $labels = $this->setOrder('theme_title', \Magento\Data\Collection::SORT_ORDER_ASC) + ->filterVisibleThemes() + ->addAreaFilter(\Magento\Core\Model\App\Area::AREA_FRONTEND); + return $labels->toOptionArray(); + } } diff --git a/app/code/Magento/Core/Model/Session.php b/app/code/Magento/Core/Model/Session.php index 5ad6862ad6767..dc9c435b5a94a 100644 --- a/app/code/Magento/Core/Model/Session.php +++ b/app/code/Magento/Core/Model/Session.php @@ -41,15 +41,15 @@ class Session extends \Magento\Core\Model\Session\AbstractSession * @param Session\Context $context * @param \Magento\Session\SidResolverInterface $sidResolver * @param \Magento\Session\Config\ConfigInterface $sessionConfig - * @param array $data * @param null $sessionName + * @param array $data */ public function __construct( \Magento\Core\Model\Session\Context $context, \Magento\Session\SidResolverInterface $sidResolver, - \Magento\Session\Config\ConfigInterface $sessionConfig, - array $data = array(), - $sessionName = null + \Magento\Session\Config\ConfigInterface $sessionConfig, + $sessionName = null, + array $data = array() ) { parent::__construct($context, $sidResolver, $sessionConfig, $data); $this->start('core', $sessionName); diff --git a/app/code/Magento/Core/Model/Session/Generic.php b/app/code/Magento/Core/Model/Session/Generic.php index f0404480f59f0..60d367e361fd5 100644 --- a/app/code/Magento/Core/Model/Session/Generic.php +++ b/app/code/Magento/Core/Model/Session/Generic.php @@ -30,16 +30,16 @@ class Generic extends \Magento\Core\Model\Session\AbstractSession * @param \Magento\Session\SidResolverInterface $sidResolver * @param \Magento\Session\Config\ConfigInterface $sessionConfig * @param string $sessionNamespace + * @param mixed $sessionName * @param array $data - * @param null $sessionName */ public function __construct( \Magento\Core\Model\Session\Context $context, \Magento\Session\SidResolverInterface $sidResolver, \Magento\Session\Config\ConfigInterface $sessionConfig, $sessionNamespace, - array $data = array(), - $sessionName = null + $sessionName = null, + array $data = array() ) { parent::__construct($context, $sidResolver, $sessionConfig, $data); $this->start($sessionNamespace, $sessionName); diff --git a/app/code/Magento/Core/Model/Theme/Collection.php b/app/code/Magento/Core/Model/Theme/Collection.php index d0b3f1b46b97d..6f5896b0470b7 100644 --- a/app/code/Magento/Core/Model/Theme/Collection.php +++ b/app/code/Magento/Core/Model/Theme/Collection.php @@ -29,7 +29,7 @@ */ namespace Magento\Core\Model\Theme; -class Collection extends \Magento\Data\Collection +class Collection extends \Magento\Data\Collection implements \Magento\View\Design\Theme\ListInterface { /** * @var \Magento\Filesystem @@ -350,4 +350,19 @@ public function hasTheme(\Magento\View\Design\ThemeInterface $theme) $themeItems = $this->getItems(); return $theme->getThemePath() && isset($themeItems[$theme->getFullPath()]); } + + /** + * Get theme from file system by area and theme_path + * + * @param string $fullPath + * @return \Magento\View\Design\ThemeInterface + */ + public function getThemeByFullPath($fullPath) + { + list($area, $themePath) = explode('/', $fullPath, 2); + $this->addDefaultPattern($area) + ->addFilter('theme_path', $themePath); + + return $this->getFirstItem(); + } } diff --git a/app/code/Magento/Core/Model/Theme/Domain/Physical.php b/app/code/Magento/Core/Model/Theme/Domain/Physical.php index 2a680d166eeb8..8255611b44377 100644 --- a/app/code/Magento/Core/Model/Theme/Domain/Physical.php +++ b/app/code/Magento/Core/Model/Theme/Domain/Physical.php @@ -44,7 +44,7 @@ class Physical implements \Magento\View\Design\Theme\Domain\PhysicalInterface protected $_themeFactory; /** - * @var \Magento\Core\Model\Theme\CopyService + * @var \Magento\Theme\Model\CopyService */ protected $_themeCopyService; @@ -56,13 +56,13 @@ class Physical implements \Magento\View\Design\Theme\Domain\PhysicalInterface /** * @param \Magento\View\Design\ThemeInterface $theme * @param \Magento\Core\Model\ThemeFactory $themeFactory - * @param \Magento\Core\Model\Theme\CopyService $themeCopyService + * @param \Magento\Theme\Model\CopyService $themeCopyService * @param \Magento\Core\Model\Resource\Theme\Collection $themeCollection */ public function __construct( \Magento\View\Design\ThemeInterface $theme, \Magento\Core\Model\ThemeFactory $themeFactory, - \Magento\Core\Model\Theme\CopyService $themeCopyService, + \Magento\Theme\Model\CopyService $themeCopyService, \Magento\Core\Model\Resource\Theme\Collection $themeCollection ) { $this->_theme = $theme; diff --git a/app/code/Magento/Core/Model/Theme/Domain/Staging.php b/app/code/Magento/Core/Model/Theme/Domain/Staging.php index 2d2a17582c727..09be9f75cc6b3 100644 --- a/app/code/Magento/Core/Model/Theme/Domain/Staging.php +++ b/app/code/Magento/Core/Model/Theme/Domain/Staging.php @@ -39,17 +39,17 @@ class Staging implements \Magento\View\Design\Theme\Domain\StagingInterface protected $_theme; /** - * @var \Magento\Core\Model\Theme\CopyService + * @var \Magento\Theme\Model\CopyService */ protected $_themeCopyService; /** * @param \Magento\View\Design\ThemeInterface $theme - * @param \Magento\Core\Model\Theme\CopyService $themeCopyService + * @param \Magento\Theme\Model\CopyService $themeCopyService */ public function __construct( \Magento\View\Design\ThemeInterface $theme, - \Magento\Core\Model\Theme\CopyService $themeCopyService + \Magento\Theme\Model\CopyService $themeCopyService ) { $this->_theme = $theme; $this->_themeCopyService = $themeCopyService; diff --git a/app/code/Magento/Core/Model/Theme/Domain/Virtual.php b/app/code/Magento/Core/Model/Theme/Domain/Virtual.php index f538989e18cea..0cd748f576eec 100644 --- a/app/code/Magento/Core/Model/Theme/Domain/Virtual.php +++ b/app/code/Magento/Core/Model/Theme/Domain/Virtual.php @@ -51,7 +51,7 @@ class Virtual implements \Magento\View\Design\Theme\Domain\VirtualInterface protected $_stagingTheme; /** - * @var \Magento\Core\Model\Theme\CopyService + * @var \Magento\Theme\Model\CopyService */ protected $_themeCopyService; @@ -65,13 +65,13 @@ class Virtual implements \Magento\View\Design\Theme\Domain\VirtualInterface /** * @param \Magento\View\Design\ThemeInterface $theme * @param \Magento\Core\Model\ThemeFactory $themeFactory - * @param \Magento\Core\Model\Theme\CopyService $themeCopyService + * @param \Magento\Theme\Model\CopyService $themeCopyService * @param \Magento\Theme\Model\Config\Customization $customizationConfig */ public function __construct( \Magento\View\Design\ThemeInterface $theme, \Magento\Core\Model\ThemeFactory $themeFactory, - \Magento\Core\Model\Theme\CopyService $themeCopyService, + \Magento\Theme\Model\CopyService $themeCopyService, \Magento\Theme\Model\Config\Customization $customizationConfig ) { $this->_theme = $theme; diff --git a/app/code/Magento/Core/Model/Theme/Source/Theme.php b/app/code/Magento/Core/Model/Theme/Source/Theme.php index 5a65bd8d86bec..9fb385ada9e35 100644 --- a/app/code/Magento/Core/Model/Theme/Source/Theme.php +++ b/app/code/Magento/Core/Model/Theme/Source/Theme.php @@ -29,7 +29,7 @@ */ namespace Magento\Core\Model\Theme\Source; -use Magento\Core\Model\Theme\Label; +use Magento\View\Design\Theme\Label; use Magento\Eav\Model\Entity\Attribute\Source\AbstractSource; /** @@ -40,12 +40,12 @@ class Theme extends AbstractSource { /** - * @var Label + * @var \Magento\View\Design\Theme\Label */ protected $themeLabel; /** - * @param Label $themeLabel + * @param \Magento\View\Design\Theme\Label $themeLabel */ public function __construct(Label $themeLabel) { diff --git a/app/code/Magento/Core/Model/View/Design.php b/app/code/Magento/Core/Model/View/Design.php index b35fc64bacf14..9079857446aac 100644 --- a/app/code/Magento/Core/Model/View/Design.php +++ b/app/code/Magento/Core/Model/View/Design.php @@ -31,25 +31,6 @@ class Design implements \Magento\View\DesignInterface { - /** - * Common node path to theme design configuration - */ - const XML_PATH_THEME_ID = 'design/theme/theme_id'; - - /** - * Regular expressions matches cache - * - * @var array - */ - private static $_regexMatchCache = array(); - - /** - * Custom theme type cache - * - * @var array - */ - private static $_customThemeTypeCache = array(); - /** * Package area * @@ -253,33 +234,6 @@ public function getDesignTheme() return $this->_theme; } - /** - * Return package name based on design exception rules - * - * @param array $rules - design exception rules - * @param string $regexpsConfigPath - * @return bool|string - */ - public static function getPackageByUserAgent(array $rules, $regexpsConfigPath = 'path_mock') - { - foreach ($rules as $rule) { - if (!empty(self::$_regexMatchCache[$rule['regexp']][$_SERVER['HTTP_USER_AGENT']])) { - self::$_customThemeTypeCache[$regexpsConfigPath] = $rule['value']; - return $rule['value']; - } - - $regexp = '/' . trim($rule['regexp'], '/') . '/'; - - if (@preg_match($regexp, $_SERVER['HTTP_USER_AGENT'])) { - self::$_regexMatchCache[$rule['regexp']][$_SERVER['HTTP_USER_AGENT']] = true; - self::$_customThemeTypeCache[$regexpsConfigPath] = $rule['value']; - return $rule['value']; - } - } - - return false; - } - /** * {@inheritdoc} */ diff --git a/app/code/Magento/Core/etc/di.xml b/app/code/Magento/Core/etc/di.xml index e7c79712c206b..992533f8b1c10 100644 --- a/app/code/Magento/Core/etc/di.xml +++ b/app/code/Magento/Core/etc/di.xml @@ -415,31 +415,31 @@ - + page_types.xml - + - + frontend - + - + page_types_config - + - + diff --git a/app/design/frontend/magento_plushe/Magento_Core/template.phtml b/app/code/Magento/Core/view/frontend/template.phtml similarity index 100% rename from app/design/frontend/magento_plushe/Magento_Core/template.phtml rename to app/code/Magento/Core/view/frontend/template.phtml diff --git a/app/code/Magento/Cron/Model/Config/Reader/Xml.php b/app/code/Magento/Cron/Model/Config/Reader/Xml.php index 31e062270e811..5901d9fc5d412 100644 --- a/app/code/Magento/Cron/Model/Config/Reader/Xml.php +++ b/app/code/Magento/Cron/Model/Config/Reader/Xml.php @@ -41,15 +41,14 @@ class Xml extends \Magento\Config\Reader\Filesystem ); /** - * Initialize parameters - * - * @param \Magento\Config\FileResolverInterface $fileResolver + * @param \Magento\Config\FileResolverInterface $fileResolver * @param \Magento\Cron\Model\Config\Converter\Xml $converter * @param \Magento\Cron\Model\Config\SchemaLocator $schemaLocator * @param \Magento\Config\ValidationStateInterface $validationState - * @param string $fileName - * @param array $idAttributes - * @param string $domDocumentClass + * @param string $fileName + * @param array $idAttributes + * @param string $domDocumentClass + * @param string $defaultScope */ public function __construct( \Magento\Config\FileResolverInterface $fileResolver, @@ -58,10 +57,18 @@ public function __construct( \Magento\Config\ValidationStateInterface $validationState, $fileName = 'crontab.xml', $idAttributes = array(), - $domDocumentClass = 'Magento\Config\Dom' + $domDocumentClass = 'Magento\Config\Dom', + $defaultScope = 'global' ) { parent::__construct( - $fileResolver, $converter, $schemaLocator, $validationState, $fileName, $idAttributes, $domDocumentClass + $fileResolver, + $converter, + $schemaLocator, + $validationState, + $fileName, + $idAttributes, + $domDocumentClass, + $defaultScope ); } } diff --git a/app/code/Magento/Customer/Block/Adminhtml/Edit/Form.php b/app/code/Magento/Customer/Block/Adminhtml/Edit/Form.php index 0b41cfa26b474..1b0b096ddd169 100644 --- a/app/code/Magento/Customer/Block/Adminhtml/Edit/Form.php +++ b/app/code/Magento/Customer/Block/Adminhtml/Edit/Form.php @@ -35,7 +35,7 @@ protected function _prepareForm() { /** @var \Magento\Data\Form $form */ $form = $this->_formFactory->create(array( - 'attributes' => array( + 'data' => array( 'id' => 'edit_form', 'action' => $this->getUrl('customer/*/save'), 'method' => 'post', diff --git a/app/code/Magento/Customer/Block/Adminhtml/Form/Element/File.php b/app/code/Magento/Customer/Block/Adminhtml/Form/Element/File.php index 4ffb6c7c98945..1aee33aa2fc90 100644 --- a/app/code/Magento/Customer/Block/Adminhtml/Form/Element/File.php +++ b/app/code/Magento/Customer/Block/Adminhtml/Form/Element/File.php @@ -49,24 +49,24 @@ class File extends \Magento\Data\Form\Element\AbstractElement protected $_adminhtmlData = null; /** - * @param \Magento\Escaper $escaper * @param \Magento\Data\Form\Element\Factory $factoryElement * @param \Magento\Data\Form\Element\CollectionFactory $factoryCollection + * @param \Magento\Escaper $escaper * @param \Magento\Backend\Helper\Data $adminhtmlData * @param \Magento\View\Url $viewUrl - * @param array $attributes + * @param array $data */ - public function __construct( - \Magento\Escaper $escaper, + public function __construct( \Magento\Data\Form\Element\Factory $factoryElement, \Magento\Data\Form\Element\CollectionFactory $factoryCollection, + \Magento\Escaper $escaper, \Magento\Backend\Helper\Data $adminhtmlData, \Magento\View\Url $viewUrl, - $attributes = array() + $data = array() ) { $this->_adminhtmlData = $adminhtmlData; $this->_viewUrl = $viewUrl; - parent::__construct($escaper, $factoryElement, $factoryCollection, $attributes); + parent::__construct($factoryElement, $factoryCollection, $escaper, $data); $this->setType('file'); } diff --git a/app/code/Magento/Customer/Model/Session.php b/app/code/Magento/Customer/Model/Session.php index d10c2400f54c8..467ef6584f8c2 100644 --- a/app/code/Magento/Customer/Model/Session.php +++ b/app/code/Magento/Customer/Model/Session.php @@ -88,15 +88,15 @@ class Session extends \Magento\Core\Model\Session\AbstractSession * @param \Magento\Core\Model\Session\Context $context * @param \Magento\Session\SidResolverInterface $sidResolver * @param \Magento\Session\Config\ConfigInterface $sessionConfig - * @param \Magento\Customer\Model\Config\Share $configShare + * @param Config\Share $configShare * @param \Magento\Core\Helper\Url $coreUrl * @param \Magento\Customer\Helper\Data $customerData - * @param \Magento\Customer\Model\Resource\Customer $customerResource - * @param \Magento\Customer\Model\CustomerFactory $customerFactory + * @param Resource\Customer $customerResource + * @param CustomerFactory $customerFactory * @param \Magento\Core\Model\UrlFactory $urlFactory * @param \Magento\Core\Model\Session $session - * @param array $data * @param null $sessionName + * @param array $data */ public function __construct( \Magento\Core\Model\Session\Context $context, @@ -109,8 +109,8 @@ public function __construct( \Magento\Customer\Model\CustomerFactory $customerFactory, \Magento\Core\Model\UrlFactory $urlFactory, \Magento\Core\Model\Session $session, - array $data = array(), - $sessionName = null + $sessionName = null, + array $data = array() ) { $this->_coreUrl = $coreUrl; $this->_customerData = $customerData; diff --git a/app/design/frontend/magento_plushe/Magento_Customer/account/customer.phtml b/app/code/Magento/Customer/view/frontend/account/customer.phtml similarity index 95% rename from app/design/frontend/magento_plushe/Magento_Customer/account/customer.phtml rename to app/code/Magento/Customer/view/frontend/account/customer.phtml index f158025e4468a..3c867adcf236b 100644 --- a/app/design/frontend/magento_plushe/Magento_Customer/account/customer.phtml +++ b/app/code/Magento/Customer/view/frontend/account/customer.phtml @@ -29,9 +29,9 @@ getCustomerName(); ?> getChildHtml()):?> - + +
    diff --git a/app/code/Magento/Customer/view/frontend/form/confirmation.phtml b/app/code/Magento/Customer/view/frontend/form/confirmation.phtml index 1956b26aa8c7b..846c7e3355d60 100644 --- a/app/code/Magento/Customer/view/frontend/form/confirmation.phtml +++ b/app/code/Magento/Customer/view/frontend/form/confirmation.phtml @@ -29,7 +29,7 @@ diff --git a/app/code/Magento/Customer/view/frontend/form/edit.phtml b/app/code/Magento/Customer/view/frontend/form/edit.phtml index 2aa77595ea1a6..5a2abcf2e3272 100644 --- a/app/code/Magento/Customer/view/frontend/form/edit.phtml +++ b/app/code/Magento/Customer/view/frontend/form/edit.phtml @@ -31,7 +31,7 @@ getLayout()->createBlock('Magento\Customer\Block\Widget\Dob') ?> diff --git a/app/code/Magento/Customer/view/frontend/form/forgotpassword.phtml b/app/code/Magento/Customer/view/frontend/form/forgotpassword.phtml index 48cd1f7dee449..1e1a42e50a9e9 100644 --- a/app/code/Magento/Customer/view/frontend/form/forgotpassword.phtml +++ b/app/code/Magento/Customer/view/frontend/form/forgotpassword.phtml @@ -29,7 +29,7 @@ getChildHtml('form_additional_info'); ?> diff --git a/app/code/Magento/Customer/view/frontend/form/login.phtml b/app/code/Magento/Customer/view/frontend/form/login.phtml index 374fc86688ef3..407bdd903296c 100644 --- a/app/code/Magento/Customer/view/frontend/form/login.phtml +++ b/app/code/Magento/Customer/view/frontend/form/login.phtml @@ -39,7 +39,7 @@
    diff --git a/app/code/Magento/Customer/view/frontend/form/register.phtml b/app/code/Magento/Customer/view/frontend/form/register.phtml index 23feacec27fa4..ec373e3133330 100644 --- a/app/code/Magento/Customer/view/frontend/form/register.phtml +++ b/app/code/Magento/Customer/view/frontend/form/register.phtml @@ -42,7 +42,7 @@
    - +
    isNewsletterEnabled()): ?> diff --git a/app/code/Magento/Customer/view/frontend/layout/customer_account.xml b/app/code/Magento/Customer/view/frontend/layout/customer_account.xml index 6a4ef38b38634..cdb1ff1405e39 100644 --- a/app/code/Magento/Customer/view/frontend/layout/customer_account.xml +++ b/app/code/Magento/Customer/view/frontend/layout/customer_account.xml @@ -24,9 +24,12 @@ */ --> - - - + + + + account + + diff --git a/app/code/Magento/Customer/view/frontend/layout/customer_address_form.xml b/app/code/Magento/Customer/view/frontend/layout/customer_address_form.xml index c4faa5b6d62f2..2ce6bfeaa3799 100644 --- a/app/code/Magento/Customer/view/frontend/layout/customer_address_form.xml +++ b/app/code/Magento/Customer/view/frontend/layout/customer_address_form.xml @@ -25,6 +25,11 @@ --> + + + true + + diff --git a/app/code/Magento/Customer/view/frontend/layout/default.xml b/app/code/Magento/Customer/view/frontend/layout/default.xml index aefd5ecf386c4..be8d4da7aa04a 100644 --- a/app/code/Magento/Customer/view/frontend/layout/default.xml +++ b/app/code/Magento/Customer/view/frontend/layout/default.xml @@ -30,6 +30,11 @@ My Account + + + Register + + diff --git a/app/code/Magento/DesignEditor/Block/Adminhtml/Editor/Form/Element/Composite/AbstractComposite.php b/app/code/Magento/DesignEditor/Block/Adminhtml/Editor/Form/Element/Composite/AbstractComposite.php index 69e5010302bc2..a6e3f430b034a 100644 --- a/app/code/Magento/DesignEditor/Block/Adminhtml/Editor/Form/Element/Composite/AbstractComposite.php +++ b/app/code/Magento/DesignEditor/Block/Adminhtml/Editor/Form/Element/Composite/AbstractComposite.php @@ -70,25 +70,25 @@ abstract class AbstractComposite protected $_elementsFactory; /** - * @param \Magento\Escaper $escaper * @param \Magento\Data\Form\Element\Factory $factoryElement * @param \Magento\Data\Form\Element\CollectionFactory $factoryCollection + * @param \Magento\Escaper $escaper * @param \Magento\DesignEditor\Model\Editor\Tools\QuickStyles\Form\Element\Factory $elementsFactory * @param \Magento\DesignEditor\Model\Editor\Tools\QuickStyles\Form\Renderer\Factory $rendererFactory - * @param array $attributes + * @param array $data */ public function __construct( - \Magento\Escaper $escaper, \Magento\Data\Form\Element\Factory $factoryElement, \Magento\Data\Form\Element\CollectionFactory $factoryCollection, + \Magento\Escaper $escaper, \Magento\DesignEditor\Model\Editor\Tools\QuickStyles\Form\Element\Factory $elementsFactory, \Magento\DesignEditor\Model\Editor\Tools\QuickStyles\Form\Renderer\Factory $rendererFactory, - $attributes = array() + $data = array() ) { $this->_elementsFactory = $elementsFactory; $this->_rendererFactory = $rendererFactory; - parent::__construct($escaper, $factoryElement, $factoryCollection, $attributes); + parent::__construct($factoryElement, $factoryCollection, $escaper, $data); } /** diff --git a/app/code/Magento/DesignEditor/Block/Adminhtml/Editor/Tools/Code/Custom.php b/app/code/Magento/DesignEditor/Block/Adminhtml/Editor/Tools/Code/Custom.php index c8694d00acfb1..43b3fbb410093 100644 --- a/app/code/Magento/DesignEditor/Block/Adminhtml/Editor/Tools/Code/Custom.php +++ b/app/code/Magento/DesignEditor/Block/Adminhtml/Editor/Tools/Code/Custom.php @@ -71,7 +71,7 @@ protected function _prepareForm() { /** @var \Magento\Data\Form $form */ $form = $this->_formFactory->create(array( - 'attributes' => array( + 'data' => array( 'action' => '#', 'method' => 'post', )) diff --git a/app/code/Magento/DesignEditor/Block/Adminhtml/Editor/Tools/Code/ImageSizing.php b/app/code/Magento/DesignEditor/Block/Adminhtml/Editor/Tools/Code/ImageSizing.php index 09593dcd3ea92..e579b83550679 100644 --- a/app/code/Magento/DesignEditor/Block/Adminhtml/Editor/Tools/Code/ImageSizing.php +++ b/app/code/Magento/DesignEditor/Block/Adminhtml/Editor/Tools/Code/ImageSizing.php @@ -92,7 +92,7 @@ protected function _prepareForm() { /** @var \Magento\Data\Form $form */ $form = $this->_formFactory->create(array( - 'attributes' => array( + 'data' => array( 'action' => '#', 'method' => 'post', )) diff --git a/app/code/Magento/DesignEditor/Block/Adminhtml/Editor/Tools/Code/Js.php b/app/code/Magento/DesignEditor/Block/Adminhtml/Editor/Tools/Code/Js.php index 041d724c04dee..44a78d00eed2d 100644 --- a/app/code/Magento/DesignEditor/Block/Adminhtml/Editor/Tools/Code/Js.php +++ b/app/code/Magento/DesignEditor/Block/Adminhtml/Editor/Tools/Code/Js.php @@ -73,7 +73,7 @@ protected function _prepareForm() { /** @var \Magento\Data\Form $form */ $form = $this->_formFactory->create(array( - 'attributes' => array( + 'data' => array( 'action' => '#', 'method' => 'post', )) diff --git a/app/code/Magento/DesignEditor/Controller/Adminhtml/System/Design/Editor.php b/app/code/Magento/DesignEditor/Controller/Adminhtml/System/Design/Editor.php index b4ecc0e88584c..6176e5fb19642 100644 --- a/app/code/Magento/DesignEditor/Controller/Adminhtml/System/Design/Editor.php +++ b/app/code/Magento/DesignEditor/Controller/Adminhtml/System/Design/Editor.php @@ -272,8 +272,8 @@ public function duplicateAction() $themeId = (int)$this->getRequest()->getParam('theme_id'); /** @var $themeCopy \Magento\View\Design\ThemeInterface */ $themeCopy = $this->_objectManager->create('Magento\View\Design\ThemeInterface'); - /** @var $copyService \Magento\Core\Model\Theme\CopyService */ - $copyService = $this->_objectManager->get('Magento\Core\Model\Theme\CopyService'); + /** @var $copyService \Magento\Theme\Model\CopyService */ + $copyService = $this->_objectManager->get('Magento\Theme\Model\CopyService'); try { $theme = $this->_loadThemeById($themeId); if (!$theme->isVirtual()) { @@ -314,8 +314,8 @@ public function revertAction() } try { - /** @var $copyService \Magento\Core\Model\Theme\CopyService */ - $copyService = $this->_objectManager->get('Magento\Core\Model\Theme\CopyService'); + /** @var $copyService \Magento\Theme\Model\CopyService */ + $copyService = $this->_objectManager->get('Magento\Theme\Model\CopyService'); $stagingTheme = $virtualTheme->getDomainModel(\Magento\View\Design\ThemeInterface::TYPE_VIRTUAL) ->getStagingTheme(); switch ($revertTo) { diff --git a/app/code/Magento/DesignEditor/Controller/Varien/Router/Standard.php b/app/code/Magento/DesignEditor/Controller/Varien/Router/Standard.php index b537723770320..59a2736d00b7d 100644 --- a/app/code/Magento/DesignEditor/Controller/Varien/Router/Standard.php +++ b/app/code/Magento/DesignEditor/Controller/Varien/Router/Standard.php @@ -63,10 +63,12 @@ class Standard extends \Magento\Core\App\Router\Base * @param \Magento\Core\Model\StoreManagerInterface $storeManager * @param \Magento\Core\Model\Store\Config $storeConfig * @param \Magento\Core\Model\Url\SecurityInfoInterface $urlSecurityInfo + * @param string $routerId * @param \Magento\App\RouterListInterface $routerList * @param \Magento\ObjectManager $objectManager * @param \Magento\Core\App\Request\RewriteService $urlRewriteService - * @param $routerId + * + * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( \Magento\App\ActionFactory $actionFactory, @@ -78,14 +80,22 @@ public function __construct( \Magento\Core\Model\StoreManagerInterface $storeManager, \Magento\Core\Model\Store\Config $storeConfig, \Magento\Core\Model\Url\SecurityInfoInterface $urlSecurityInfo, + $routerId, \Magento\App\RouterListInterface $routerList, \Magento\ObjectManager $objectManager, - \Magento\Core\App\Request\RewriteService $urlRewriteService, - $routerId + \Magento\Core\App\Request\RewriteService $urlRewriteService ) { parent::__construct( - $actionFactory, $defaultPath, $responseFactory, $routeConfig, $appState, $url, $storeManager, $storeConfig, - $urlSecurityInfo, $routerId + $actionFactory, + $defaultPath, + $responseFactory, + $routeConfig, + $appState, + $url, + $storeManager, + $storeConfig, + $urlSecurityInfo, + $routerId ); $this->_urlRewriteService = $urlRewriteService; $this->_objectManager = $objectManager; diff --git a/app/code/Magento/DesignEditor/Model/Editor/Tools/QuickStyles/Form/Builder.php b/app/code/Magento/DesignEditor/Model/Editor/Tools/QuickStyles/Form/Builder.php index d622780ec6c7f..604a3f8153bfb 100644 --- a/app/code/Magento/DesignEditor/Model/Editor/Tools/QuickStyles/Form/Builder.php +++ b/app/code/Magento/DesignEditor/Model/Editor/Tools/QuickStyles/Form/Builder.php @@ -103,7 +103,7 @@ public function create(array $data = array()) if ($isFilePresent) { /** @var $form \Magento\Data\Form */ $form = $this->_formFactory->create(array( - 'attributes' => $data, + 'data' => $data, )); $this->_addElementTypes($form); @@ -112,7 +112,7 @@ public function create(array $data = array()) $this->_populateColumns($columns, $data['tab']); } else { $form = $this->_formFactory->create(array( - 'attributes' => array( + 'data' => array( 'action' => '#', )) ); diff --git a/app/code/Magento/DesignEditor/Model/Editor/Tools/QuickStyles/Form/Element/Factory.php b/app/code/Magento/DesignEditor/Model/Editor/Tools/QuickStyles/Form/Element/Factory.php index 9ed53b372899d..1b2f9bcfd447a 100644 --- a/app/code/Magento/DesignEditor/Model/Editor/Tools/QuickStyles/Form/Element/Factory.php +++ b/app/code/Magento/DesignEditor/Model/Editor/Tools/QuickStyles/Form/Element/Factory.php @@ -48,6 +48,6 @@ public function __construct(\Magento\ObjectManager $objectManager) */ public function create($className, array $data = array()) { - return $this->_objectManager->create($className, array('attributes' => $data)); + return $this->_objectManager->create($className, array('data' => $data)); } } diff --git a/app/code/Magento/DesignEditor/Model/State.php b/app/code/Magento/DesignEditor/Model/State.php index 51081a97d5212..72f2352985991 100644 --- a/app/code/Magento/DesignEditor/Model/State.php +++ b/app/code/Magento/DesignEditor/Model/State.php @@ -191,11 +191,11 @@ protected function _setTheme() if ($this->_themeContext->getEditableTheme()) { $themeId = $this->_themeContext->getVisibleTheme()->getId(); $this->_application->getStore()->setConfig( - \Magento\Core\Model\View\Design::XML_PATH_THEME_ID, + \Magento\View\DesignInterface::XML_PATH_THEME_ID, $themeId ); $this->_application->getConfig()->setValue( - \Magento\Core\Model\View\Design::XML_PATH_THEME_ID, + \Magento\View\DesignInterface::XML_PATH_THEME_ID, $themeId ); } diff --git a/app/code/Magento/DesignEditor/Model/Theme/Context.php b/app/code/Magento/DesignEditor/Model/Theme/Context.php index c98c55ecb9e72..3bc3d6e70ccd3 100644 --- a/app/code/Magento/DesignEditor/Model/Theme/Context.php +++ b/app/code/Magento/DesignEditor/Model/Theme/Context.php @@ -37,7 +37,7 @@ class Context protected $_themeFactory; /** - * @var \Magento\Core\Model\Theme\CopyService + * @var \Magento\Theme\Model\CopyService */ protected $_copyService; @@ -55,11 +55,11 @@ class Context * Initialize dependencies * * @param \Magento\Core\Model\ThemeFactory $themeFactory - * @param \Magento\Core\Model\Theme\CopyService $copyService + * @param \Magento\Theme\Model\CopyService $copyService */ public function __construct( \Magento\Core\Model\ThemeFactory $themeFactory, - \Magento\Core\Model\Theme\CopyService $copyService + \Magento\Theme\Model\CopyService $copyService ) { $this->_themeFactory = $themeFactory; $this->_copyService = $copyService; diff --git a/app/code/Magento/DesignEditor/Model/Url/NavigationMode.php b/app/code/Magento/DesignEditor/Model/Url/NavigationMode.php index 2892d3c061203..6ed4970bc953f 100644 --- a/app/code/Magento/DesignEditor/Model/Url/NavigationMode.php +++ b/app/code/Magento/DesignEditor/Model/Url/NavigationMode.php @@ -56,25 +56,27 @@ class NavigationMode extends \Magento\Core\Model\Url * @param \Magento\App\Route\ConfigInterface $routeConfig * @param \Magento\App\RequestInterface $request * @param \Magento\Core\Model\Url\SecurityInfoInterface $urlSecurityInfo - * @param \Magento\DesignEditor\Helper\Data $helper * @param \Magento\Core\Model\Store\Config $coreStoreConfig * @param \Magento\Core\Model\App $app * @param \Magento\Core\Model\StoreManagerInterface $storeManager * @param \Magento\Core\Model\Session $session * @param \Magento\Session\SidResolverInterface $sidResolver + * @param \Magento\DesignEditor\Helper\Data $helper * @param string $areaCode * @param array $data + * + * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( \Magento\App\Route\ConfigInterface $routeConfig, \Magento\App\RequestInterface $request, \Magento\Core\Model\Url\SecurityInfoInterface $urlSecurityInfo, - \Magento\DesignEditor\Helper\Data $helper, \Magento\Core\Model\Store\Config $coreStoreConfig, \Magento\Core\Model\App $app, \Magento\Core\Model\StoreManagerInterface $storeManager, \Magento\Core\Model\Session $session, \Magento\Session\SidResolverInterface $sidResolver, + \Magento\DesignEditor\Helper\Data $helper, $areaCode, array $data = array() ) { diff --git a/app/code/Magento/DesignEditor/etc/di.xml b/app/code/Magento/DesignEditor/etc/di.xml index a9748f13bb728..8a56ee6004c13 100644 --- a/app/code/Magento/DesignEditor/etc/di.xml +++ b/app/code/Magento/DesignEditor/etc/di.xml @@ -29,7 +29,7 @@ vde - + diff --git a/app/code/Magento/Downloadable/Model/Product/Price.php b/app/code/Magento/Downloadable/Model/Product/Price.php index bd46745082d53..28f3ceae35133 100644 --- a/app/code/Magento/Downloadable/Model/Product/Price.php +++ b/app/code/Magento/Downloadable/Model/Product/Price.php @@ -42,7 +42,7 @@ class Price extends \Magento\Catalog\Model\Product\Type\Price * @param \Magento\Catalog\Model\Product $product * @return float */ - public function getFinalPrice($qty=null, $product) + public function getFinalPrice($qty, $product) { if (is_null($qty) && !is_null($product->getCalculatedFinalPrice())) { return $product->getCalculatedFinalPrice(); diff --git a/app/code/Magento/Downloadable/view/frontend/customer/products/list.phtml b/app/code/Magento/Downloadable/view/frontend/customer/products/list.phtml index 4e6157bf2eb9d..c0e12644d00d9 100644 --- a/app/code/Magento/Downloadable/view/frontend/customer/products/list.phtml +++ b/app/code/Magento/Downloadable/view/frontend/customer/products/list.phtml @@ -61,7 +61,7 @@ -

    +
    getChildHtml('pager'); ?> diff --git a/app/code/Magento/Downloadable/view/frontend/layout/downloadable_customer_products.xml b/app/code/Magento/Downloadable/view/frontend/layout/downloadable_customer_products.xml index a4616435e4e40..feeee4aa3fa43 100644 --- a/app/code/Magento/Downloadable/view/frontend/layout/downloadable_customer_products.xml +++ b/app/code/Magento/Downloadable/view/frontend/layout/downloadable_customer_products.xml @@ -25,7 +25,7 @@ --> - + diff --git a/app/code/Magento/Eav/Block/Adminhtml/Attribute/Edit/Main/AbstractMain.php b/app/code/Magento/Eav/Block/Adminhtml/Attribute/Edit/Main/AbstractMain.php index e7483e0fbb562..5a516296e923c 100644 --- a/app/code/Magento/Eav/Block/Adminhtml/Attribute/Edit/Main/AbstractMain.php +++ b/app/code/Magento/Eav/Block/Adminhtml/Attribute/Edit/Main/AbstractMain.php @@ -116,7 +116,7 @@ protected function _prepareForm() /** @var \Magento\Data\Form $form */ $form = $this->_formFactory->create(array( - 'attributes' => array( + 'data' => array( 'id' => 'edit_form', 'action' => $this->getData('action'), 'method' => 'post', diff --git a/app/code/Magento/Eav/Model/Attribute/Data/Multiselect.php b/app/code/Magento/Eav/Model/Attribute/Data/Multiselect.php index d65cfdd4a7684..acab8a8935b9d 100644 --- a/app/code/Magento/Eav/Model/Attribute/Data/Multiselect.php +++ b/app/code/Magento/Eav/Model/Attribute/Data/Multiselect.php @@ -82,6 +82,7 @@ public function outputValue($format = \Magento\Eav\Model\AttributeDataFactory::O case \Magento\Eav\Model\AttributeDataFactory::OUTPUT_FORMAT_JSON: case \Magento\Eav\Model\AttributeDataFactory::OUTPUT_FORMAT_ARRAY: $output = $values; + // fall-through intentional default: $output = array(); foreach ($values as $value) { diff --git a/app/code/Magento/Email/Model/Sender.php b/app/code/Magento/Email/Model/Sender.php index 1f4b58e3c74cc..b3b93de453d2f 100644 --- a/app/code/Magento/Email/Model/Sender.php +++ b/app/code/Magento/Email/Model/Sender.php @@ -68,7 +68,7 @@ public function __construct( * @param int $storeId * @return \Magento\Email\Model\Sender */ - public function send($email, $name, $template, $sender, $templateParams = array(), $storeId) + public function send($email, $name, $template, $sender, $templateParams, $storeId) { $this->_store->load($storeId); $this->_emailInfo->addTo($email, $name); diff --git a/app/code/Magento/Email/Model/Template/Config/Reader.php b/app/code/Magento/Email/Model/Template/Config/Reader.php index dd27e292f98ce..3c52bbf0b5949 100644 --- a/app/code/Magento/Email/Model/Template/Config/Reader.php +++ b/app/code/Magento/Email/Model/Template/Config/Reader.php @@ -33,25 +33,36 @@ class Reader extends \Magento\Config\Reader\Filesystem private $_moduleDirResolver; /** - * @param \Magento\Config\FileResolverInterface $fileResolver - * @param \Magento\Email\Model\Template\Config\Converter $converter - * @param \Magento\Email\Model\Template\Config\SchemaLocator $schemaLocator - * @param \Magento\Config\ValidationStateInterface $validationState - * @param \Magento\Module\Dir\ReverseResolver $moduleDirResolver + * List of id attributes for merge + * + * @var array */ + protected $_idAttributes = array( + '/config/template' => 'id', + ); + public function __construct( \Magento\Config\FileResolverInterface $fileResolver, \Magento\Email\Model\Template\Config\Converter $converter, \Magento\Email\Model\Template\Config\SchemaLocator $schemaLocator, \Magento\Config\ValidationStateInterface $validationState, - \Magento\Module\Dir\ReverseResolver $moduleDirResolver + \Magento\Module\Dir\ReverseResolver $moduleDirResolver, + $fileName = 'email_templates.xml', + $idAttributes = array(), + $domDocumentClass = 'Magento\Config\Dom', + $defaultScope = 'global' ) { - $fileName = 'email_templates.xml'; - $idAttributes = array( - '/config/template' => 'id', - ); - parent::__construct($fileResolver, $converter, $schemaLocator, $validationState, $fileName, $idAttributes); $this->_moduleDirResolver = $moduleDirResolver; + parent::__construct( + $fileResolver, + $converter, + $schemaLocator, + $validationState, + $fileName, + $idAttributes, + $domDocumentClass, + $defaultScope + ); } /** diff --git a/app/code/Magento/Email/Model/Template/Filter.php b/app/code/Magento/Email/Model/Template/Filter.php index cfdcf34c7ad93..cce841106a2f9 100644 --- a/app/code/Magento/Email/Model/Template/Filter.php +++ b/app/code/Magento/Email/Model/Template/Filter.php @@ -121,7 +121,6 @@ class Filter extends \Magento\Filter\Template protected $_appState; /** - * @SuppressWarnings(PHPMD.ExcessiveParameterList) * @param \Magento\Stdlib\String $string * @param \Magento\Logger $logger * @param \Magento\Escaper $escaper @@ -132,6 +131,9 @@ class Filter extends \Magento\Filter\Template * @param \Magento\View\LayoutInterface $layout * @param \Magento\View\LayoutFactory $layoutFactory * @param \Magento\App\State $appState + * @param array $variables + * + * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( \Magento\Stdlib\String $string, @@ -143,7 +145,8 @@ public function __construct( \Magento\Core\Model\StoreManagerInterface $storeManager, \Magento\View\LayoutInterface $layout, \Magento\View\LayoutFactory $layoutFactory, - \Magento\App\State $appState + \Magento\App\State $appState, + $variables = array() ) { $this->_escaper = $escaper; $this->_viewUrl = $viewUrl; @@ -155,7 +158,7 @@ public function __construct( $this->_layout = $layout; $this->_layoutFactory = $layoutFactory; $this->_appState = $appState; - parent::__construct($string); + parent::__construct($string, $variables); } /** diff --git a/app/code/Magento/GiftMessage/Block/Adminhtml/Product/Helper/Form/Config.php b/app/code/Magento/GiftMessage/Block/Adminhtml/Product/Helper/Form/Config.php index a66753612c8da..ee3ee63b86746 100644 --- a/app/code/Magento/GiftMessage/Block/Adminhtml/Product/Helper/Form/Config.php +++ b/app/code/Magento/GiftMessage/Block/Adminhtml/Product/Helper/Form/Config.php @@ -44,21 +44,21 @@ class Config protected $_coreStoreConfig; /** - * @param \Magento\Escaper $escaper * @param \Magento\Data\Form\Element\Factory $factoryElement * @param \Magento\Data\Form\Element\CollectionFactory $factoryCollection + * @param \Magento\Escaper $escaper * @param \Magento\Core\Model\Store\Config $coreStoreConfig - * @param array $attributes + * @param array $data */ public function __construct( - \Magento\Escaper $escaper, \Magento\Data\Form\Element\Factory $factoryElement, \Magento\Data\Form\Element\CollectionFactory $factoryCollection, + \Magento\Escaper $escaper, \Magento\Core\Model\Store\Config $coreStoreConfig, - $attributes = array() + $data = array() ) { $this->_coreStoreConfig = $coreStoreConfig; - parent::__construct($escaper, $factoryElement, $factoryCollection, $attributes); + parent::__construct($factoryElement, $factoryCollection, $escaper, $data); } /** diff --git a/app/code/Magento/GiftMessage/Model/Message.php b/app/code/Magento/GiftMessage/Model/Message.php index a8cd97b7120ae..0228e88443b00 100644 --- a/app/code/Magento/GiftMessage/Model/Message.php +++ b/app/code/Magento/GiftMessage/Model/Message.php @@ -63,8 +63,8 @@ class Message extends \Magento\Core\Model\AbstractModel public function __construct( \Magento\Core\Model\Context $context, \Magento\Core\Model\Registry $registry, - \Magento\GiftMessage\Model\Resource\Message $resource = null, - \Magento\Data\Collection\Db $resourceCollection = null, + \Magento\GiftMessage\Model\Resource\Message $resource, + \Magento\Data\Collection\Db $resourceCollection, \Magento\GiftMessage\Model\TypeFactory $typeFactory, array $data = array() ) { diff --git a/app/code/Magento/GoogleAnalytics/Block/Ga.php b/app/code/Magento/GoogleAnalytics/Block/Ga.php index ddce627f4754b..d117d07140853 100644 --- a/app/code/Magento/GoogleAnalytics/Block/Ga.php +++ b/app/code/Magento/GoogleAnalytics/Block/Ga.php @@ -99,7 +99,7 @@ public function getPageTrackingCode($accountId) { $pageName = trim($this->getPageName()); $optPageURL = ''; - if ($pageName && preg_match('/^\/.*/i', $pageName)) { + if ($pageName && substr($pageName, 0, 1) == '/' && strlen($pageName) > 1) { $optPageURL = ", '{$this->escapeJsQuote($pageName)}'"; } return " diff --git a/app/code/Magento/GoogleAnalytics/Model/Observer.php b/app/code/Magento/GoogleAnalytics/Model/Observer.php index 4e3b0c7911d6a..bcb839b1fc06b 100644 --- a/app/code/Magento/GoogleAnalytics/Model/Observer.php +++ b/app/code/Magento/GoogleAnalytics/Model/Observer.php @@ -49,7 +49,7 @@ class Observer protected $_googleAnalyticsData = null; /** - * @var \Magento\Core\Model\Layout + * @var \Magento\View\LayoutInterface */ protected $_layout; @@ -60,12 +60,12 @@ class Observer /** * @param \Magento\Core\Model\StoreManagerInterface $storeManager - * @param \Magento\Core\Model\Layout $layout + * @param \Magento\View\LayoutInterface $layout * @param \Magento\GoogleAnalytics\Helper\Data $googleAnalyticsData */ public function __construct( \Magento\Core\Model\StoreManagerInterface $storeManager, - \Magento\Core\Model\Layout $layout, + \Magento\View\LayoutInterface $layout, \Magento\GoogleAnalytics\Helper\Data $googleAnalyticsData ) { $this->_googleAnalyticsData = $googleAnalyticsData; diff --git a/app/code/Magento/GoogleCheckout/Model/Api/Xml/Callback.php b/app/code/Magento/GoogleCheckout/Model/Api/Xml/Callback.php index 2c3a829d33f0c..ea7a51b8586ee 100644 --- a/app/code/Magento/GoogleCheckout/Model/Api/Xml/Callback.php +++ b/app/code/Magento/GoogleCheckout/Model/Api/Xml/Callback.php @@ -64,24 +64,24 @@ class Callback extends \Magento\GoogleCheckout\Model\Api\Xml\AbstractXml protected $string; /** + * @param \Magento\ObjectManager $objectManager + * @param \Magento\Core\Model\Translate $translator + * @param \Magento\Core\Model\Store\Config $coreStoreConfig * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Core\Helper\Data $coreData * @param \Magento\GoogleCheckout\Helper\Data $googleCheckoutData * @param \Magento\Tax\Helper\Data $taxData - * @param \Magento\ObjectManager $objectManager - * @param \Magento\Core\Model\Translate $translator - * @param \Magento\Core\Model\Store\Config $coreStoreConfig * @param \Magento\Stdlib\String $string * @param array $data */ public function __construct( + \Magento\ObjectManager $objectManager, + \Magento\Core\Model\Translate $translator, + \Magento\Core\Model\Store\Config $coreStoreConfig, \Magento\Event\ManagerInterface $eventManager, \Magento\Core\Helper\Data $coreData, \Magento\GoogleCheckout\Helper\Data $googleCheckoutData, \Magento\Tax\Helper\Data $taxData, - \Magento\ObjectManager $objectManager, - \Magento\Core\Model\Translate $translator, - \Magento\Core\Model\Store\Config $coreStoreConfig, \Magento\Stdlib\String $string, array $data = array() ) { diff --git a/app/code/Magento/GoogleCheckout/Model/Api/Xml/Checkout.php b/app/code/Magento/GoogleCheckout/Model/Api/Xml/Checkout.php index cf44cff5d6482..8d6dc445dff58 100644 --- a/app/code/Magento/GoogleCheckout/Model/Api/Xml/Checkout.php +++ b/app/code/Magento/GoogleCheckout/Model/Api/Xml/Checkout.php @@ -93,25 +93,25 @@ class Checkout extends \Magento\GoogleCheckout\Model\Api\Xml\AbstractXml protected $_eventManager = null; /** + * @param \Magento\ObjectManager $objectManager + * @param \Magento\Core\Model\Translate $translator + * @param \Magento\Core\Model\Store\Config $coreStoreConfig * @param \Magento\Event\ManagerInterface $eventManager * @param \Magento\Customer\Helper\Data $customerData * @param \Magento\GoogleCheckout\Helper\Data $googleCheckoutData * @param \Magento\Tax\Helper\Data $taxData * @param \Magento\Weee\Helper\Data $weeeData - * @param \Magento\ObjectManager $objectManager - * @param \Magento\Core\Model\Translate $translator - * @param \Magento\Core\Model\Store\Config $coreStoreConfig * @param array $data */ public function __construct( + \Magento\ObjectManager $objectManager, + \Magento\Core\Model\Translate $translator, + \Magento\Core\Model\Store\Config $coreStoreConfig, \Magento\Event\ManagerInterface $eventManager, \Magento\Customer\Helper\Data $customerData, \Magento\GoogleCheckout\Helper\Data $googleCheckoutData, \Magento\Tax\Helper\Data $taxData, \Magento\Weee\Helper\Data $weeeData, - \Magento\ObjectManager $objectManager, - \Magento\Core\Model\Translate $translator, - \Magento\Core\Model\Store\Config $coreStoreConfig, array $data = array() ) { $this->_eventManager = $eventManager; diff --git a/app/code/Magento/GoogleCheckout/Model/Payment.php b/app/code/Magento/GoogleCheckout/Model/Payment.php index 9c4543a17cd41..b76378021d3d3 100644 --- a/app/code/Magento/GoogleCheckout/Model/Payment.php +++ b/app/code/Magento/GoogleCheckout/Model/Payment.php @@ -64,13 +64,13 @@ class Payment extends \Magento\Payment\Model\Method\AbstractMethod protected $dateFactory; public function __construct( - \Magento\Core\Model\DateFactory $dateFactory, - \Magento\Core\Model\UrlFactory $urlFactory, - \Magento\GoogleCheckout\Model\ApiFactory $apiFactory, \Magento\Event\ManagerInterface $eventManager, \Magento\Payment\Helper\Data $paymentData, \Magento\Core\Model\Store\ConfigInterface $coreStoreConfig, \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory, + \Magento\Core\Model\DateFactory $dateFactory, + \Magento\Core\Model\UrlFactory $urlFactory, + \Magento\GoogleCheckout\Model\ApiFactory $apiFactory, array $data = array() ) { $this->dateFactory = $dateFactory; diff --git a/app/code/Magento/GoogleShopping/Model/Service/Item.php b/app/code/Magento/GoogleShopping/Model/Service/Item.php index 35be6c55869cb..885e2438d1bee 100644 --- a/app/code/Magento/GoogleShopping/Model/Service/Item.php +++ b/app/code/Magento/GoogleShopping/Model/Service/Item.php @@ -49,17 +49,17 @@ class Item extends \Magento\GoogleShopping\Model\Service /** * @param \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory - * @param \Magento\Core\Model\Date $date * @param \Magento\Core\Model\Registry $coreRegistry * @param \Magento\GoogleShopping\Model\Config $config + * @param \Magento\Core\Model\Date $date * @param \Magento\GoogleShopping\Helper\Data $gsData * @param array $data */ public function __construct( \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory, - \Magento\Core\Model\Date $date, \Magento\Core\Model\Registry $coreRegistry, \Magento\GoogleShopping\Model\Config $config, + \Magento\Core\Model\Date $date, \Magento\GoogleShopping\Helper\Data $gsData, array $data = array() ) { diff --git a/app/code/Magento/ImportExport/Block/Adminhtml/Export/Edit/Form.php b/app/code/Magento/ImportExport/Block/Adminhtml/Export/Edit/Form.php index f771269af4e79..943ea21bd2773 100644 --- a/app/code/Magento/ImportExport/Block/Adminhtml/Export/Edit/Form.php +++ b/app/code/Magento/ImportExport/Block/Adminhtml/Export/Edit/Form.php @@ -75,7 +75,7 @@ protected function _prepareForm() { /** @var \Magento\Data\Form $form */ $form = $this->_formFactory->create(array( - 'attributes' => array( + 'data' => array( 'id' => 'edit_form', 'action' => $this->getUrl('adminhtml/*/getFilter'), 'method' => 'post', diff --git a/app/code/Magento/ImportExport/Block/Adminhtml/Import/Edit/Form.php b/app/code/Magento/ImportExport/Block/Adminhtml/Import/Edit/Form.php index 608d1a813006d..dbc7b55bc3e40 100644 --- a/app/code/Magento/ImportExport/Block/Adminhtml/Import/Edit/Form.php +++ b/app/code/Magento/ImportExport/Block/Adminhtml/Import/Edit/Form.php @@ -85,7 +85,7 @@ protected function _prepareForm() { /** @var \Magento\Data\Form $form */ $form = $this->_formFactory->create(array( - 'attributes' => array( + 'data' => array( 'id' => 'edit_form', 'action' => $this->getUrl('adminhtml/*/validate'), 'method' => 'post', diff --git a/app/code/Magento/ImportExport/Model/Export/Config/Reader.php b/app/code/Magento/ImportExport/Model/Export/Config/Reader.php index bdec2c430e823..28c4907db4f3b 100644 --- a/app/code/Magento/ImportExport/Model/Export/Config/Reader.php +++ b/app/code/Magento/ImportExport/Model/Export/Config/Reader.php @@ -39,11 +39,12 @@ class Reader extends \Magento\Config\Reader\Filesystem /** * @param \Magento\Config\FileResolverInterface $fileResolver * @param \Magento\ImportExport\Model\Export\Config\Converter $converter - * @param \Magento\Config\ValidationStateInterface $validationState * @param \Magento\ImportExport\Model\Export\Config\SchemaLocator $schemaLocator + * @param \Magento\Config\ValidationStateInterface $validationState * @param string $fileName * @param array $idAttributes * @param string $domDocumentClass + * @param string $defaultScope */ public function __construct( \Magento\Config\FileResolverInterface $fileResolver, @@ -52,10 +53,18 @@ public function __construct( \Magento\Config\ValidationStateInterface $validationState, $fileName = 'export.xml', $idAttributes = array(), - $domDocumentClass = 'Magento\Config\Dom' + $domDocumentClass = 'Magento\Config\Dom', + $defaultScope = 'global' ) { parent::__construct( - $fileResolver, $converter, $schemaLocator, $validationState, $fileName, $idAttributes, $domDocumentClass + $fileResolver, + $converter, + $schemaLocator, + $validationState, + $fileName, + $idAttributes, + $domDocumentClass, + $defaultScope ); } diff --git a/app/code/Magento/ImportExport/Model/Export/Entity/Product.php b/app/code/Magento/ImportExport/Model/Export/Entity/Product.php index 7e4d1096c5973..62333f7e03947 100644 --- a/app/code/Magento/ImportExport/Model/Export/Entity/Product.php +++ b/app/code/Magento/ImportExport/Model/Export/Entity/Product.php @@ -653,8 +653,10 @@ protected function _getItemsPerPage() switch($lastMemoryLimitLetter) { case 'g': $memoryLimit *= 1024; + // fall-through intentional case 'm': $memoryLimit *= 1024; + // fall-through intentional case 'k': $memoryLimit *= 1024; break; diff --git a/app/code/Magento/ImportExport/Model/Import/Config/Reader.php b/app/code/Magento/ImportExport/Model/Import/Config/Reader.php index 159ad4daa794c..799e251217e02 100644 --- a/app/code/Magento/ImportExport/Model/Import/Config/Reader.php +++ b/app/code/Magento/ImportExport/Model/Import/Config/Reader.php @@ -38,11 +38,12 @@ class Reader extends \Magento\Config\Reader\Filesystem /** * @param \Magento\Config\FileResolverInterface $fileResolver * @param \Magento\ImportExport\Model\Import\Config\Converter $converter - * @param \Magento\Config\ValidationStateInterface $validationState * @param \Magento\ImportExport\Model\Import\Config\SchemaLocator $schemaLocator + * @param \Magento\Config\ValidationStateInterface $validationState * @param string $fileName * @param array $idAttributes * @param string $domDocumentClass + * @param string $defaultScope */ public function __construct( \Magento\Config\FileResolverInterface $fileResolver, @@ -51,10 +52,18 @@ public function __construct( \Magento\Config\ValidationStateInterface $validationState, $fileName = 'import.xml', $idAttributes = array(), - $domDocumentClass = 'Magento\Config\Dom' + $domDocumentClass = 'Magento\Config\Dom', + $defaultScope = 'global' ) { parent::__construct( - $fileResolver, $converter, $schemaLocator, $validationState, $fileName, $idAttributes, $domDocumentClass + $fileResolver, + $converter, + $schemaLocator, + $validationState, + $fileName, + $idAttributes, + $domDocumentClass, + $defaultScope ); } diff --git a/app/code/Magento/ImportExport/Model/Import/Entity/Product/Type/Configurable.php b/app/code/Magento/ImportExport/Model/Import/Entity/Product/Type/Configurable.php index 244cf30a12510..e83f10e43f303 100644 --- a/app/code/Magento/ImportExport/Model/Import/Entity/Product/Type/Configurable.php +++ b/app/code/Magento/ImportExport/Model/Import/Entity/Product/Type/Configurable.php @@ -153,20 +153,20 @@ class Configurable /** * @param \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory $attrSetColFac * @param \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory $prodAttrColFac + * @param array $params * @param \Magento\Catalog\Model\ProductTypes\ConfigInterface $productTypesConfig * @param \Magento\ImportExport\Model\Resource\Helper $resourceHelper * @param \Magento\App\Resource $resource * @param \Magento\Catalog\Model\Resource\Product\CollectionFactory $_productColFac - * @param array $params */ public function __construct( \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory $attrSetColFac, \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory $prodAttrColFac, + array $params, \Magento\Catalog\Model\ProductTypes\ConfigInterface $productTypesConfig, \Magento\ImportExport\Model\Resource\Helper $resourceHelper, \Magento\App\Resource $resource, - \Magento\Catalog\Model\Resource\Product\CollectionFactory $_productColFac, - array $params + \Magento\Catalog\Model\Resource\Product\CollectionFactory $_productColFac ) { $this->_productTypesConfig = $productTypesConfig; $this->_resourceHelper = $resourceHelper; diff --git a/app/code/Magento/ImportExport/Model/Import/Entity/Product/Type/Grouped.php b/app/code/Magento/ImportExport/Model/Import/Entity/Product/Type/Grouped.php index abe164fd975b8..6b016d3abda11 100644 --- a/app/code/Magento/ImportExport/Model/Import/Entity/Product/Type/Grouped.php +++ b/app/code/Magento/ImportExport/Model/Import/Entity/Product/Type/Grouped.php @@ -70,20 +70,19 @@ class Grouped /** * @param \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory $attrSetColFac * @param \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory $prodAttrColFac + * @param array $params * @param \Magento\ImportExport\Model\ImportFactory $importFactory * @param \Magento\Catalog\Model\Resource\Product\LinkFactory $productLinkFactory * @param \Magento\App\Resource $resource - * @param array $params */ public function __construct( \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory $attrSetColFac, \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory $prodAttrColFac, + array $params, \Magento\ImportExport\Model\ImportFactory $importFactory, \Magento\Catalog\Model\Resource\Product\LinkFactory $productLinkFactory, - \Magento\App\Resource $resource, - array $params - ) - { + \Magento\App\Resource $resource + ) { $this->_importFactory = $importFactory; $this->_resource = $resource; $this->_productLinkFactory = $productLinkFactory; diff --git a/app/code/Magento/Index/Block/Adminhtml/Process/Edit/Form.php b/app/code/Magento/Index/Block/Adminhtml/Process/Edit/Form.php index 8dd4f0791d9cf..f0699b20eaff6 100644 --- a/app/code/Magento/Index/Block/Adminhtml/Process/Edit/Form.php +++ b/app/code/Magento/Index/Block/Adminhtml/Process/Edit/Form.php @@ -32,7 +32,7 @@ protected function _prepareForm() { /** @var \Magento\Data\Form $form */ $form = $this->_formFactory->create(array( - 'attributes' => array( + 'data' => array( 'id' => 'edit_form', 'action' => $this->getActionUrl(), 'method' => 'post', diff --git a/app/code/Magento/Index/Model/Indexer/Config/Reader.php b/app/code/Magento/Index/Model/Indexer/Config/Reader.php index d46fe4775c2e6..1a93bcdafc1a9 100644 --- a/app/code/Magento/Index/Model/Indexer/Config/Reader.php +++ b/app/code/Magento/Index/Model/Indexer/Config/Reader.php @@ -45,6 +45,7 @@ class Reader extends \Magento\Config\Reader\Filesystem * @param string $fileName * @param array $idAttributes * @param string $domDocumentClass + * @param string $defaultScope */ public function __construct( \Magento\Config\FileResolverInterface $fileResolver, @@ -53,10 +54,18 @@ public function __construct( \Magento\Config\ValidationStateInterface $validationState, $fileName = 'indexers.xml', $idAttributes = array(), - $domDocumentClass = 'Magento\Config\Dom' + $domDocumentClass = 'Magento\Config\Dom', + $defaultScope = 'global' ) { parent::__construct( - $fileResolver, $converter, $schemaLocator, $validationState, $fileName, $idAttributes, $domDocumentClass + $fileResolver, + $converter, + $schemaLocator, + $validationState, + $fileName, + $idAttributes, + $domDocumentClass, + $defaultScope ); } diff --git a/app/code/Magento/Index/Model/Shell.php b/app/code/Magento/Index/Model/Shell.php index b3822a9f14384..3ddf6efef97a9 100644 --- a/app/code/Magento/Index/Model/Shell.php +++ b/app/code/Magento/Index/Model/Shell.php @@ -48,16 +48,16 @@ class Shell extends \Magento\Core\Model\AbstractShell protected $_indexer; /** - * @param \Magento\Index\Model\Indexer $indexer * @param \Magento\Filesystem $filesystem * @param string $entryPoint * @param \Magento\App\Dir $dir + * @param \Magento\Index\Model\Indexer $indexer */ public function __construct( - \Magento\Index\Model\Indexer $indexer, \Magento\Filesystem $filesystem, $entryPoint, - \Magento\App\Dir $dir + \Magento\App\Dir $dir, + \Magento\Index\Model\Indexer $indexer ) { $this->_indexer = $indexer; parent::__construct($filesystem, $entryPoint, $dir); diff --git a/app/code/Magento/Install/App/Action/Plugin/Design.php b/app/code/Magento/Install/App/Action/Plugin/Design.php index 141bd171386fe..58423881ca8b7 100644 --- a/app/code/Magento/Install/App/Action/Plugin/Design.php +++ b/app/code/Magento/Install/App/Action/Plugin/Design.php @@ -42,9 +42,9 @@ class Design protected $_layout; /** - * @var \Magento\Core\Model\Theme\CollectionFactory + * @var \Magento\View\Design\Theme\ListInterface */ - protected $_collectionFactory; + protected $_themeList; /** * @var \Magento\View\DesignInterface @@ -56,17 +56,17 @@ class Design * @param \Magento\Core\Model\App $app * @param \Magento\View\LayoutInterface $layout * @param \Magento\View\DesignInterface $viewDesign - * @param \Magento\Core\Model\Theme\CollectionFactory $collectionFactory + * @param \Magento\View\Design\Theme\ListInterface $themeList */ public function __construct( \Magento\App\RequestInterface $request, \Magento\Core\Model\App $app, \Magento\View\LayoutInterface $layout, \Magento\View\DesignInterface $viewDesign, - \Magento\Core\Model\Theme\CollectionFactory $collectionFactory + \Magento\View\Design\Theme\ListInterface $themeList ) { $this->_viewDesign = $viewDesign; - $this->_collectionFactory = $collectionFactory; + $this->_themeList = $themeList; $this->_request = $request; $this->_app = $app; $this->_layout = $layout; @@ -84,11 +84,9 @@ public function beforeDispatch(array $arguments = array()) $area = $this->_app->getArea($areaCode); $area->load(\Magento\Core\Model\App\Area::PART_CONFIG); - /** @var $themesCollection \Magento\Core\Model\Theme\Collection */ - $themesCollection = $this->_collectionFactory->create(); - $themeModel = $themesCollection->addDefaultPattern($areaCode) - ->addFilter('theme_path', $this->_viewDesign->getConfigurationDesignTheme($areaCode)) - ->getFirstItem(); + $themePath = $this->_viewDesign->getConfigurationDesignTheme($areaCode); + $themeFullPath = $areaCode . \Magento\View\Design\ThemeInterface::PATH_SEPARATOR . $themePath; + $themeModel = $this->_themeList->getThemeByFullPath($themeFullPath); $this->_viewDesign->setArea($areaCode)->setDesignTheme($themeModel); $area->detectDesign($this->_request); diff --git a/app/code/Magento/Install/etc/di.xml b/app/code/Magento/Install/etc/di.xml index 7460d942e67b4..551fc38f61bfa 100644 --- a/app/code/Magento/Install/etc/di.xml +++ b/app/code/Magento/Install/etc/di.xml @@ -24,6 +24,7 @@ */ --> + install diff --git a/app/code/Magento/Integration/Block/Adminhtml/Integration/Activate/Permissions/Tabs.php b/app/code/Magento/Integration/Block/Adminhtml/Integration/Activate/Permissions/Tabs.php index a4b1a47c2ccbe..1bfaaefb92324 100644 --- a/app/code/Magento/Integration/Block/Adminhtml/Integration/Activate/Permissions/Tabs.php +++ b/app/code/Magento/Integration/Block/Adminhtml/Integration/Activate/Permissions/Tabs.php @@ -1,6 +1,6 @@ _removeButton('reset'); $this->_removeButton('delete'); + + if ($this->_isNewIntegration()) { + $this->removeButton('save')->addButton( + 'save', + [ + 'id' => 'save-split-button', + 'label' => __('Save'), + 'class_name' => 'Magento\Backend\Block\Widget\Button\SplitButton', + 'button_class' => 'PrimarySplitButton', + 'data_attribute' => [ + 'mage-init' => [ + 'button' => ['event' => 'save', 'target' => '#edit_form'], + ], + ], + 'options' => [ + 'save_activate' => [ + 'id' => 'activate', + 'label' => __('Save & Activate'), + 'data_attribute' => [ + 'mage-init' => [ + 'button' => [ + 'event' => 'saveAndActivate', + 'target' => '#edit_form', + ], + 'integration' => [ + 'gridUrl' => $this->getUrl('*/*/'), + ] + ] + ] + ] + ] + ] + ); + } } /** @@ -70,15 +106,15 @@ protected function _construct() */ public function getHeaderText() { - if (isset($this->_registry->registry(Integration::REGISTRY_KEY_CURRENT_INTEGRATION)[Info::DATA_ID])) { + if ($this->_isNewIntegration()) { + return __('New Integration'); + } else { return __( "Edit Integration '%1'", $this->escapeHtml( $this->_registry->registry(Integration::REGISTRY_KEY_CURRENT_INTEGRATION)[Info::DATA_NAME] ) ); - } else { - return __('New Integration'); } } @@ -89,4 +125,14 @@ public function getFormActionUrl() { return $this->getUrl('*/*/save'); } + + /** + * Determine whether we create new integration or editing an existing one. + * + * @return bool + */ + protected function _isNewIntegration() + { + return !isset($this->_registry->registry(Integration::REGISTRY_KEY_CURRENT_INTEGRATION)[Info::DATA_ID]); + } } diff --git a/app/code/Magento/Integration/Block/Adminhtml/Integration/Edit/Form.php b/app/code/Magento/Integration/Block/Adminhtml/Integration/Edit/Form.php index 9c0f4ce006e40..2d38b893f23a6 100644 --- a/app/code/Magento/Integration/Block/Adminhtml/Integration/Edit/Form.php +++ b/app/code/Magento/Integration/Block/Adminhtml/Integration/Edit/Form.php @@ -44,7 +44,7 @@ protected function _prepareForm() /** @var \Magento\Data\Form $form */ $form = $this->_formFactory->create( array( - 'attributes' => array( + 'data' => array( 'id' => 'edit_form', 'action' => $this->getData('action'), 'method' => 'post', diff --git a/app/code/Magento/Integration/Block/Adminhtml/Integration/Edit/Tab/Info.php b/app/code/Magento/Integration/Block/Adminhtml/Integration/Edit/Tab/Info.php index 1eccbee1b67f6..9755e8ffe589e 100644 --- a/app/code/Magento/Integration/Block/Adminhtml/Integration/Edit/Tab/Info.php +++ b/app/code/Magento/Integration/Block/Adminhtml/Integration/Edit/Tab/Info.php @@ -26,7 +26,8 @@ namespace Magento\Integration\Block\Adminhtml\Integration\Edit\Tab; -use \Magento\Integration\Controller\Adminhtml\Integration; +use Magento\Integration\Controller\Adminhtml\Integration; +use Magento\Integration\Model\Integration as IntegrationModel; /** * Main Integration info edit form @@ -38,7 +39,7 @@ class Info extends \Magento\Backend\Block\Widget\Form\Generic implements \Magento\Backend\Block\Widget\Tab\TabInterface { /**#@+ - * edit_form element names. + * Form elements names. */ const HTML_ID_PREFIX = 'integration_properties_'; const DATA_ID = 'integration_id'; @@ -46,6 +47,7 @@ class Info extends \Magento\Backend\Block\Widget\Form\Generic const DATA_EMAIL = 'email'; const DATA_ENDPOINT = 'endpoint'; const DATA_SETUP_TYPE = 'setup_type'; + const DATA_CONSUMER_ID = 'consumer_id'; /**#@-*/ /** @@ -59,44 +61,8 @@ protected function _prepareForm() $form = $this->_formFactory->create(); $form->setHtmlIdPrefix(self::HTML_ID_PREFIX); $integrationData = $this->_coreRegistry->registry(Integration::REGISTRY_KEY_CURRENT_INTEGRATION); - $fieldset = $form->addFieldset('base_fieldset', array('legend' => __('General'))); - if (isset($integrationData[self::DATA_ID])) { - $fieldset->addField(self::DATA_ID, 'hidden', array('name' => 'id')); - } - $fieldset->addField( - self::DATA_NAME, - 'text', - array( - 'label' => __('Name'), - 'name' => self::DATA_NAME, - 'required' => true, - 'disabled' => false, - 'maxlength' => '255' - ) - ); - $fieldset->addField( - self::DATA_EMAIL, - 'text', - array( - 'label' => __('Email'), - 'name' => self::DATA_EMAIL, - 'disabled' => false, - 'class' => 'validate-email', - 'maxlength' => '254' - ) - ); - $fieldset->addField( - self::DATA_ENDPOINT, - 'text', - array( - 'label' => __('Callback URL'), - 'name' => self::DATA_ENDPOINT, - 'disabled' => false, - // @codingStandardsIgnoreStart - 'note'=> __('When using Oauth for token exchange, enter URL where Oauth credentials can be POST-ed. We strongly recommend you to use https://') - // @codingStandardsIgnoreEnd - ) - ); + $this->_addGeneralFieldset($form, $integrationData); + $this->_addDetailsFieldset($form, $integrationData); $form->setValues($integrationData); $this->setForm($form); return $this; @@ -141,4 +107,79 @@ public function isHidden() { return false; } + + /** + * Add fieldset with general integration information. + * + * @param \Magento\Data\Form $form + * @param array $integrationData + */ + protected function _addGeneralFieldset($form, $integrationData) + { + $fieldset = $form->addFieldset('base_fieldset', array('legend' => __('General'))); + + $disabled = false; + if (isset($integrationData[self::DATA_ID])) { + $fieldset->addField(self::DATA_ID, 'hidden', array('name' => 'id')); + + if ($integrationData[self::DATA_SETUP_TYPE] == IntegrationModel::TYPE_CONFIG) { + $disabled = true; + } + } + + $fieldset->addField( + self::DATA_NAME, + 'text', + array( + 'label' => __('Name'), + 'name' => self::DATA_NAME, + 'required' => true, + 'disabled' => $disabled, + 'maxlength' => '255' + ) + ); + $fieldset->addField( + self::DATA_EMAIL, + 'text', + array( + 'label' => __('Email'), + 'name' => self::DATA_EMAIL, + 'disabled' => $disabled, + 'class' => 'validate-email', + 'maxlength' => '254' + ) + ); + $fieldset->addField( + self::DATA_ENDPOINT, + 'text', + array( + 'label' => __('Callback URL'), + 'name' => self::DATA_ENDPOINT, + 'disabled' => $disabled, + // @codingStandardsIgnoreStart + 'note' => __( + 'Enter URL where Oauth credentials can be sent when using Oauth for token exchange. We strongly recommend using https://.' + ) + // @codingStandardsIgnoreEnd + ) + ); + } + + /** + * Add fieldset with integration details. This fieldset is available for existing integrations only. + * + * @param \Magento\Data\Form $form + * @param array $integrationData + */ + protected function _addDetailsFieldset($form, $integrationData) + { + if (isset($integrationData[self::DATA_ID])) { + $fieldset = $form->addFieldset('details_fieldset', array('legend' => __('Integration Details'))); + /** @var \Magento\Integration\Block\Adminhtml\Integration\Tokens $tokensBlock */ + $tokensBlock = $this->getChildBlock('integration_tokens'); + foreach ($tokensBlock->getFormFields() as $field) { + $fieldset->addField($field['name'], $field['type'], $field['metadata']); + } + } + } } diff --git a/app/code/Magento/Integration/Block/Adminhtml/Integration/Token.php b/app/code/Magento/Integration/Block/Adminhtml/Integration/Token.php deleted file mode 100644 index e64c122d4235e..0000000000000 --- a/app/code/Magento/Integration/Block/Adminhtml/Integration/Token.php +++ /dev/null @@ -1,82 +0,0 @@ -_formFactory->create(); - $htmlIdPrefix = 'integration_token_'; - $form->setHtmlIdPrefix($htmlIdPrefix); - - $fieldset = $form->addFieldset('base_fieldset', array( - 'legend' => __('Integration Tokens for Extensions'), - 'class' => 'fieldset-wide' - )); - - $fieldset->addField('token', 'text', array( - 'label' => __('Token'), - 'name' => 'token', - 'readonly' => true - )); - - $fieldset->addField('token-secret', 'text', array( - 'label' => __('Token Secret'), - 'name' => 'token-secret', - 'readonly' => true - )); - - $fieldset->addField('client-id', 'text', array( - 'label' => __('Client ID'), - 'name' => 'client-id', - 'readonly' => true - )); - - $fieldset->addField('client-secret', 'text', array( - 'label' => __('Client Secret'), - 'name' => 'client-secret', - 'readonly' => true - )); - - // TODO: retrieve token associated to this integration to populate the form - // $form->setValues($model->getData()); - - $this->setForm($form); - - return parent::_prepareForm(); - } -} diff --git a/app/code/Magento/Integration/Block/Adminhtml/Integration/Tokens.php b/app/code/Magento/Integration/Block/Adminhtml/Integration/Tokens.php new file mode 100644 index 0000000000000..abfba8ffe0099 --- /dev/null +++ b/app/code/Magento/Integration/Block/Adminhtml/Integration/Tokens.php @@ -0,0 +1,123 @@ +_formFactory->create(); + $htmlIdPrefix = 'integration_token_'; + $form->setHtmlIdPrefix($htmlIdPrefix); + + $fieldset = $form->addFieldset( + 'base_fieldset', + array( + 'legend' => __('Integration Tokens for Extensions'), + 'class' => 'fieldset-wide' + ) + ); + + foreach ($this->getFormFields() as $field) { + $fieldset->addField($field['name'], $field['type'], $field['metadata']); + } + + $integrationData = $this->_coreRegistry->registry(IntegrationController::REGISTRY_KEY_CURRENT_INTEGRATION); + if ($integrationData) { + $form->setValues($integrationData); + } + $this->setForm($form); + return parent::_prepareForm(); + } + + /** + * Return a list of form fields with oAuth credentials. + * + * @return array + */ + public function getFormFields() + { + return array( + array( + 'name' => self::DATA_CONSUMER_KEY, + 'type' => 'text', + 'metadata' => array( + 'label' => __('Consumer Key'), + 'name' => self::DATA_CONSUMER_KEY, + 'readonly' => true, + ) + ), + array( + 'name' => self::DATA_CONSUMER_SECRET, + 'type' => 'text', + 'metadata' => array( + 'label' => __('Consumer Secret'), + 'name' => self::DATA_CONSUMER_SECRET, + 'readonly' => true, + ) + ), + array( + 'name' => self::DATA_TOKEN, + 'type' => 'text', + 'metadata' => array( + 'label' => __('Access Token'), + 'name' => self::DATA_TOKEN, + 'readonly' => true, + ) + ), + array( + 'name' => self::DATA_TOKEN_SECRET, + 'type' => 'text', + 'metadata' => array( + 'label' => __('Access Token Secret'), + 'name' => self::DATA_TOKEN_SECRET, + 'readonly' => true, + ) + ), + ); + } +} diff --git a/app/code/Magento/Integration/Block/Adminhtml/Widget/Grid/Column/Renderer/Button.php b/app/code/Magento/Integration/Block/Adminhtml/Widget/Grid/Column/Renderer/Button.php index 011613dc07c68..1b1e22eb1cc47 100644 --- a/app/code/Magento/Integration/Block/Adminhtml/Widget/Grid/Column/Renderer/Button.php +++ b/app/code/Magento/Integration/Block/Adminhtml/Widget/Grid/Column/Renderer/Button.php @@ -25,7 +25,8 @@ namespace Magento\Integration\Block\Adminhtml\Widget\Grid\Column\Renderer; use Magento\Backend\Block\Widget\Grid\Column\Renderer\AbstractRenderer; -use \Magento\Object; +use Magento\Integration\Model\Integration; +use Magento\Object; /** * Render HTML ', $this->_getAttributesStr($attributes), $this->_getValue($row)); } + /** + * Determine whether current integration came from config file + * + * @param \Magento\Object $row + * @return bool + */ + protected function _isConfigBasedIntegration(Object $row) + { + return ($row->hasData(Integration::SETUP_TYPE) + && $row->getData(Integration::SETUP_TYPE) == Integration::TYPE_CONFIG); + } + /** * Whether current item is disabled. * diff --git a/app/code/Magento/Integration/Block/Adminhtml/Widget/Grid/Column/Renderer/Button/Delete.php b/app/code/Magento/Integration/Block/Adminhtml/Widget/Grid/Column/Renderer/Button/Delete.php index a9364800f3e5a..f253d21a3ac24 100644 --- a/app/code/Magento/Integration/Block/Adminhtml/Widget/Grid/Column/Renderer/Button/Delete.php +++ b/app/code/Magento/Integration/Block/Adminhtml/Widget/Grid/Column/Renderer/Button/Delete.php @@ -26,9 +26,10 @@ namespace Magento\Integration\Block\Adminhtml\Widget\Grid\Column\Renderer\Button; +use Magento\Integration\Block\Adminhtml\Widget\Grid\Column\Renderer\Button; use Magento\Object; -class Delete extends IntegrationAbstract +class Delete extends Button { /** * Return 'onclick' action for the button (redirect to the integration edit page). @@ -38,7 +39,7 @@ class Delete extends IntegrationAbstract */ protected function _getOnclickAttribute(Object $row) { - return sprintf("window.location.href='%s'", $this->getUrl('*/*/delete', ['id' => $row->getId()])); + return sprintf("this.setAttribute('data-url', '%s')", $this->getUrl('*/*/delete', ['id' => $row->getId()])); } /** @@ -51,4 +52,15 @@ protected function _getTitleAttribute(Object $row) { return $this->_isDisabled($row) ? __('Uninstall the extension to remove this integration') : __('Remove'); } + + /** + * Determine whether current integration came from config file, thus can not be removed + * + * @param \Magento\Object $row + * @return bool + */ + protected function _isDisabled(Object $row) + { + return $this->_isConfigBasedIntegration($row); + } } diff --git a/app/code/Magento/Integration/Block/Adminhtml/Widget/Grid/Column/Renderer/Button/Edit.php b/app/code/Magento/Integration/Block/Adminhtml/Widget/Grid/Column/Renderer/Button/Edit.php index 3c1d6e4a57570..30832c1979612 100644 --- a/app/code/Magento/Integration/Block/Adminhtml/Widget/Grid/Column/Renderer/Button/Edit.php +++ b/app/code/Magento/Integration/Block/Adminhtml/Widget/Grid/Column/Renderer/Button/Edit.php @@ -27,8 +27,9 @@ namespace Magento\Integration\Block\Adminhtml\Widget\Grid\Column\Renderer\Button; use Magento\Object; +use Magento\Integration\Block\Adminhtml\Widget\Grid\Column\Renderer\Button; -class Edit extends IntegrationAbstract +class Edit extends Button { /** * Return 'onclick' action for the button (redirect to the integration edit page). @@ -49,6 +50,20 @@ protected function _getOnclickAttribute(Object $row) */ protected function _getTitleAttribute(Object $row) { - return $this->_isDisabled($row) ? '' : __('Edit'); + return $this->_isConfigBasedIntegration($row) ? __('View') : __('Edit'); + } + + /** + * Get the icon on the grid according to the integration type + * + * @param \Magento\Object $row + * return string + */ + public function _getClassAttribute(Object $row) + { + $class = $this->_isConfigBasedIntegration($row) ? 'info' : 'edit'; + + return 'action ' . $class; + } } diff --git a/app/code/Magento/Integration/Block/Adminhtml/Widget/Grid/Column/Renderer/Button/IntegrationAbstract.php b/app/code/Magento/Integration/Block/Adminhtml/Widget/Grid/Column/Renderer/Button/IntegrationAbstract.php deleted file mode 100644 index 76db7a82352e7..0000000000000 --- a/app/code/Magento/Integration/Block/Adminhtml/Widget/Grid/Column/Renderer/Button/IntegrationAbstract.php +++ /dev/null @@ -1,46 +0,0 @@ -hasData(Integration::SETUP_TYPE) - && $row->getData(Integration::SETUP_TYPE) == Integration::TYPE_CONFIG); - } -} diff --git a/app/code/Magento/Integration/Controller/Adminhtml/Integration.php b/app/code/Magento/Integration/Controller/Adminhtml/Integration.php index f5e1693d972a1..63c56ae663bd5 100644 --- a/app/code/Magento/Integration/Controller/Adminhtml/Integration.php +++ b/app/code/Magento/Integration/Controller/Adminhtml/Integration.php @@ -26,8 +26,9 @@ use Magento\Backend\App\Action; use Magento\Integration\Block\Adminhtml\Integration\Edit\Tab\Info; -use Magento\Integration\Model\Integration as IntegrationKeyConstants; use Magento\Integration\Exception as IntegrationException; +use Magento\Integration\Service\OauthV1Interface as IntegrationOauthService; +use Magento\Integration\Model\Integration as IntegrationModel; /** * Controller for integrations management. @@ -40,16 +41,6 @@ class Integration extends Action /** Keys used for registering data into the registry */ const REGISTRY_KEY_CURRENT_INTEGRATION = 'current_integration'; - /** Request parameter which define the dialog window requested */ - const PARAM_DIALOG_ID = 'popup_dialog'; - - /**#@+ - * Allowed values for PARAM_DIALOG_ID request parameter - */ - const DIALOG_PERMISSIONS = 'permissions'; - const DIALOG_TOKENS = 'tokens'; - /**#@-*/ - /** * Core registry * @@ -63,21 +54,40 @@ class Integration extends Action /** @var \Magento\Integration\Service\IntegrationV1Interface */ private $_integrationService; + /** @var IntegrationOauthService */ + protected $_oauthService; + + /** @var \Magento\Core\Helper\Data */ + protected $_coreHelper; + + /** @var \Magento\Integration\Helper\Data */ + protected $_integrationData; + /** * @param \Magento\Backend\App\Action\Context $context - * @param \Magento\Integration\Service\IntegrationV1Interface $integrationService * @param \Magento\Core\Model\Registry $registry * @param \Magento\Logger $logger + * @param IntegrationOauthService $oauthService + * @param \Magento\Integration\Service\IntegrationV1Interface $integrationService + * @param \Magento\Core\Helper\Data $coreHelper + * @param \Magento\Integration\Helper\Data $integrationData */ public function __construct( \Magento\Backend\App\Action\Context $context, - \Magento\Integration\Service\IntegrationV1Interface $integrationService, \Magento\Core\Model\Registry $registry, - \Magento\Logger $logger + \Magento\Logger $logger, + \Magento\Integration\Service\IntegrationV1Interface $integrationService, + IntegrationOauthService $oauthService, + \Magento\Core\Helper\Data $coreHelper, + \Magento\Integration\Helper\Data $integrationData ) { + parent::__construct($context); $this->_registry = $registry; $this->_logger = $logger; $this->_integrationService = $integrationService; + $this->_oauthService = $oauthService; + $this->_coreHelper = $coreHelper; + $this->_integrationData = $integrationData; parent::__construct($context); } @@ -139,30 +149,28 @@ public function editAction() $integrationId = (int)$this->getRequest()->getParam(self::PARAM_INTEGRATION_ID); if ($integrationId) { try { - $integrationData = $this->_integrationService->get($integrationId); + $integrationData = $this->_integrationService->get($integrationId)->getData(); + $originalName = $integrationData[Info::DATA_NAME]; } catch (IntegrationException $e) { $this->_getSession()->addError($e->getMessage()); $this->_redirect('*/*/'); return; + } catch (\Exception $e) { + $this->_logger->logException($e); + $this->_getSession()->addError(__('Internal error. Check exception log for details.')); + $this->_redirect('*/*'); + return; } $restoredIntegration = $this->_getSession()->getIntegrationData(); if (isset($restoredIntegration[Info::DATA_ID]) && $integrationId == $restoredIntegration[Info::DATA_ID]) { $integrationData = array_merge($integrationData, $restoredIntegration); } - - if (isset($integrationData[Info::DATA_SETUP_TYPE]) - && $integrationData[Info::DATA_SETUP_TYPE] == IntegrationKeyConstants::TYPE_CONFIG - ) { - //Cannot edit Integrations created from Config. No error necessary just redirect to grid - $this->_redirect('*/*/'); - return; - } - $this->_registry->register(self::REGISTRY_KEY_CURRENT_INTEGRATION, $integrationData); } else { $this->_getSession()->addError(__('Integration ID is not specified or is invalid.')); $this->_redirect('*/*/'); return; } + $this->_registry->register(self::REGISTRY_KEY_CURRENT_INTEGRATION, $integrationData); $this->_view->loadLayout(); $this->_getSession()->setIntegrationData(array()); $this->_setActiveMenu('Magento_Integration::system_integrations'); @@ -170,12 +178,15 @@ public function editAction() __('Edit "%1" Integration', $integrationData[Info::DATA_NAME]), __('Edit "%1" Integration', $integrationData[Info::DATA_NAME]) ); - $this->_title->add(__('Edit "%1" Integration', $integrationData[Info::DATA_NAME])); + $this->_title->add(__('Edit "%1" Integration', $originalName)); $this->_view->renderLayout(); } /** * Save integration action. + * + * TODO: Fix cyclomatic complexity. + * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ public function saveAction() { @@ -184,33 +195,47 @@ public function saveAction() try { $integrationId = (int)$this->getRequest()->getParam(self::PARAM_INTEGRATION_ID); if ($integrationId) { - $integrationData = $this->_integrationService->get($integrationId); - if (!$integrationData[Info::DATA_ID]) { - $this->_getSession()->addError(__('This integration no longer exists.')); + try { + $integrationData = $this->_integrationService->get($integrationId)->getData(); + } catch (IntegrationException $e) { + $this->_getSession()->addError($e->getMessage()); $this->_redirect('*/*/'); return; + } catch (\Exception $e) { + $this->_logger->logException($e); + $this->_getSession()->addError(__('Internal error. Check exception log for details.')); + $this->_redirect('*/*'); + return; } } /** @var array $data */ $data = $this->getRequest()->getPost(); if (!empty($data)) { + // TODO: Move out work with API permissions to Web API module if (!isset($data['resource'])) { $integrationData['resource'] = array(); } $integrationData = array_merge($integrationData, $data); - $this->_registry->register(self::REGISTRY_KEY_CURRENT_INTEGRATION, $integrationData); if (!isset($integrationData[Info::DATA_ID])) { - $this->_integrationService->create($integrationData); + $integrationData = $this->_integrationService->create($integrationData); } else { - $this->_integrationService->update($integrationData); + $integrationData = $this->_integrationService->update($integrationData); + } + if (!$this->getRequest()->isXmlHttpRequest()) { + $this->_getSession() + ->addSuccess(__('The integration \'%1\' has been saved.', $integrationData[Info::DATA_NAME])); } - $this->_getSession() - ->addSuccess(__('The integration \'%1\' has been saved.', $integrationData[Info::DATA_NAME])); } else { $this->_getSession()->addError(__('The integration was not saved.')); } - $this->_redirect('*/*/'); - } catch (\Magento\Integration\Exception $e) { + if ($this->getRequest()->isXmlHttpRequest()) { + $this->getResponse()->setBody( + $this->_coreHelper->jsonEncode(['integrationId' => $integrationData[Info::DATA_ID]]) + ); + } else { + $this->_redirect('*/*/'); + } + } catch (IntegrationException $e) { $this->_getSession()->addError($e->getMessage())->setIntegrationData($integrationData); $this->_redirectOnSaveError(); } catch (\Magento\Core\Exception $e) { @@ -224,57 +249,109 @@ public function saveAction() } /** - * Activates the integration. Also contains intermediate steps (permissions confirmation and tokens). + * Show permissions popup. */ - public function activateAction() + public function permissionsDialogAction() { $integrationId = (int)$this->getRequest()->getParam(self::PARAM_INTEGRATION_ID); if ($integrationId) { - $integrationData = $this->_integrationService->get($integrationId); - if (!$integrationData[Info::DATA_ID]) { - $this->_getSession()->addError(__('This integration no longer exists.')); + try { + $integrationData = $this->_integrationService->get($integrationId)->getData(); + $this->_registry->register(self::REGISTRY_KEY_CURRENT_INTEGRATION, $integrationData); + } catch (IntegrationException $e) { + $this->_getSession()->addError($e->getMessage()); $this->_redirect('*/*/'); return; + } catch (\Exception $e) { + $this->_logger->logException($e); + $this->_getSession()->addError(__('Internal error. Check exception log for details.')); + $this->_redirect('*/*'); + return; } - $this->_registry->register(self::REGISTRY_KEY_CURRENT_INTEGRATION, $integrationData); } else { $this->_getSession()->addError(__('Integration ID is not specified or is invalid.')); $this->_redirect('*/*/'); return; } - $dialogName = $this->getRequest()->getParam(self::PARAM_DIALOG_ID); - - if (in_array($dialogName, [self::DIALOG_PERMISSIONS, self::DIALOG_TOKENS])) { - $this->_view->loadLayout($this->_getPopupHandleNames($dialogName)); - } else { - $this->_view->loadLayout(); + /** Add handles of the tabs which are defined in other modules */ + $handleNodes = $this->_view->getLayout()->getUpdate()->getFileLayoutUpdatesXml() + ->xpath('//referenceBlock[@name="integration.activate.permissions.tabs"]/../@id'); + $handles = array(); + if (is_array($handleNodes)) { + foreach ($handleNodes as $node) { + $handles[] = (string)$node; + } } - + $this->_view->loadLayout($handles); $this->_view->renderLayout(); } /** - * @param string $dialogName - * @return array + * Delete the integration. */ - protected function _getPopupHandleNames($dialogName) + public function deleteAction() { - $handles = [sprintf('%s_%s_popup', $this->_view->getDefaultLayoutHandle(), $dialogName)]; - - if ($dialogName === self::DIALOG_PERMISSIONS) { - $handleNodes = $this->_view->getLayout()->getUpdate()->getFileLayoutUpdatesXml() - ->xpath('//referenceBlock[@name="integration.activate.permissions.tabs"]/../@id'); - - if (is_array($handleNodes)) { - foreach ($handleNodes as $node) { - $handles[] = (string)$node; + $integrationId = (int)$this->getRequest()->getParam(self::PARAM_INTEGRATION_ID); + try { + if ($integrationId) { + $integrationData = $this->_integrationService->get($integrationId); + if ($this->_integrationData->isConfigType($integrationData)) { + $this->_getSession()->addError( + __("Uninstall the extension to remove integration '%1'.", $integrationData[Info::DATA_NAME]) + ); + $this->_redirect('*/*/'); + return; } + $integrationData = $this->_integrationService->delete($integrationId); + if (!$integrationData[Info::DATA_ID]) { + $this->_getSession()->addError(__('This integration no longer exists.')); + } else { + //Integration deleted successfully, now safe to delete the associated consumer data + if (isset($integrationData[Info::DATA_CONSUMER_ID])) { + $this->_oauthService->deleteConsumer($integrationData[Info::DATA_CONSUMER_ID]); + } + $this->_registry->register(self::REGISTRY_KEY_CURRENT_INTEGRATION, $integrationData); + $this->_getSession() + ->addSuccess(__("The integration '%1' has been deleted.", $integrationData[Info::DATA_NAME])); + } + } else { + $this->_getSession()->addError(__('Integration ID is not specified or is invalid.')); } + } catch (\Magento\Integration\Exception $e) { + $this->_getSession()->addError($e->getMessage()); + } catch (\Exception $e) { + $this->_logger->logException($e); } + $this->_redirect('*/*/'); + } - return $handles; + /** + * Show tokens popup. + */ + public function tokensDialogAction() + { + try { + $integrationId = $this->getRequest()->getParam('id'); + $integration = $this->_integrationService->get($integrationId); + $this->_oauthService->createAccessToken($integration->getConsumerId()); + $this->_registry->register( + self::REGISTRY_KEY_CURRENT_INTEGRATION, + $this->_integrationService->get($integrationId)->getData() + ); + } catch (\Magento\Core\Exception $e) { + $this->_getSession()->addError($e->getMessage()); + $this->_redirect('*/*'); + return; + } catch (\Exception $e) { + $this->_logger->logException($e); + $this->_getSession()->addError(__('Internal error. Check exception log for details.')); + $this->_redirect('*/*'); + return; + } + $this->_view->loadLayout(false); + $this->_view->renderLayout(); } /** @@ -289,4 +366,23 @@ protected function _redirectOnSaveError() $this->_redirect('*/*/new'); } } + + /** + * Don't actually redirect if we've got AJAX request - return redirect URL instead. + * + * @param string $path + * @param array $arguments + * @return $this|\Magento\Backend\App\AbstractAction + */ + protected function _redirect($path, $arguments = array()) + { + if ($this->getRequest()->isXmlHttpRequest()) { + $this->getResponse()->setBody( + $this->_coreHelper->jsonEncode(['_redirect' => $this->getUrl($path, $arguments)]) + ); + return $this; + } else { + return parent::_redirect($path, $arguments); + } + } } diff --git a/app/code/Magento/Integration/Helper/Data.php b/app/code/Magento/Integration/Helper/Data.php index 7becc725d7d0f..891756d4af411 100644 --- a/app/code/Magento/Integration/Helper/Data.php +++ b/app/code/Magento/Integration/Helper/Data.php @@ -24,6 +24,8 @@ namespace Magento\Integration\Helper; +use Magento\Integration\Model\Integration as IntegrationModel; + class Data extends \Magento\App\Helper\AbstractHelper { /** @@ -48,4 +50,16 @@ public function mapResources(array $resources) } return $output; } + + /** + * Check if integration is created using config file + * + * @param $integrationData + * @return bool true if integration is created using Config file + */ + public function isConfigType($integrationData) + { + return isset($integrationData[IntegrationModel::SETUP_TYPE]) + && $integrationData[IntegrationModel::SETUP_TYPE] == IntegrationModel::TYPE_CONFIG; + } } diff --git a/app/code/Magento/Integration/Helper/Oauth/Consumer.php b/app/code/Magento/Integration/Helper/Oauth/Consumer.php deleted file mode 100644 index 70cd70b5516cc..0000000000000 --- a/app/code/Magento/Integration/Helper/Oauth/Consumer.php +++ /dev/null @@ -1,144 +0,0 @@ -_storeManager = $storeManager; - $this->_consumerFactory = $consumerFactory; - $this->_tokenFactory = $tokenFactory; - $this->_dataHelper = $dataHelper; - $this->_httpClient = $httpClient; - $this->_logger = $logger; - } - - /** - * Create a new consumer account when an integration is installed. - * - * @param array $consumerData - Information provided by an integration when the integration is installed. - *
    -     * array(
    -     *     'name' => 'Integration Name',
    -     *     'key' => 'a6aa81cc3e65e2960a4879392445e718',
    -     *     'secret' => 'b7bb92dd4f76f3a71b598a4a3556f829'
    -     * )
    -     * 
    - * @return array - The integration (consumer) data. - * @throws \Magento\Core\Exception - * @throws \Magento\Oauth\Exception - */ - public function createConsumer($consumerData) - { - try { - $consumer = $this->_consumerFactory->create($consumerData); - $consumer->save(); - return $consumer->getData(); - } catch (\Magento\Core\Exception $exception) { - throw $exception; - } catch (\Exception $exception) { - throw new \Magento\Oauth\Exception(__('Unexpected error. Unable to create OAuth Consumer account.')); - } - } - - /** - * Execute post to integration (consumer) HTTP Post URL. Generate and return oauth_verifier. - * - * @param int $consumerId - The consumer Id. - * @param string $endpointUrl - The integration endpoint Url (for HTTP Post) - * @return string - The oauth_verifier. - * @throws \Magento\Core\Exception - * @throws \Magento\Oauth\Exception - */ - public function postToConsumer($consumerId, $endpointUrl) - { - try { - $consumer = $this->_consumerFactory->create()->load($consumerId); - if (!$consumer->getId()) { - throw new \Magento\Oauth\Exception( - __('A consumer with ID %1 does not exist', $consumerId), OauthInterface::ERR_PARAMETER_REJECTED); - } - $consumerData = $consumer->getData(); - $verifier = $this->_tokenFactory->create()->createVerifierToken($consumerId); - $storeBaseUrl = $this->_storeManager->getStore()->getBaseUrl(); - $this->_httpClient->setUri($endpointUrl); - $this->_httpClient->setParameterPost( - array( - 'oauth_consumer_key' => $consumerData['key'], - 'oauth_consumer_secret' => $consumerData['secret'], - 'store_base_url' => $storeBaseUrl, - 'oauth_verifier' => $verifier->getVerifier() - ) - ); - $maxredirects = $this->_dataHelper->getConsumerPostMaxRedirects(); - $timeout = $this->_dataHelper->getConsumerPostTimeout(); - $this->_httpClient->setConfig(array('maxredirects' => $maxredirects, 'timeout' => $timeout)); - $this->_httpClient->request(\Magento\HTTP\ZendClient::POST); - return $verifier->getVerifier(); - } catch (\Magento\Core\Exception $exception) { - throw $exception; - } catch (\Magento\Oauth\Exception $exception) { - throw $exception; - } catch (\Exception $exception) { - $this->_logger->logException($exception); - throw new \Magento\Oauth\Exception(__('Unable to post data to consumer due to an unexpected error')); - } - } -} diff --git a/app/code/Magento/Integration/Model/Config/Reader.php b/app/code/Magento/Integration/Model/Config/Reader.php index 4fd412169b732..fd252136de43f 100644 --- a/app/code/Magento/Integration/Model/Config/Reader.php +++ b/app/code/Magento/Integration/Model/Config/Reader.php @@ -39,18 +39,33 @@ class Reader extends \Magento\Config\Reader\Filesystem /** * @param \Magento\Config\FileResolverInterface $fileResolver - * @param \Magento\Integration\Model\Config\Converter $converter - * @param \Magento\Integration\Model\Config\SchemaLocator $schemeLocator + * @param Converter $converter + * @param SchemaLocator $schemaLocator * @param \Magento\Config\ValidationStateInterface $validationState * @param string $fileName + * @param array $idAttributes + * @param string $domDocumentClass + * @param string $defaultScope */ public function __construct( \Magento\Config\FileResolverInterface $fileResolver, \Magento\Integration\Model\Config\Converter $converter, - \Magento\Integration\Model\Config\SchemaLocator $schemeLocator, + \Magento\Integration\Model\Config\SchemaLocator $schemaLocator, \Magento\Config\ValidationStateInterface $validationState, - $fileName = 'integration\config.xml' + $fileName = 'integration\config.xml', + $idAttributes = array(), + $domDocumentClass = 'Magento\Config\Dom', + $defaultScope = 'global' ) { - parent::__construct($fileResolver, $converter, $schemeLocator, $validationState, $fileName); + parent::__construct( + $fileResolver, + $converter, + $schemaLocator, + $validationState, + $fileName, + $idAttributes, + $domDocumentClass, + $defaultScope + ); } } diff --git a/app/code/Magento/Integration/Model/Integration.php b/app/code/Magento/Integration/Model/Integration.php index 1822d2e11ef35..0659bb4679586 100644 --- a/app/code/Magento/Integration/Model/Integration.php +++ b/app/code/Magento/Integration/Model/Integration.php @@ -36,6 +36,8 @@ * @method \int getType() * @method Integration setType(\int $value) * @method \string getEndpoint() + * @method Integration setConsumerId(\string $consumerId) + * @method \string getConsumerId() * @method Integration setEndpoint(\string $endpoint) * @method \string getCreatedAt() * @method Integration setCreatedAt(\string $createdAt) @@ -66,6 +68,7 @@ class Integration extends \Magento\Core\Model\AbstractModel const EMAIL = 'email'; const ENDPOINT = 'endpoint'; const SETUP_TYPE = 'setup_type'; + const CONSUMER_ID = 'consumer_id'; /**#@-*/ /** @@ -107,7 +110,7 @@ protected function _construct() /** * Prepare data to be saved to database * - * @return \Magento\Integration\Model\Integration + * @return Integration */ protected function _beforeSave() { @@ -118,4 +121,15 @@ protected function _beforeSave() $this->setUpdatedAt($this->_dateTime->formatDate(true)); return $this; } + + /** + * Load integration by oAuth consumer ID. + * + * @param int $consumerId + * @return Integration + */ + public function loadByConsumerId($consumerId) + { + return $this->load($consumerId, self::CONSUMER_ID); + } } diff --git a/app/code/Magento/Integration/Model/Manager.php b/app/code/Magento/Integration/Model/Manager.php index b19c32335d485..50f3e9152524b 100644 --- a/app/code/Magento/Integration/Model/Manager.php +++ b/app/code/Magento/Integration/Model/Manager.php @@ -84,11 +84,11 @@ public function processIntegrationConfig(array $integrationNames) } $integrationData[Integration::SETUP_TYPE] = Integration::TYPE_CONFIG; // If it already exists, update it - $data = $this->_integrationService->findByName($name); - if (isset($data[Integration::ID])) { + $integration = $this->_integrationService->findByName($name); + if ($integration->getId()) { //If Integration already exists, update it. //For now we will just overwrite the integration with same name but we will need a long term solution - $integrationData[Integration::ID] = $data[Integration::ID]; + $integrationData[Integration::ID] = $integration->getId(); $this->_integrationService->update($integrationData); } else { $this->_integrationService->create($integrationData); @@ -97,4 +97,4 @@ public function processIntegrationConfig(array $integrationNames) } return $integrationNames; } -} \ No newline at end of file +} diff --git a/app/code/Magento/Integration/Model/Oauth/Token.php b/app/code/Magento/Integration/Model/Oauth/Token.php index f5bf1f6951559..22117849efb7a 100644 --- a/app/code/Magento/Integration/Model/Oauth/Token.php +++ b/app/code/Magento/Integration/Model/Oauth/Token.php @@ -24,34 +24,38 @@ namespace Magento\Integration\Model\Oauth; +use Magento\Oauth\Helper\Oauth as OauthHelper; +use Magento\Integration\Model\Resource\Oauth\Token\Collection as TokenCollection; +use Magento\Oauth\Exception as OauthException; + /** * oAuth token model * * @method string getName() Consumer name (joined from consumer table) - * @method \Magento\Integration\Model\Resource\Oauth\Token\Collection getCollection() - * @method \Magento\Integration\Model\Resource\Oauth\Token\Collection getResourceCollection() + * @method TokenCollection getCollection() + * @method TokenCollection getResourceCollection() * @method \Magento\Integration\Model\Resource\Oauth\Token getResource() * @method \Magento\Integration\Model\Resource\Oauth\Token _getResource() * @method int getConsumerId() - * @method \Magento\Integration\Model\Oauth\Token setConsumerId() setConsumerId(int $consumerId) + * @method Token setConsumerId() setConsumerId(int $consumerId) * @method int getAdminId() - * @method \Magento\Integration\Model\Oauth\Token setAdminId() setAdminId(int $adminId) + * @method Token setAdminId() setAdminId(int $adminId) * @method int getCustomerId() - * @method \Magento\Integration\Model\Oauth\Token setCustomerId() setCustomerId(int $customerId) + * @method Token setCustomerId() setCustomerId(int $customerId) * @method string getType() - * @method \Magento\Integration\Model\Oauth\Token setType() setType(string $type) + * @method Token setType() setType(string $type) * @method string getCallbackUrl() - * @method \Magento\Integration\Model\Oauth\Token setCallbackUrl() setCallbackUrl(string $callbackUrl) + * @method Token setCallbackUrl() setCallbackUrl(string $callbackUrl) * @method string getCreatedAt() - * @method \Magento\Integration\Model\Oauth\Token setCreatedAt() setCreatedAt(string $createdAt) + * @method Token setCreatedAt() setCreatedAt(string $createdAt) * @method string getToken() - * @method \Magento\Integration\Model\Oauth\Token setToken() setToken(string $token) + * @method Token setToken() setToken(string $token) * @method string getSecret() - * @method \Magento\Integration\Model\Oauth\Token setSecret() setSecret(string $tokenSecret) + * @method Token setSecret() setSecret(string $tokenSecret) * @method int getRevoked() - * @method \Magento\Integration\Model\Oauth\Token setRevoked() setRevoked(int $revoked) + * @method Token setRevoked() setRevoked(int $revoked) * @method int getAuthorized() - * @method \Magento\Integration\Model\Oauth\Token setAuthorized() setAuthorized(int $authorized) + * @method Token setAuthorized() setAuthorized(int $authorized) * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class Token extends \Magento\Core\Model\AbstractModel @@ -71,7 +75,7 @@ class Token extends \Magento\Core\Model\AbstractModel const USER_TYPE_CUSTOMER = 'customer'; /**#@- */ - /** @var \Magento\Oauth\Helper\Oauth */ + /** @var OauthHelper */ protected $_oauthHelper; /** @var \Magento\Integration\Helper\Oauth\Data */ @@ -97,7 +101,7 @@ class Token extends \Magento\Core\Model\AbstractModel * @param \Magento\Stdlib\DateTime $dateTime * @param \Magento\Integration\Model\Oauth\Consumer\Factory $consumerFactory * @param \Magento\Integration\Helper\Oauth\Data $oauthData - * @param \Magento\Oauth\Helper\Oauth $oauthHelper + * @param OauthHelper $oauthHelper * @param \Magento\Core\Model\Resource\AbstractResource $resource * @param \Magento\Data\Collection\Db $resourceCollection * @param array $data @@ -112,7 +116,7 @@ public function __construct( \Magento\Stdlib\DateTime $dateTime, \Magento\Integration\Model\Oauth\Consumer\Factory $consumerFactory, \Magento\Integration\Helper\Oauth\Data $oauthData, - \Magento\Oauth\Helper\Oauth $oauthHelper, + OauthHelper $oauthHelper, \Magento\Core\Model\Resource\AbstractResource $resource = null, \Magento\Data\Collection\Db $resourceCollection = null, array $data = array() @@ -139,7 +143,7 @@ protected function _construct() /** * "After save" actions * - * @return \Magento\Integration\Model\Oauth\Token + * @return Token */ protected function _afterSave() { @@ -156,7 +160,7 @@ protected function _afterSave() * Generate an oauth_verifier for a consumer, if the consumer doesn't already have one. * * @param int $consumerId - The id of the consumer associated with the verifier to be generated. - * @return \Magento\Integration\Model\Oauth\Token + * @return Token */ public function createVerifierToken($consumerId) { @@ -169,7 +173,7 @@ public function createVerifierToken($consumerId) 'token' => $this->_oauthHelper->generateToken(), 'secret' => $this->_oauthHelper->generateTokenSecret(), 'verifier' => $this->_oauthHelper->generateVerifier(), - 'callback_url' => \Magento\Oauth\Helper\Oauth::CALLBACK_ESTABLISHED + 'callback_url' => OauthHelper::CALLBACK_ESTABLISHED )); $this->save(); } @@ -181,23 +185,23 @@ public function createVerifierToken($consumerId) * * @param int $userId Authorization user identifier * @param string $userType Authorization user type - * @return \Magento\Integration\Model\Oauth\Token - * @throws \Magento\Oauth\Exception + * @return Token + * @throws OauthException */ public function authorize($userId, $userType) { if (!$this->getId() || !$this->getConsumerId()) { - throw new \Magento\Oauth\Exception(__('Token is not ready to be authorized')); + throw new OauthException(__('Token is not ready to be authorized')); } if ($this->getAuthorized()) { - throw new \Magento\Oauth\Exception(__('Token is already authorized')); + throw new OauthException(__('Token is already authorized')); } if (self::USER_TYPE_ADMIN == $userType) { $this->setAdminId($userId); } elseif (self::USER_TYPE_CUSTOMER == $userType) { $this->setCustomerId($userId); } else { - throw new \Magento\Oauth\Exception(__('User type is unknown')); + throw new OauthException(__('User type is unknown')); } $this->setVerifier($this->_oauthHelper->generateVerifier()); @@ -212,13 +216,13 @@ public function authorize($userId, $userType) /** * Convert token to access type * - * @return \Magento\Integration\Model\Oauth\Token - * @throws \Magento\Oauth\Exception + * @return Token + * @throws OauthException */ public function convertToAccess() { if (self::TYPE_REQUEST != $this->getType()) { - throw new \Magento\Oauth\Exception(__('Cannot convert to access token due to token is not request type')); + throw new OauthException(__('Cannot convert to access token due to token is not request type')); } $this->setType(self::TYPE_ACCESS); @@ -234,10 +238,11 @@ public function convertToAccess() * * @param int $entityId Token identifier * @param string $callbackUrl Callback URL - * @return \Magento\Integration\Model\Oauth\Token + * @return Token */ public function createRequestToken($entityId, $callbackUrl) { + $callbackUrl = !empty($callbackUrl) ? $callbackUrl : OauthHelper::CALLBACK_ESTABLISHED; $this->setData(array( 'entity_id' => $entityId, 'type' => self::TYPE_REQUEST, @@ -254,7 +259,7 @@ public function createRequestToken($entityId, $callbackUrl) * Get OAuth user type * * @return string - * @throws \Magento\Oauth\Exception + * @throws OauthException */ public function getUserType() { @@ -263,7 +268,7 @@ public function getUserType() } elseif ($this->getCustomerId()) { return self::USER_TYPE_CUSTOMER; } else { - throw new \Magento\Oauth\Exception(__('User type is unknown')); + throw new OauthException(__('User type is unknown')); } } @@ -299,39 +304,39 @@ protected function _beforeSave() * Validate data * * @return array|bool - * @throws \Magento\Oauth\Exception Throw exception on fail validation + * @throws OauthException Throw exception on fail validation */ public function validate() { - if (\Magento\Oauth\Helper\Oauth::CALLBACK_ESTABLISHED != $this->getCallbackUrl() + if (OauthHelper::CALLBACK_ESTABLISHED != $this->getCallbackUrl() && !$this->_urlValidator->isValid($this->getCallbackUrl()) ) { $messages = $this->_urlValidator->getMessages(); - throw new \Magento\Oauth\Exception(array_shift($messages)); + throw new OauthException(array_shift($messages)); } /** @var $validatorLength \Magento\Integration\Model\Oauth\Consumer\Validator\KeyLength */ $validatorLength = $this->_keyLengthFactory->create(); - $validatorLength->setLength(\Magento\Oauth\Helper\Oauth::LENGTH_TOKEN_SECRET); + $validatorLength->setLength(OauthHelper::LENGTH_TOKEN_SECRET); $validatorLength->setName('Token Secret Key'); if (!$validatorLength->isValid($this->getSecret())) { $messages = $validatorLength->getMessages(); - throw new \Magento\Oauth\Exception(array_shift($messages)); + throw new OauthException(array_shift($messages)); } - $validatorLength->setLength(\Magento\Oauth\Helper\Oauth::LENGTH_TOKEN); + $validatorLength->setLength(OauthHelper::LENGTH_TOKEN); $validatorLength->setName('Token Key'); if (!$validatorLength->isValid($this->getToken())) { $messages = $validatorLength->getMessages(); - throw new \Magento\Oauth\Exception(array_shift($messages)); + throw new OauthException(array_shift($messages)); } if (null !== ($verifier = $this->getVerifier())) { - $validatorLength->setLength(\Magento\Oauth\Helper\Oauth::LENGTH_TOKEN_VERIFIER); + $validatorLength->setLength(OauthHelper::LENGTH_TOKEN_VERIFIER); $validatorLength->setName('Verifier Key'); if (!$validatorLength->isValid($verifier)) { $messages = $validatorLength->getMessages(); - throw new \Magento\Oauth\Exception(array_shift($messages)); + throw new OauthException(array_shift($messages)); } } return true; @@ -366,7 +371,7 @@ public function getVerifier() * Set the token's verifier. * * @param string $verifier - * @return \Magento\Integration\Model\Oauth\Token + * @return Token */ public function setVerifier($verifier) { diff --git a/app/code/Magento/Integration/Model/Oauth/Token/Provider.php b/app/code/Magento/Integration/Model/Oauth/Token/Provider.php index c493b8542177b..cb4aa771276c4 100644 --- a/app/code/Magento/Integration/Model/Oauth/Token/Provider.php +++ b/app/code/Magento/Integration/Model/Oauth/Token/Provider.php @@ -79,7 +79,7 @@ public function validateConsumer($consumer) */ public function createRequestToken($consumer) { - $token = $this->_getTokenByConsumer($consumer->getId()); + $token = $this->getTokenByConsumerId($consumer->getId()); if ($token->getType() != \Magento\Integration\Model\Oauth\Token::TYPE_VERIFIER) { throw new \Magento\Oauth\Exception( __('Cannot create request token because consumer token is not a verifier token'), @@ -119,7 +119,7 @@ public function validateRequestToken($requestToken, $consumer, $oauthVerifier) public function getAccessToken($consumer) { /** TODO: log the request token in dev mode since its not persisted. */ - $token = $this->_getTokenByConsumer($consumer->getId()); + $token = $this->getTokenByConsumerId($consumer->getId()); if (\Magento\Integration\Model\Oauth\Token::TYPE_REQUEST != $token->getType()) { throw new \Magento\Oauth\Exception( __('Cannot get access token because consumer token is not a request token')); @@ -168,7 +168,7 @@ public function validateAccessToken($accessToken) __('Access token has been revoked'), OauthInterface::ERR_TOKEN_REVOKED); } - return true; + return $token->getConsumerId(); } /** @@ -271,7 +271,7 @@ protected function _getToken($token) * @return \Magento\Integration\Model\Oauth\Token * @throws \Magento\Oauth\Exception */ - protected function _getTokenByConsumer($consumerId) + public function getTokenByConsumerId($consumerId) { $token = $this->_tokenFactory->create()->load($consumerId, 'consumer_id'); diff --git a/app/code/Magento/Integration/Service/IntegrationV1.php b/app/code/Magento/Integration/Service/IntegrationV1.php index 49d3f16b533c6..91a8b838b8e88 100644 --- a/app/code/Magento/Integration/Service/IntegrationV1.php +++ b/app/code/Magento/Integration/Service/IntegrationV1.php @@ -21,13 +21,12 @@ * @copyright Copyright (c) 2013 X.commerce, Inc. (http://www.magentocommerce.com) * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ + namespace Magento\Integration\Service; -use Magento\Authz\Model\UserIdentifier; -use Magento\Authz\Service\AuthorizationV1Interface as AuthorizationInterface; use Magento\Integration\Model\Integration\Factory as IntegrationFactory; -use Magento\Authz\Model\UserIdentifier\Factory as UserIdentifierFactory; use Magento\Integration\Model\Integration as IntegrationModel; +use Magento\Integration\Service\OauthV1Interface as IntegrationOauthService; /** * Integration Service. @@ -39,27 +38,21 @@ class IntegrationV1 implements \Magento\Integration\Service\IntegrationV1Interfa /** @var IntegrationFactory */ protected $_integrationFactory; - /** @var AuthorizationInterface */ - protected $_authzService; - - /** @var UserIdentifierFactory */ - protected $_userIdentifierFactory; + /** @var IntegrationOauthService */ + protected $_oauthService; /** * Construct and initialize Integration Factory * * @param IntegrationFactory $integrationFactory - * @param AuthorizationInterface $authzService - * @param UserIdentifierFactory $userIdentifierFactory + * @param IntegrationOauthService $oauthService */ public function __construct( IntegrationFactory $integrationFactory, - AuthorizationInterface $authzService, - UserIdentifierFactory $userIdentifierFactory + IntegrationOauthService $oauthService ) { $this->_integrationFactory = $integrationFactory; - $this->_authzService = $authzService; - $this->_userIdentifierFactory = $userIdentifierFactory; + $this->_oauthService = $oauthService; } /** @@ -69,9 +62,13 @@ public function create(array $integrationData) { $this->_checkIntegrationByName($integrationData['name']); $integration = $this->_integrationFactory->create($integrationData); + // TODO: Think about double save issue $integration->save(); - $this->_saveApiPermissions($integration); - return $integration->getData(); + $consumerName = 'Integration' . $integration->getId(); + $consumer = $this->_oauthService->createConsumer(array('name' => $consumerName)); + $integration->setConsumerId($consumer->getId()); + $integration->save(); + return $integration; } /** @@ -86,8 +83,18 @@ public function update(array $integrationData) } $integration->addData($integrationData); $integration->save(); - $this->_saveApiPermissions($integration); - return $integration->getData(); + return $integration; + } + + /** + * {@inheritdoc} + */ + public function delete($integrationId) + { + $integration = $this->_loadIntegrationById($integrationId); + $data = $integration->getData(); + $integration->delete(); + return $data; } /** @@ -96,8 +103,9 @@ public function update(array $integrationData) public function get($integrationId) { $integration = $this->_loadIntegrationById($integrationId); - $this->_addAllowedResources($integration); - return $integration->getData(); + $this->_addOauthConsumerData($integration); + $this->_addOauthTokenData($integration); + return $integration; } /** @@ -105,14 +113,10 @@ public function get($integrationId) */ public function findByName($name) { - if (!isset($name) || trim($name) === '') { - return null; - } $integration = $this->_integrationFactory->create()->load($name, 'name'); - return $integration->getData(); + return $integration; } - /** * Check if an integration exists by the name * @@ -138,58 +142,38 @@ protected function _loadIntegrationById($integrationId) { $integration = $this->_integrationFactory->create()->load($integrationId); if (!$integration->getId()) { - throw new \Magento\Integration\Exception(__("Integration with ID '%1' doesn't exist.", $integrationId)); + throw new \Magento\Integration\Exception(__("Integration with ID '%1' does not exist.", $integrationId)); } return $integration; } /** - * Persist API permissions. - * - * Permissions are expected to be set to integration object by 'resource' key. - * If 'all_resources' is set and is evaluated to true, permissions to all resources will be granted. + * Add oAuth consumer key and secret. * * @param IntegrationModel $integration */ - protected function _saveApiPermissions(IntegrationModel $integration) + protected function _addOauthConsumerData(IntegrationModel $integration) { if ($integration->getId()) { - $userIdentifier = $this->_createUserIdentifier($integration->getId()); - if ($integration->getData('all_resources')) { - $this->_authzService->grantAllPermissions($userIdentifier); - } else if (is_array($integration->getData('resource'))) { - $this->_authzService->grantPermissions($userIdentifier, $integration->getData('resource')); - } else { - $this->_authzService->grantPermissions($userIdentifier, array()); - } + $consumer = $this->_oauthService->loadConsumer($integration->getConsumerId()); + $integration->setData('consumer_key', $consumer->getKey()); + $integration->setData('consumer_secret', $consumer->getSecret()); } } /** - * Add the list of allowed resources to the integration object data by 'resource' key. + * Add oAuth token and token secret. * * @param IntegrationModel $integration */ - protected function _addAllowedResources(IntegrationModel $integration) + protected function _addOauthTokenData(IntegrationModel $integration) { if ($integration->getId()) { - $userIdentifier = $this->_createUserIdentifier($integration->getId()); - $integration->setData('resource', $this->_authzService->getAllowedResources($userIdentifier)); + $accessToken = $this->_oauthService->getAccessToken($integration->getConsumerId()); + if ($accessToken) { + $integration->setData('token', $accessToken->getToken()); + $integration->setData('token_secret', $accessToken->getSecret()); + } } } - - /** - * Instantiate new user identifier for an integration. - * - * @param int $integrationId - * @return UserIdentifier - */ - protected function _createUserIdentifier($integrationId) - { - $userIdentifier = $this->_userIdentifierFactory->create( - UserIdentifier::USER_TYPE_INTEGRATION, - (int)$integrationId - ); - return $userIdentifier; - } } diff --git a/app/code/Magento/Integration/Service/IntegrationV1Interface.php b/app/code/Magento/Integration/Service/IntegrationV1Interface.php index 75a8b4e6bd56e..d5c47a0d47a65 100644 --- a/app/code/Magento/Integration/Service/IntegrationV1Interface.php +++ b/app/code/Magento/Integration/Service/IntegrationV1Interface.php @@ -21,19 +21,21 @@ * @copyright Copyright (c) 2013 X.commerce, Inc. (http://www.magentocommerce.com) * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ + namespace Magento\Integration\Service; +use \Magento\Integration\Model\Integration as IntegrationModel; + /** * Integration Service Interface */ interface IntegrationV1Interface { - /** * Create a new Integration * * @param array $integrationData - * @return array Integration data + * @return IntegrationModel * @throws \Magento\Integration\Exception */ public function create(array $integrationData); @@ -42,7 +44,7 @@ public function create(array $integrationData); * Get the details of a specific Integration. * * @param int $integrationId - * @return array Integration data + * @return IntegrationModel * @throws \Magento\Integration\Exception */ public function get($integrationId); @@ -50,20 +52,26 @@ public function get($integrationId); /** * Find Integration by name. * - * @param int $integrationName + * @param string $integrationName * @return array|null Integration data or null if not found - * @throws \Magento\Integration\Exception */ public function findByName($integrationName); - /** - * Update a Integration. + * Update an Integration. * * @param array $integrationData - * @return array Integration data + * @return IntegrationModel * @throws \Magento\Integration\Exception */ public function update(array $integrationData); + /** + * Delete an Integration. + * + * @param int $integrationId + * @return array Integration data + * @throws \Magento\Integration\Exception if the integration does not exist or cannot be deleted + */ + public function delete($integrationId); } diff --git a/app/code/Magento/Integration/Service/OauthV1.php b/app/code/Magento/Integration/Service/OauthV1.php new file mode 100644 index 0000000000000..a4e8d7ec2db8d --- /dev/null +++ b/app/code/Magento/Integration/Service/OauthV1.php @@ -0,0 +1,234 @@ +_storeManager = $storeManager; + $this->_consumerFactory = $consumerFactory; + $this->_tokenFactory = $tokenFactory; + $this->_dataHelper = $dataHelper; + $this->_httpClient = $httpClient; + $this->_logger = $logger; + $this->_oauthHelper = $oauthHelper; + $this->_tokenProvider = $tokenProvider; + } + + /** + * {@inheritdoc} + */ + public function createConsumer($consumerData) + { + try { + $consumerData['key'] = $this->_oauthHelper->generateConsumerKey(); + $consumerData['secret'] = $this->_oauthHelper->generateConsumerSecret(); + $consumer = $this->_consumerFactory->create($consumerData); + $consumer->save(); + return $consumer; + } catch (\Magento\Core\Exception $exception) { + throw $exception; + } catch (\Exception $exception) { + throw new \Magento\Oauth\Exception(__('Unexpected error. Unable to create oAuth consumer account.')); + } + } + + /** + * {@inheritdoc} + */ + public function createAccessToken($consumerId) + { + // TODO: This implementation is temporary and should be changed after requirements clarification + try { + $consumer = $this->_consumerFactory->create()->load($consumerId); + $existingToken = $this->_tokenProvider->getTokenByConsumerId($consumer->getId()); + } catch (\Exception $e) { + } + if (!isset($existingToken)) { + $consumer = $this->_consumerFactory->create()->load($consumerId); + $this->_tokenFactory->create()->createVerifierToken($consumerId); + $this->_tokenProvider->createRequestToken($consumer); + $this->_tokenProvider->getAccessToken($consumer); + return true; + } + return false; + } + + /** + * {@inheritdoc} + */ + public function getAccessToken($consumerId) + { + try { + $consumer = $this->_consumerFactory->create()->load($consumerId); + $token = $this->_tokenProvider->getTokenByConsumerId($consumer->getId()); + if ($token->getType() != Token::TYPE_ACCESS) { + return false; + } + } catch (\Exception $e) { + return false; + } + return $token; + } + + /** + * {@inheritdoc} + */ + public function loadConsumer($consumerId) + { + try { + return $this->_consumerFactory->create()->load($consumerId); + } catch (\Magento\Core\Exception $exception) { + throw $exception; + } catch (\Exception $exception) { + throw new \Magento\Oauth\Exception(__('Unexpected error. Unable to load oAuth consumer account.')); + } + } + + /** + * {@inheritdoc} + */ + public function postToConsumer($consumerId, $endpointUrl) + { + try { + $consumer = $this->_consumerFactory->create()->load($consumerId); + if (!$consumer->getId()) { + throw new \Magento\Oauth\Exception( + __('A consumer with ID %1 does not exist', $consumerId), OauthInterface::ERR_PARAMETER_REJECTED); + } + $consumerData = $consumer->getData(); + $verifier = $this->_tokenFactory->create()->createVerifierToken($consumerId); + $storeBaseUrl = $this->_storeManager->getStore()->getBaseUrl(); + $this->_httpClient->setUri($endpointUrl); + $this->_httpClient->setParameterPost( + array( + 'oauth_consumer_key' => $consumerData['key'], + 'oauth_consumer_secret' => $consumerData['secret'], + 'store_base_url' => $storeBaseUrl, + 'oauth_verifier' => $verifier->getVerifier() + ) + ); + $maxredirects = $this->_dataHelper->getConsumerPostMaxRedirects(); + $timeout = $this->_dataHelper->getConsumerPostTimeout(); + $this->_httpClient->setConfig(array('maxredirects' => $maxredirects, 'timeout' => $timeout)); + $this->_httpClient->request(\Magento\HTTP\ZendClient::POST); + return $verifier->getVerifier(); + } catch (\Magento\Core\Exception $exception) { + throw $exception; + } catch (\Magento\Oauth\Exception $exception) { + throw $exception; + } catch (\Exception $exception) { + $this->_logger->logException($exception); + throw new \Magento\Oauth\Exception(__('Unable to post data to consumer due to an unexpected error')); + } + } + + /** + * {@inheritdoc} + */ + public function deleteConsumer($consumerId) + { + $consumer = $this->_loadConsumerById($consumerId); + $data = $consumer->getData(); + $consumer->delete(); + return $data; + } + + /** + * Load consumer by id. + * + * @param int $consumerId + * @return ConsumerModel + * @throws \Magento\Integration\Exception + */ + protected function _loadConsumerById($consumerId) + { + $consumer = $this->_consumerFactory->create()->load($consumerId); + if (!$consumer->getId()) { + throw new \Magento\Integration\Exception(__("Consumer with ID '%1' does not exist.", $consumerId)); + } + return $consumer; + } +} diff --git a/app/code/Magento/Integration/Service/OauthV1Interface.php b/app/code/Magento/Integration/Service/OauthV1Interface.php new file mode 100644 index 0000000000000..4f1593d2d1d61 --- /dev/null +++ b/app/code/Magento/Integration/Service/OauthV1Interface.php @@ -0,0 +1,94 @@ + + * array( + * 'name' => 'Integration Name', + * '...' => '...', // Other consumer data can be passed as well + * ) + * + * @return \Magento\Integration\Model\Oauth\Consumer + * @throws \Magento\Core\Exception + * @throws \Magento\Oauth\Exception + */ + public function createConsumer($consumerData); + + /** + * Create access token for provided consumer. + * + * @param int $consumerId + * @return bool If token was created + */ + public function createAccessToken($consumerId); + + /** + * Retrieve access token assigned to the consumer. + * + * @param int $consumerId + * @return Token|bool Return false if no access token is available. + */ + public function getAccessToken($consumerId); + + /** + * Load consumer by its ID. + * + * @param int $consumerId + * @return \Magento\Integration\Model\Oauth\Consumer + * @throws \Magento\Oauth\Exception + * @throws \Magento\Core\Exception + */ + public function loadConsumer($consumerId); + + /** + * Execute post to integration (consumer) HTTP Post URL. Generate and return oauth_verifier. + * + * @param int $consumerId - The consumer Id. + * @param string $endpointUrl - The integration endpoint Url (for HTTP Post) + * @return string - The oauth_verifier. + * @throws \Magento\Core\Exception + * @throws \Magento\Oauth\Exception + */ + public function postToConsumer($consumerId, $endpointUrl); + + /** + * Delete the consumer data associated with the integration including its token and nonce + * + * @param int $consumerId + * @return array Consumer data array + */ + public function deleteConsumer($consumerId); +} diff --git a/app/code/Magento/Integration/etc/cache.xml b/app/code/Magento/Integration/etc/cache.xml index a2d8b29b6a613..40469997ae8a0 100644 --- a/app/code/Magento/Integration/etc/cache.xml +++ b/app/code/Magento/Integration/etc/cache.xml @@ -24,7 +24,7 @@ */ --> - + Integration configuration file. diff --git a/app/code/Magento/Integration/etc/di.xml b/app/code/Magento/Integration/etc/di.xml index 15c3df5d0ffc5..88e74ce49e8d1 100644 --- a/app/code/Magento/Integration/etc/di.xml +++ b/app/code/Magento/Integration/etc/di.xml @@ -25,6 +25,7 @@ --> + diff --git a/app/code/Magento/Integration/view/adminhtml/integration.css b/app/code/Magento/Integration/view/adminhtml/integration.css index f303d5503fb1c..bd8e90ef861a6 100644 --- a/app/code/Magento/Integration/view/adminhtml/integration.css +++ b/app/code/Magento/Integration/view/adminhtml/integration.css @@ -68,6 +68,10 @@ content: '\e05b'; } +#integrationGrid_table .action.info:before { + content: '\e07e'; /* TOFIX: Need to get the proper character code */ +} + #integrationGrid_table .action.delete:before { content: '\e07f'; } @@ -86,6 +90,10 @@ text-align: right; } +.no-close .ui-dialog-titlebar-close { + display: none; +} + #integration_token_base_fieldset input[readonly] { cursor: copy; } diff --git a/app/code/Magento/Integration/view/adminhtml/integration/popup_container.phtml b/app/code/Magento/Integration/view/adminhtml/integration/popup_container.phtml index 59fc19b33e690..d4696852e62eb 100644 --- a/app/code/Magento/Integration/view/adminhtml/integration/popup_container.phtml +++ b/app/code/Magento/Integration/view/adminhtml/integration/popup_container.phtml @@ -28,10 +28,13 @@ ?> + diff --git a/app/code/Magento/Integration/view/adminhtml/js/integration.js b/app/code/Magento/Integration/view/adminhtml/js/integration.js index 6e4e805e34f28..e67ff6f9db41a 100644 --- a/app/code/Magento/Integration/view/adminhtml/js/integration.js +++ b/app/code/Magento/Integration/view/adminhtml/js/integration.js @@ -24,6 +24,80 @@ /*global FORM_KEY*/ /*global integration*/ (function($, window) { + "use strict"; + $.widget('mage.integration', { + /** + * Options common to all instances of this widget. + * @type {Object} + */ + options: { + /** + * URL of the integration grid. + * @type {String} + */ + gridUrl: '' + }, + + /** + * Bind event handler for the action when admin clicks "Save & Activate" button. + * @private + */ + _create: function () { + if ($('#save-split-button-activate').length) { + // We're on the "New integration" page - bind related handler + this._form = $('#edit_form'); + this._form.on('saveAndActivate', $.proxy(this._saveAndActivate, this)); + } + }, + + /** + * Save new integration, then kick off the activate dialog. + * @private + */ + _saveAndActivate: function () { + if (this._form.validation && !this._form.validation('isValid')) { + return false; + } + + $.ajax({ + url: this._form.prop('action'), + type: 'post', + data: this._form.serialize(), + dataType: 'json', + context: this, + beforeSend: function () { + $('body').trigger('processStart'); + }, + success: function (data) { + if (data['_redirect']) { + window.location.href = data['_redirect']; + } else if (data['integrationId']) { + window.integration.popup.show($('').attr({ + 'data-row-dialog': 'permissions', + 'data-row-id': data['integrationId'], + 'data-row-name': $('#integration_properties_name').val() + })); + var that = this; + $('#integration-popup-container').on('dialogclose', function () { + $('body').trigger('processStart'); + window.location.href = that.options.gridUrl; + return false; + }); + } + }, + error: function (jqXHR, status, error) { + alert($.mage.__('Sorry, something went wrong. Please try again later.')); + console && console.log(status + ': ' + error + "\nResponse text:\n" + jqXHR.responseText); + }, + complete: function () { + jQuery('body').trigger('processStop'); + } + }); + + return true; + } + }); + window.Integration = function (permissionsDialogUrl, tokensDialogUrl, deactivateDialogUrl, reauthorizeDialogUrl) { var url = { permissions: permissionsDialogUrl, @@ -33,8 +107,6 @@ }; var _showPopup = function (dialog, title, okButton, url) { - var that = this; - $.ajax({ url: url, cache: false, @@ -53,7 +125,7 @@ var buttons = [{ text: $.mage.__('Cancel'), click: function() { - $(this).dialog('destroy'); + $(this).dialog('close'); } }]; @@ -135,4 +207,32 @@ } }; }; + + /** + * Confirm dialog for delete integration action + */ + $(function() { + $('#integrationGrid_table').on('click', 'button#delete', function(e){ + $('#integration-delete-container').dialog({ + modal: true, + autoOpen: true, + resizable: false, + minHeight: 200, + minWidth: 300, + dialogClass: "no-close", + position: {at: 'top'}, + buttons: { + Cancel: function() { + $(this).dialog( "close" ); + }, + Delete: function() { + $(this).dialog( "close" ); + window.location.href = $(e.target).data('url'); + } + } + }); + e.stopPropagation(); + }); + }); + })(jQuery, window); diff --git a/app/code/Magento/Integration/view/adminhtml/layout/adminhtml_integration_edit.xml b/app/code/Magento/Integration/view/adminhtml/layout/adminhtml_integration_edit.xml index 65c4a96273902..d5b1ef54043d3 100644 --- a/app/code/Magento/Integration/view/adminhtml/layout/adminhtml_integration_edit.xml +++ b/app/code/Magento/Integration/view/adminhtml/layout/adminhtml_integration_edit.xml @@ -27,7 +27,9 @@ - + + + info_section integration_edit_tab_info diff --git a/app/code/Magento/Integration/view/adminhtml/layout/adminhtml_integration_grid_block.xml b/app/code/Magento/Integration/view/adminhtml/layout/adminhtml_integration_grid_block.xml index bc2a4f7d68ec5..eb8d6917d6b27 100644 --- a/app/code/Magento/Integration/view/adminhtml/layout/adminhtml_integration_grid_block.xml +++ b/app/code/Magento/Integration/view/adminhtml/layout/adminhtml_integration_grid_block.xml @@ -30,7 +30,7 @@ integrationGrid - \Magento\Integration\Model\Resource\Integration\Collection + Magento\Integration\Model\Resource\Integration\Collection 1 integration_id asc @@ -83,7 +83,6 @@ Magento\Integration\Block\Adminhtml\Widget\Grid\Column\Renderer\Button\Edit - action edit edit edit 0 diff --git a/app/code/Magento/Integration/view/adminhtml/layout/adminhtml_integration_index.xml b/app/code/Magento/Integration/view/adminhtml/layout/adminhtml_integration_index.xml index 718ae1d6e803d..16d10cc498bbe 100644 --- a/app/code/Magento/Integration/view/adminhtml/layout/adminhtml_integration_index.xml +++ b/app/code/Magento/Integration/view/adminhtml/layout/adminhtml_integration_index.xml @@ -38,11 +38,9 @@
    + - - - - +
    diff --git a/app/code/Magento/Integration/view/adminhtml/layout/adminhtml_integration_new.xml b/app/code/Magento/Integration/view/adminhtml/layout/adminhtml_integration_new.xml index dadd55f1a451a..2329a5b3cde44 100644 --- a/app/code/Magento/Integration/view/adminhtml/layout/adminhtml_integration_new.xml +++ b/app/code/Magento/Integration/view/adminhtml/layout/adminhtml_integration_new.xml @@ -24,5 +24,20 @@ */ --> + + + + Magento_Integration::integration.css + + + + + Magento_Integration::js/integration.js + + + + + + diff --git a/app/code/Magento/Integration/view/adminhtml/layout/adminhtml_integration_activate_permissions_popup.xml b/app/code/Magento/Integration/view/adminhtml/layout/adminhtml_integration_permissionsdialog.xml similarity index 100% rename from app/code/Magento/Integration/view/adminhtml/layout/adminhtml_integration_activate_permissions_popup.xml rename to app/code/Magento/Integration/view/adminhtml/layout/adminhtml_integration_permissionsdialog.xml diff --git a/app/code/Magento/Integration/view/adminhtml/layout/adminhtml_integration_activate_tokens_popup.xml b/app/code/Magento/Integration/view/adminhtml/layout/adminhtml_integration_tokensdialog.xml similarity index 95% rename from app/code/Magento/Integration/view/adminhtml/layout/adminhtml_integration_activate_tokens_popup.xml rename to app/code/Magento/Integration/view/adminhtml/layout/adminhtml_integration_tokensdialog.xml index e06c57704e8b9..e10db94acdfd9 100644 --- a/app/code/Magento/Integration/view/adminhtml/layout/adminhtml_integration_activate_tokens_popup.xml +++ b/app/code/Magento/Integration/view/adminhtml/layout/adminhtml_integration_tokensdialog.xml @@ -25,5 +25,5 @@ --> - + diff --git a/app/code/Magento/Log/Model/Shell.php b/app/code/Magento/Log/Model/Shell.php index 8172d9c5d1c15..c3e4b8c75e9ea 100644 --- a/app/code/Magento/Log/Model/Shell.php +++ b/app/code/Magento/Log/Model/Shell.php @@ -41,16 +41,16 @@ class Shell extends \Magento\Core\Model\AbstractShell protected $_commandFactory; /** - * @param \Magento\Log\Model\Shell\Command\Factory $commandFactory * @param \Magento\Filesystem $filesystem - * @param \Magento\App\Dir $entryPoint + * @param string $entryPoint * @param \Magento\App\Dir $dir + * @param \Magento\Log\Model\Shell\Command\Factory $commandFactory */ public function __construct( - \Magento\Log\Model\Shell\Command\Factory $commandFactory, \Magento\Filesystem $filesystem, $entryPoint, - \Magento\App\Dir $dir + \Magento\App\Dir $dir, + \Magento\Log\Model\Shell\Command\Factory $commandFactory ) { parent::__construct($filesystem, $entryPoint, $dir); $this->_commandFactory = $commandFactory; diff --git a/app/code/Magento/Newsletter/Block/Adminhtml/Queue/Preview/Form.php b/app/code/Magento/Newsletter/Block/Adminhtml/Queue/Preview/Form.php index 3933ff50c68ad..13b54900a8c6f 100644 --- a/app/code/Magento/Newsletter/Block/Adminhtml/Queue/Preview/Form.php +++ b/app/code/Magento/Newsletter/Block/Adminhtml/Queue/Preview/Form.php @@ -44,7 +44,7 @@ protected function _prepareForm() { /** @var \Magento\Data\Form $form */ $form = $this->_formFactory->create(array( - 'attributes' => array( + 'data' => array( 'id' => 'preview_form', 'action' => $this->getUrl('*/*/drop', array('_current' => true)), 'method' => 'post', @@ -56,7 +56,7 @@ protected function _prepareForm() $mapper = array('preview_store_id' => 'store_id'); foreach ($data as $key => $value) { - if(array_key_exists($key, $mapper)) { + if (array_key_exists($key, $mapper)) { $name = $mapper[$key]; } else { $name = $key; diff --git a/app/code/Magento/Newsletter/Block/Adminhtml/Template/Edit/Form.php b/app/code/Magento/Newsletter/Block/Adminhtml/Template/Edit/Form.php index a5ec8f0576c4b..15e20aaa19290 100644 --- a/app/code/Magento/Newsletter/Block/Adminhtml/Template/Edit/Form.php +++ b/app/code/Magento/Newsletter/Block/Adminhtml/Template/Edit/Form.php @@ -85,7 +85,7 @@ protected function _prepareForm() /** @var \Magento\Data\Form $form */ $form = $this->_formFactory->create(array( - 'attributes' => array( + 'data' => array( 'id' => 'edit_form', 'action' => $this->getData('action'), 'method' => 'post', diff --git a/app/code/Magento/Newsletter/Block/Adminhtml/Template/Preview/Form.php b/app/code/Magento/Newsletter/Block/Adminhtml/Template/Preview/Form.php index 77d8a9abe3799..2b6963970d75e 100644 --- a/app/code/Magento/Newsletter/Block/Adminhtml/Template/Preview/Form.php +++ b/app/code/Magento/Newsletter/Block/Adminhtml/Template/Preview/Form.php @@ -44,7 +44,7 @@ protected function _prepareForm() { /** @var \Magento\Data\Form $form */ $form = $this->_formFactory->create(array( - 'attributes' => array( + 'data' => array( 'id' => 'preview_form', 'action' => $this->getUrl('*/*/drop', array('_current' => true)), 'method' => 'post', diff --git a/app/code/Magento/Newsletter/Model/Session.php b/app/code/Magento/Newsletter/Model/Session.php index fc51c6bed0a0d..a8f1eff995183 100644 --- a/app/code/Magento/Newsletter/Model/Session.php +++ b/app/code/Magento/Newsletter/Model/Session.php @@ -40,15 +40,15 @@ class Session extends \Magento\Core\Model\Session\AbstractSession * @param \Magento\Core\Model\Session\Context $context * @param \Magento\Session\SidResolverInterface $sidResolver * @param \Magento\Session\Config\ConfigInterface $sessionConfig - * @param array $data * @param null $sessionName + * @param array $data */ public function __construct( \Magento\Core\Model\Session\Context $context, \Magento\Session\SidResolverInterface $sidResolver, - \Magento\Session\Config\ConfigInterface $sessionConfig, - array $data = array(), - $sessionName = null + \Magento\Session\Config\ConfigInterface $sessionConfig, + $sessionName = null, + array $data = array() ) { parent::__construct($context, $sidResolver, $sessionConfig, $data); $this->start('newsletter', $sessionName); diff --git a/app/code/Magento/Newsletter/view/frontend/subscribe.phtml b/app/code/Magento/Newsletter/view/frontend/subscribe.phtml index c33c07b7907da..6aea243e96ffc 100644 --- a/app/code/Magento/Newsletter/view/frontend/subscribe.phtml +++ b/app/code/Magento/Newsletter/view/frontend/subscribe.phtml @@ -30,7 +30,7 @@ diff --git a/app/code/Magento/Shipping/Model/Shipping/Labels.php b/app/code/Magento/Shipping/Model/Shipping/Labels.php index 61f6c4e97283a..dbfdb0d62c7cf 100644 --- a/app/code/Magento/Shipping/Model/Shipping/Labels.php +++ b/app/code/Magento/Shipping/Model/Shipping/Labels.php @@ -41,23 +41,23 @@ class Labels extends \Magento\Shipping\Model\Shipping * @param \Magento\Core\Model\Store\Config $coreStoreConfig * @param \Magento\Shipping\Model\Config $shippingConfig * @param \Magento\Core\Model\StoreManagerInterface $storeManager - * @param \Magento\Backend\Model\Auth\Session $authSession * @param \Magento\Shipping\Model\Carrier\Factory $carrierFactory * @param \Magento\Shipping\Model\Rate\ResultFactory $rateResultFactory * @param \Magento\Shipping\Model\Rate\RequestFactory $rateRequestFactory * @param \Magento\Directory\Model\RegionFactory $regionFactory * @param \Magento\Math\Division $mathDivision + * @param \Magento\Backend\Model\Auth\Session $authSession */ public function __construct( \Magento\Core\Model\Store\Config $coreStoreConfig, \Magento\Shipping\Model\Config $shippingConfig, \Magento\Core\Model\StoreManagerInterface $storeManager, - \Magento\Backend\Model\Auth\Session $authSession, \Magento\Shipping\Model\Carrier\Factory $carrierFactory, \Magento\Shipping\Model\Rate\ResultFactory $rateResultFactory, \Magento\Shipping\Model\Rate\RequestFactory $rateRequestFactory, \Magento\Directory\Model\RegionFactory $regionFactory, - \Magento\Math\Division $mathDivision + \Magento\Math\Division $mathDivision, + \Magento\Backend\Model\Auth\Session $authSession ) { $this->_authSession = $authSession; parent::__construct( diff --git a/app/code/Magento/Sitemap/Block/Adminhtml/Edit/Form.php b/app/code/Magento/Sitemap/Block/Adminhtml/Edit/Form.php index 6e212c8d2eeb0..d53b5f9313f04 100644 --- a/app/code/Magento/Sitemap/Block/Adminhtml/Edit/Form.php +++ b/app/code/Magento/Sitemap/Block/Adminhtml/Edit/Form.php @@ -75,7 +75,7 @@ protected function _prepareForm() /** @var \Magento\Data\Form $form */ $form = $this->_formFactory->create(array( - 'attributes' => array( + 'data' => array( 'id' => 'edit_form', 'action' => $this->getData('action'), 'method' => 'post', diff --git a/app/code/Magento/Tax/Block/Adminhtml/Rate/Title/Fieldset.php b/app/code/Magento/Tax/Block/Adminhtml/Rate/Title/Fieldset.php index e567043788844..a7606aacbf5c4 100644 --- a/app/code/Magento/Tax/Block/Adminhtml/Rate/Title/Fieldset.php +++ b/app/code/Magento/Tax/Block/Adminhtml/Rate/Title/Fieldset.php @@ -40,21 +40,21 @@ class Fieldset extends \Magento\Data\Form\Element\Fieldset protected $_title; /** - * @param \Magento\Tax\Block\Adminhtml\Rate\Title $title - * @param \Magento\Escaper $escaper * @param \Magento\Data\Form\Element\Factory $factoryElement * @param \Magento\Data\Form\Element\CollectionFactory $factoryCollection - * @param array $attributes + * @param \Magento\Escaper $escaper + * @param \Magento\Tax\Block\Adminhtml\Rate\Title $title + * @param array $data */ public function __construct( - \Magento\Tax\Block\Adminhtml\Rate\Title $title, - \Magento\Escaper $escaper, \Magento\Data\Form\Element\Factory $factoryElement, \Magento\Data\Form\Element\CollectionFactory $factoryCollection, - $attributes = array() + \Magento\Escaper $escaper, + \Magento\Tax\Block\Adminhtml\Rate\Title $title, + $data = array() ) { $this->_title = $title; - parent::__construct($escaper, $factoryElement, $factoryCollection, $attributes); + parent::__construct($factoryElement, $factoryCollection, $escaper, $data); } public function getBasicChildrenHtml() diff --git a/app/code/Magento/Tax/Block/Adminhtml/Rule/Edit/Form.php b/app/code/Magento/Tax/Block/Adminhtml/Rule/Edit/Form.php index 1c8123db9a962..4b12e0d03d5f4 100644 --- a/app/code/Magento/Tax/Block/Adminhtml/Rule/Edit/Form.php +++ b/app/code/Magento/Tax/Block/Adminhtml/Rule/Edit/Form.php @@ -80,7 +80,7 @@ protected function _prepareForm() $model = $this->_coreRegistry->registry('tax_rule'); /** @var \Magento\Data\Form $form */ $form = $this->_formFactory->create(array( - 'attributes' => array( + 'data' => array( 'id' => 'edit_form', 'action' => $this->getData('action'), 'method' => 'post', diff --git a/app/code/Magento/Tax/Model/Sales/Pdf/Grandtotal.php b/app/code/Magento/Tax/Model/Sales/Pdf/Grandtotal.php index 661343417a31d..b14be6d406a97 100644 --- a/app/code/Magento/Tax/Model/Sales/Pdf/Grandtotal.php +++ b/app/code/Magento/Tax/Model/Sales/Pdf/Grandtotal.php @@ -36,15 +36,15 @@ class Grandtotal extends \Magento\Sales\Model\Order\Pdf\Total\DefaultTotal /** * @param \Magento\Tax\Helper\Data $taxHelper * @param \Magento\Tax\Model\Calculation $taxCalculation - * @param \Magento\Tax\Model\Config $taxConfig * @param \Magento\Tax\Model\Resource\Sales\Order\Tax\CollectionFactory $ordersFactory + * @param \Magento\Tax\Model\Config $taxConfig * @param array $data */ public function __construct( \Magento\Tax\Helper\Data $taxHelper, \Magento\Tax\Model\Calculation $taxCalculation, - \Magento\Tax\Model\Config $taxConfig, \Magento\Tax\Model\Resource\Sales\Order\Tax\CollectionFactory $ordersFactory, + \Magento\Tax\Model\Config $taxConfig, array $data = array() ) { $this->_taxConfig = $taxConfig; diff --git a/app/code/Magento/Tax/Model/Sales/Pdf/Shipping.php b/app/code/Magento/Tax/Model/Sales/Pdf/Shipping.php index 20bb2cce621b3..e8e194aa5780a 100644 --- a/app/code/Magento/Tax/Model/Sales/Pdf/Shipping.php +++ b/app/code/Magento/Tax/Model/Sales/Pdf/Shipping.php @@ -36,15 +36,15 @@ class Shipping extends \Magento\Sales\Model\Order\Pdf\Total\DefaultTotal /** * @param \Magento\Tax\Helper\Data $taxHelper * @param \Magento\Tax\Model\Calculation $taxCalculation - * @param \Magento\Tax\Model\Config $taxConfig * @param \Magento\Tax\Model\Resource\Sales\Order\Tax\CollectionFactory $ordersFactory + * @param \Magento\Tax\Model\Config $taxConfig * @param array $data */ public function __construct( \Magento\Tax\Helper\Data $taxHelper, \Magento\Tax\Model\Calculation $taxCalculation, - \Magento\Tax\Model\Config $taxConfig, \Magento\Tax\Model\Resource\Sales\Order\Tax\CollectionFactory $ordersFactory, + \Magento\Tax\Model\Config $taxConfig, array $data = array() ) { $this->_taxConfig = $taxConfig; diff --git a/app/code/Magento/Tax/Model/Sales/Pdf/Tax.php b/app/code/Magento/Tax/Model/Sales/Pdf/Tax.php index 312bb933203b2..80c9236e051aa 100644 --- a/app/code/Magento/Tax/Model/Sales/Pdf/Tax.php +++ b/app/code/Magento/Tax/Model/Sales/Pdf/Tax.php @@ -36,15 +36,15 @@ class Tax extends \Magento\Sales\Model\Order\Pdf\Total\DefaultTotal /** * @param \Magento\Tax\Helper\Data $taxHelper * @param \Magento\Tax\Model\Calculation $taxCalculation - * @param \Magento\Tax\Model\Config $taxConfig * @param \Magento\Tax\Model\Resource\Sales\Order\Tax\CollectionFactory $ordersFactory + * @param \Magento\Tax\Model\Config $taxConfig * @param array $data */ public function __construct( \Magento\Tax\Helper\Data $taxHelper, \Magento\Tax\Model\Calculation $taxCalculation, - \Magento\Tax\Model\Config $taxConfig, \Magento\Tax\Model\Resource\Sales\Order\Tax\CollectionFactory $ordersFactory, + \Magento\Tax\Model\Config $taxConfig, array $data = array() ) { $this->_taxConfig = $taxConfig; diff --git a/app/code/Magento/Theme/Block/Adminhtml/System/Design/Theme/Edit/Form.php b/app/code/Magento/Theme/Block/Adminhtml/System/Design/Theme/Edit/Form.php index 707ac75b23919..f7a8ef145bce7 100644 --- a/app/code/Magento/Theme/Block/Adminhtml/System/Design/Theme/Edit/Form.php +++ b/app/code/Magento/Theme/Block/Adminhtml/System/Design/Theme/Edit/Form.php @@ -42,7 +42,7 @@ protected function _prepareForm() { /** @var \Magento\Data\Form $form */ $form = $this->_formFactory->create(array( - 'attributes' => array( + 'data' => array( 'id' => 'edit_form', 'action' => $this->getUrl('adminhtml/*/save'), 'enctype' => 'multipart/form-data', diff --git a/app/code/Magento/Theme/Block/Adminhtml/System/Design/Theme/Edit/Form/Element/Image.php b/app/code/Magento/Theme/Block/Adminhtml/System/Design/Theme/Edit/Form/Element/Image.php index 8329c8fef99e7..b4afdb98794e0 100644 --- a/app/code/Magento/Theme/Block/Adminhtml/System/Design/Theme/Edit/Form/Element/Image.php +++ b/app/code/Magento/Theme/Block/Adminhtml/System/Design/Theme/Edit/Form/Element/Image.php @@ -37,23 +37,23 @@ class Image extends \Magento\Data\Form\Element\Image protected $_imagePath; /** - * @param \Magento\Escaper $escaper * @param \Magento\Data\Form\Element\Factory $factoryElement * @param \Magento\Data\Form\Element\CollectionFactory $factoryCollection + * @param \Magento\Escaper $escaper * @param \Magento\UrlInterface $urlBuilder * @param \Magento\View\Design\Theme\Image\PathInterface $imagePath - * @param array $attributes + * @param array $data */ public function __construct( - \Magento\Escaper $escaper, \Magento\Data\Form\Element\Factory $factoryElement, \Magento\Data\Form\Element\CollectionFactory $factoryCollection, + \Magento\Escaper $escaper, \Magento\UrlInterface $urlBuilder, \Magento\View\Design\Theme\Image\PathInterface $imagePath, - $attributes = array() + $data = array() ) { $this->_imagePath = $imagePath; - parent::__construct($escaper, $factoryElement, $factoryCollection, $urlBuilder, $attributes); + parent::__construct($factoryElement, $factoryCollection, $escaper, $urlBuilder, $data); } /** diff --git a/app/code/Magento/Theme/Block/Adminhtml/System/Design/Theme/Edit/Form/Element/Links.php b/app/code/Magento/Theme/Block/Adminhtml/System/Design/Theme/Edit/Form/Element/Links.php index 713751ad80ef1..536f8c4bc495a 100644 --- a/app/code/Magento/Theme/Block/Adminhtml/System/Design/Theme/Edit/Form/Element/Links.php +++ b/app/code/Magento/Theme/Block/Adminhtml/System/Design/Theme/Edit/Form/Element/Links.php @@ -35,18 +35,18 @@ class Links extends \Magento\Data\Form\Element\AbstractElement { /** - * @param \Magento\Escaper $escaper * @param \Magento\Data\Form\Element\Factory $factoryElement * @param \Magento\Data\Form\Element\CollectionFactory $factoryCollection - * @param array $attributes + * @param \Magento\Escaper $escaper + * @param array $data */ public function __construct( - \Magento\Escaper $escaper, \Magento\Data\Form\Element\Factory $factoryElement, \Magento\Data\Form\Element\CollectionFactory $factoryCollection, - $attributes = array() + \Magento\Escaper $escaper, + $data = array() ) { - parent::__construct($escaper, $factoryElement, $factoryCollection, $attributes); + parent::__construct($factoryElement, $factoryCollection, $escaper, $data); $this->setType('links'); } diff --git a/app/code/Magento/Theme/Model/Config.php b/app/code/Magento/Theme/Model/Config.php index 171aa7b00dda7..1d23ca2bd6651 100644 --- a/app/code/Magento/Theme/Model/Config.php +++ b/app/code/Magento/Theme/Model/Config.php @@ -150,7 +150,7 @@ protected function _getAssignedScopesCollection($scope, $configPath) */ protected function _unassignThemeFromStores($themeId, $stores, $scope, &$isReassigned) { - $configPath = \Magento\Core\Model\View\Design::XML_PATH_THEME_ID; + $configPath = \Magento\View\DesignInterface::XML_PATH_THEME_ID; foreach ($this->_getAssignedScopesCollection($scope, $configPath) as $config) { if ($config->getValue() == $themeId && !in_array($config->getScopeId(), $stores)) { $this->_configWriter->delete($configPath, $scope, $config->getScopeId()); @@ -171,7 +171,7 @@ protected function _unassignThemeFromStores($themeId, $stores, $scope, &$isReass */ protected function _assignThemeToStores($themeId, $stores, $scope, &$isReassigned) { - $configPath = \Magento\Core\Model\View\Design::XML_PATH_THEME_ID; + $configPath = \Magento\View\DesignInterface::XML_PATH_THEME_ID; if (count($stores) > 0) { foreach ($stores as $storeId) { $this->_configWriter->save($configPath, $themeId, $scope, $storeId); @@ -190,7 +190,7 @@ protected function _assignThemeToStores($themeId, $stores, $scope, &$isReassigne */ protected function _assignThemeToDefaultScope($themeId, &$isReassigned) { - $configPath = \Magento\Core\Model\View\Design::XML_PATH_THEME_ID; + $configPath = \Magento\View\DesignInterface::XML_PATH_THEME_ID; $this->_configWriter->save($configPath, $themeId, \Magento\Core\Model\Config::SCOPE_DEFAULT); $isReassigned = true; return $this; diff --git a/app/code/Magento/Core/Model/Theme/CopyService.php b/app/code/Magento/Theme/Model/CopyService.php similarity index 99% rename from app/code/Magento/Core/Model/Theme/CopyService.php rename to app/code/Magento/Theme/Model/CopyService.php index 8f09b2ed3dcfd..7e02081280acc 100644 --- a/app/code/Magento/Core/Model/Theme/CopyService.php +++ b/app/code/Magento/Theme/Model/CopyService.php @@ -19,7 +19,7 @@ * needs please refer to http://www.magentocommerce.com for more information. * * @category Magento - * @package Magento_Core + * @package Magento_Theme * @copyright Copyright (c) 2013 X.commerce, Inc. (http://www.magentocommerce.com) * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ @@ -27,7 +27,7 @@ /** * Service of copying customizations from one theme to another */ -namespace Magento\Core\Model\Theme; +namespace Magento\Theme\Model; class CopyService { diff --git a/app/code/Magento/Theme/view/frontend/1column.phtml b/app/code/Magento/Theme/view/frontend/1column.phtml index 59049a4971927..ef57baf178a64 100644 --- a/app/code/Magento/Theme/view/frontend/1column.phtml +++ b/app/code/Magento/Theme/view/frontend/1column.phtml @@ -34,7 +34,7 @@ $bodyCss = $this->getBodyClass() ? $this->getBodyClass() : ''; - + getChildHtml('head') ?> getBodyClass() ? $this->getBodyClass() : ''; - + getChildHtml('head') ?> getBodyClass() ? $this->getBodyClass() : ''; - + getChildHtml('head') ?> getBodyClass() ? $this->getBodyClass() : ''; - + getChildHtml('head') ?> getBodyClass() ? $this->getBodyClass() : ''; - + getChildHtml('head') ?> - - - - mage/calendar.css - - - - - jquery/jquery.js - - - - - mage/jquery-no-conflict.js - - - - - head.load.min.js - - - - - mage/mage.js - - - - - mage/decorate.js - - - - - mage/translate.js - - - - - mage/cookies.js - - - - - jquery/jquery-ui.js - - - - - jquery/jquery.tmpl.min.js - - - - - mage/bootstrap.js - - - - - Magento_Theme::js/truncate.js - - - - - mage/common.js - - - - - mage/toggle.js - - - - - mage/popup-window.js - - - - diff --git a/app/code/Magento/Theme/view/frontend/layout/default_head_blocks.xml b/app/code/Magento/Theme/view/frontend/layout/default_head_blocks.xml index 256b3256ab040..b1c2031d5a6bf 100644 --- a/app/code/Magento/Theme/view/frontend/layout/default_head_blocks.xml +++ b/app/code/Magento/Theme/view/frontend/layout/default_head_blocks.xml @@ -103,14 +103,6 @@ mage/popup-window.js - - - Magento_Theme::css/tabs.css - - - - - mage/loader.js diff --git a/app/code/Magento/Theme/view/frontend/link.phtml b/app/code/Magento/Theme/view/frontend/link.phtml index 793bb875c7e64..2f02a13e381d0 100644 --- a/app/code/Magento/Theme/view/frontend/link.phtml +++ b/app/code/Magento/Theme/view/frontend/link.phtml @@ -25,10 +25,11 @@ * @var $this \Magento\View\Element\Html\Link */ ?> +getIsDisabled()): ?>
  • getTitle()):?> title="escapeHtml(__($title))?>" - > + getTitle()):?> title="escapeHtml(__($title))?>"> escapeHtml(__($this->getLabel()))?>
  • + diff --git a/app/code/Magento/Theme/view/frontend/page.phtml b/app/code/Magento/Theme/view/frontend/page.phtml index 031b34fbbdef0..914a512e0abc2 100644 --- a/app/code/Magento/Theme/view/frontend/page.phtml +++ b/app/code/Magento/Theme/view/frontend/page.phtml @@ -34,7 +34,7 @@ $bodyCss = $this->getBodyClass() ? $this->getBodyClass() : ''; - + getChildHtml('head') ?> getBodyClass() ? $this->getBodyClass() : ''; - + getChildHtml('head') ?> _xmlElFactory = $xmlElFactory; diff --git a/app/code/Magento/Usa/Model/Shipping/Carrier/Dhl.php b/app/code/Magento/Usa/Model/Shipping/Carrier/Dhl.php index 192ef5a119903..ee182bdc33204 100644 --- a/app/code/Magento/Usa/Model/Shipping/Carrier/Dhl.php +++ b/app/code/Magento/Usa/Model/Shipping/Carrier/Dhl.php @@ -126,9 +126,9 @@ class Dhl protected $string; /** - * Dhl constructor - * - * @param \Magento\Usa\Helper\Data $usaData + * @param \Magento\Core\Model\Store\Config $coreStoreConfig + * @param \Magento\Shipping\Model\Rate\Result\ErrorFactory $rateErrorFactory + * @param \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory * @param \Magento\Usa\Model\Simplexml\ElementFactory $xmlElFactory * @param \Magento\Shipping\Model\Rate\ResultFactory $rateFactory * @param \Magento\Shipping\Model\Rate\Result\MethodFactory $rateMethodFactory @@ -139,16 +139,16 @@ class Dhl * @param \Magento\Directory\Model\CountryFactory $countryFactory * @param \Magento\Directory\Model\CurrencyFactory $currencyFactory * @param \Magento\Directory\Helper\Data $directoryData - * @param \Magento\Core\Model\Store\Config $coreStoreConfig - * @param \Magento\Shipping\Model\Rate\Result\ErrorFactory $rateErrorFactory - * @param \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory + * @param \Magento\Usa\Helper\Data $usaData * @param \Magento\Stdlib\String $string * @param array $data - * + * * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( - \Magento\Usa\Helper\Data $usaData, + \Magento\Core\Model\Store\Config $coreStoreConfig, + \Magento\Shipping\Model\Rate\Result\ErrorFactory $rateErrorFactory, + \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory, \Magento\Usa\Model\Simplexml\ElementFactory $xmlElFactory, \Magento\Shipping\Model\Rate\ResultFactory $rateFactory, \Magento\Shipping\Model\Rate\Result\MethodFactory $rateMethodFactory, @@ -159,18 +159,27 @@ public function __construct( \Magento\Directory\Model\CountryFactory $countryFactory, \Magento\Directory\Model\CurrencyFactory $currencyFactory, \Magento\Directory\Helper\Data $directoryData, - \Magento\Core\Model\Store\Config $coreStoreConfig, - \Magento\Shipping\Model\Rate\Result\ErrorFactory $rateErrorFactory, - \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory, + \Magento\Usa\Helper\Data $usaData, \Magento\Stdlib\String $string, array $data = array() ) { $this->string = $string; $this->_usaData = $usaData; parent::__construct( - $xmlElFactory, $rateFactory, $rateMethodFactory, $trackFactory, $trackErrorFactory, $trackStatusFactory, - $regionFactory, $countryFactory, $currencyFactory, $directoryData, $coreStoreConfig, $rateErrorFactory, - $logAdapterFactory, $data + $coreStoreConfig, + $rateErrorFactory, + $logAdapterFactory, + $xmlElFactory, + $rateFactory, + $rateMethodFactory, + $trackFactory, + $trackErrorFactory, + $trackStatusFactory, + $regionFactory, + $countryFactory, + $currencyFactory, + $directoryData, + $data ); } diff --git a/app/code/Magento/Usa/Model/Shipping/Carrier/Dhl/International.php b/app/code/Magento/Usa/Model/Shipping/Carrier/Dhl/International.php index fd811e79562ba..6cab061aa38a0 100644 --- a/app/code/Magento/Usa/Model/Shipping/Carrier/Dhl/International.php +++ b/app/code/Magento/Usa/Model/Shipping/Carrier/Dhl/International.php @@ -196,15 +196,9 @@ class International protected $dateTime; /** - * Dhl International Class constructor - * - * Sets necessary data - * - * @param \Magento\Usa\Helper\Data $usaData - * @param \Magento\Core\Model\Date $coreDate - * @param \Magento\Usa\Model\Shipping\Carrier\Dhl\Label\PdfFactory $pdfFactory - * @param \Magento\Module\Dir\Reader $configReader - * @param \Magento\Core\Model\StoreManagerInterface $storeManager + * @param \Magento\Core\Model\Store\Config $coreStoreConfig + * @param \Magento\Shipping\Model\Rate\Result\ErrorFactory $rateErrorFactory + * @param \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory * @param \Magento\Usa\Model\Simplexml\ElementFactory $xmlElFactory * @param \Magento\Shipping\Model\Rate\ResultFactory $rateFactory * @param \Magento\Shipping\Model\Rate\Result\MethodFactory $rateMethodFactory @@ -215,21 +209,22 @@ class International * @param \Magento\Directory\Model\CountryFactory $countryFactory * @param \Magento\Directory\Model\CurrencyFactory $currencyFactory * @param \Magento\Directory\Helper\Data $directoryData - * @param \Magento\Core\Model\Store\Config $coreStoreConfig - * @param \Magento\Shipping\Model\Rate\Result\ErrorFactory $rateErrorFactory - * @param \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory + * @param \Magento\Usa\Helper\Data $usaData + * @param \Magento\Core\Model\Date $coreDate + * @param \Magento\Usa\Model\Shipping\Carrier\Dhl\Label\PdfFactory $pdfFactory + * @param \Magento\Module\Dir\Reader $configReader + * @param \Magento\Core\Model\StoreManagerInterface $storeManager * @param \Magento\Stdlib\String $string * @param \Magento\Math\Division $mathDivision * @param \Magento\Stdlib\DateTime $dateTime * @param array $data + * * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( - \Magento\Usa\Helper\Data $usaData, - \Magento\Core\Model\Date $coreDate, - \Magento\Usa\Model\Shipping\Carrier\Dhl\Label\PdfFactory $pdfFactory, - \Magento\Module\Dir\Reader $configReader, - \Magento\Core\Model\StoreManagerInterface $storeManager, + \Magento\Core\Model\Store\Config $coreStoreConfig, + \Magento\Shipping\Model\Rate\Result\ErrorFactory $rateErrorFactory, + \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory, \Magento\Usa\Model\Simplexml\ElementFactory $xmlElFactory, \Magento\Shipping\Model\Rate\ResultFactory $rateFactory, \Magento\Shipping\Model\Rate\Result\MethodFactory $rateMethodFactory, @@ -240,9 +235,11 @@ public function __construct( \Magento\Directory\Model\CountryFactory $countryFactory, \Magento\Directory\Model\CurrencyFactory $currencyFactory, \Magento\Directory\Helper\Data $directoryData, - \Magento\Core\Model\Store\Config $coreStoreConfig, - \Magento\Shipping\Model\Rate\Result\ErrorFactory $rateErrorFactory, - \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory, + \Magento\Usa\Helper\Data $usaData, + \Magento\Core\Model\Date $coreDate, + \Magento\Usa\Model\Shipping\Carrier\Dhl\Label\PdfFactory $pdfFactory, + \Magento\Module\Dir\Reader $configReader, + \Magento\Core\Model\StoreManagerInterface $storeManager, \Magento\Stdlib\String $string, \Magento\Math\Division $mathDivision, \Magento\Stdlib\DateTime $dateTime, @@ -257,9 +254,20 @@ public function __construct( $this->mathDivision = $mathDivision; $this->dateTime = $dateTime; parent::__construct( - $xmlElFactory, $rateFactory, $rateMethodFactory, $trackFactory, $trackErrorFactory, $trackStatusFactory, - $regionFactory, $countryFactory, $currencyFactory, $directoryData, $coreStoreConfig, $rateErrorFactory, - $logAdapterFactory, $data + $coreStoreConfig, + $rateErrorFactory, + $logAdapterFactory, + $xmlElFactory, + $rateFactory, + $rateMethodFactory, + $trackFactory, + $trackErrorFactory, + $trackStatusFactory, + $regionFactory, + $countryFactory, + $currencyFactory, + $directoryData, + $data ); if ($this->getConfigData('content_type') == self::DHL_CONTENT_TYPE_DOC) { $this->_freeMethod = 'free_method_doc'; diff --git a/app/code/Magento/Usa/Model/Shipping/Carrier/Fedex.php b/app/code/Magento/Usa/Model/Shipping/Carrier/Fedex.php index 29135f27d94e5..40288288bd639 100644 --- a/app/code/Magento/Usa/Model/Shipping/Carrier/Fedex.php +++ b/app/code/Magento/Usa/Model/Shipping/Carrier/Fedex.php @@ -131,10 +131,9 @@ class Fedex protected $_productCollFactory; /** - * @param \Magento\Logger $logger - * @param \Magento\Core\Model\StoreManagerInterface $storeManager - * @param \Magento\Module\Dir\Reader $configReader - * @param \Magento\Catalog\Model\Resource\Product\CollectionFactory $productCollFactory + * @param \Magento\Core\Model\Store\Config $coreStoreConfig + * @param \Magento\Shipping\Model\Rate\Result\ErrorFactory $rateErrorFactory + * @param \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory * @param \Magento\Usa\Model\Simplexml\ElementFactory $xmlElFactory * @param \Magento\Shipping\Model\Rate\ResultFactory $rateFactory * @param \Magento\Shipping\Model\Rate\Result\MethodFactory $rateMethodFactory @@ -145,17 +144,18 @@ class Fedex * @param \Magento\Directory\Model\CountryFactory $countryFactory * @param \Magento\Directory\Model\CurrencyFactory $currencyFactory * @param \Magento\Directory\Helper\Data $directoryData - * @param \Magento\Core\Model\Store\Config $coreStoreConfig - * @param \Magento\Shipping\Model\Rate\Result\ErrorFactory $rateErrorFactory - * @param \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory + * @param \Magento\Logger $logger + * @param \Magento\Core\Model\StoreManagerInterface $storeManager + * @param \Magento\Module\Dir\Reader $configReader + * @param \Magento\Catalog\Model\Resource\Product\CollectionFactory $productCollFactory * @param array $data + * * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( - \Magento\Logger $logger, - \Magento\Core\Model\StoreManagerInterface $storeManager, - \Magento\Module\Dir\Reader $configReader, - \Magento\Catalog\Model\Resource\Product\CollectionFactory $productCollFactory, + \Magento\Core\Model\Store\Config $coreStoreConfig, + \Magento\Shipping\Model\Rate\Result\ErrorFactory $rateErrorFactory, + \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory, \Magento\Usa\Model\Simplexml\ElementFactory $xmlElFactory, \Magento\Shipping\Model\Rate\ResultFactory $rateFactory, \Magento\Shipping\Model\Rate\Result\MethodFactory $rateMethodFactory, @@ -166,17 +166,29 @@ public function __construct( \Magento\Directory\Model\CountryFactory $countryFactory, \Magento\Directory\Model\CurrencyFactory $currencyFactory, \Magento\Directory\Helper\Data $directoryData, - \Magento\Core\Model\Store\Config $coreStoreConfig, - \Magento\Shipping\Model\Rate\Result\ErrorFactory $rateErrorFactory, - \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory, + \Magento\Logger $logger, + \Magento\Core\Model\StoreManagerInterface $storeManager, + \Magento\Module\Dir\Reader $configReader, + \Magento\Catalog\Model\Resource\Product\CollectionFactory $productCollFactory, array $data = array() ) { $this->_storeManager = $storeManager; $this->_productCollFactory = $productCollFactory; parent::__construct( - $xmlElFactory, $rateFactory, $rateMethodFactory, $trackFactory, $trackErrorFactory, $trackStatusFactory, - $regionFactory, $countryFactory, $currencyFactory, $directoryData, $coreStoreConfig, $rateErrorFactory, - $logAdapterFactory, $data + $coreStoreConfig, + $rateErrorFactory, + $logAdapterFactory, + $xmlElFactory, + $rateFactory, + $rateMethodFactory, + $trackFactory, + $trackErrorFactory, + $trackStatusFactory, + $regionFactory, + $countryFactory, + $currencyFactory, + $directoryData, + $data ); $wsdlBasePath = $configReader->getModuleDir('etc', 'Magento_Usa') . DS . 'wsdl' . DS . 'FedEx' . DS; $this->_shipServiceWsdl = $wsdlBasePath . 'ShipService_v10.wsdl'; diff --git a/app/code/Magento/Usa/Model/Shipping/Carrier/Ups.php b/app/code/Magento/Usa/Model/Shipping/Carrier/Ups.php index d9ddc32b262d9..013bd558b7e09 100644 --- a/app/code/Magento/Usa/Model/Shipping/Carrier/Ups.php +++ b/app/code/Magento/Usa/Model/Shipping/Carrier/Ups.php @@ -135,9 +135,9 @@ class Ups protected $_logger; /** - * @param \Magento\Logger $logger - * @param \Magento\Usa\Model\Simplexml\ElementFactory $simpleXmlElementFactory - * @param \Magento\Core\Model\LocaleInterface $locale + * @param \Magento\Core\Model\Store\Config $coreStoreConfig + * @param \Magento\Shipping\Model\Rate\Result\ErrorFactory $rateErrorFactory + * @param \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory * @param \Magento\Usa\Model\Simplexml\ElementFactory $xmlElFactory * @param \Magento\Shipping\Model\Rate\ResultFactory $rateFactory * @param \Magento\Shipping\Model\Rate\Result\MethodFactory $rateMethodFactory @@ -148,16 +148,16 @@ class Ups * @param \Magento\Directory\Model\CountryFactory $countryFactory * @param \Magento\Directory\Model\CurrencyFactory $currencyFactory * @param \Magento\Directory\Helper\Data $directoryData - * @param \Magento\Core\Model\Store\Config $coreStoreConfig - * @param \Magento\Shipping\Model\Rate\Result\ErrorFactory $rateErrorFactory - * @param \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory + * @param \Magento\Logger $logger + * @param \Magento\Core\Model\LocaleInterface $locale * @param array $data - * + * * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( - \Magento\Logger $logger, - \Magento\Core\Model\LocaleInterface $locale, + \Magento\Core\Model\Store\Config $coreStoreConfig, + \Magento\Shipping\Model\Rate\Result\ErrorFactory $rateErrorFactory, + \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory, \Magento\Usa\Model\Simplexml\ElementFactory $xmlElFactory, \Magento\Shipping\Model\Rate\ResultFactory $rateFactory, \Magento\Shipping\Model\Rate\Result\MethodFactory $rateMethodFactory, @@ -168,17 +168,27 @@ public function __construct( \Magento\Directory\Model\CountryFactory $countryFactory, \Magento\Directory\Model\CurrencyFactory $currencyFactory, \Magento\Directory\Helper\Data $directoryData, - \Magento\Core\Model\Store\Config $coreStoreConfig, - \Magento\Shipping\Model\Rate\Result\ErrorFactory $rateErrorFactory, - \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory, + \Magento\Logger $logger, + \Magento\Core\Model\LocaleInterface $locale, array $data = array() ) { $this->_logger = $logger; $this->_locale = $locale; parent::__construct( - $xmlElFactory, $rateFactory, $rateMethodFactory, $trackFactory, $trackErrorFactory, $trackStatusFactory, - $regionFactory, $countryFactory, $currencyFactory, $directoryData, $coreStoreConfig, $rateErrorFactory, - $logAdapterFactory, $data + $coreStoreConfig, + $rateErrorFactory, + $logAdapterFactory, + $xmlElFactory, + $rateFactory, + $rateMethodFactory, + $trackFactory, + $trackErrorFactory, + $trackStatusFactory, + $regionFactory, + $countryFactory, + $currencyFactory, + $directoryData, + $data ); } diff --git a/app/code/Magento/Usa/Model/Shipping/Carrier/Usps.php b/app/code/Magento/Usa/Model/Shipping/Carrier/Usps.php index 0afc2ecacad9d..7ee88457929e6 100644 --- a/app/code/Magento/Usa/Model/Shipping/Carrier/Usps.php +++ b/app/code/Magento/Usa/Model/Shipping/Carrier/Usps.php @@ -136,10 +136,9 @@ class Usps protected $_productCollFactory; /** - * Usps constructor - * - * @param \Magento\Usa\Helper\Data $usaData - * @param \Magento\Catalog\Model\Resource\Product\CollectionFactory $productCollFactory + * @param \Magento\Core\Model\Store\Config $coreStoreConfig + * @param \Magento\Shipping\Model\Rate\Result\ErrorFactory $rateErrorFactory + * @param \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory * @param \Magento\Usa\Model\Simplexml\ElementFactory $xmlElFactory * @param \Magento\Shipping\Model\Rate\ResultFactory $rateFactory * @param \Magento\Shipping\Model\Rate\Result\MethodFactory $rateMethodFactory @@ -150,15 +149,16 @@ class Usps * @param \Magento\Directory\Model\CountryFactory $countryFactory * @param \Magento\Directory\Model\CurrencyFactory $currencyFactory * @param \Magento\Directory\Helper\Data $directoryData - * @param \Magento\Core\Model\Store\Config $coreStoreConfig - * @param \Magento\Shipping\Model\Rate\Result\ErrorFactory $rateErrorFactory - * @param \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory + * @param \Magento\Usa\Helper\Data $usaData + * @param \Magento\Catalog\Model\Resource\Product\CollectionFactory $productCollFactory * @param array $data + * * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( - \Magento\Usa\Helper\Data $usaData, - \Magento\Catalog\Model\Resource\Product\CollectionFactory $productCollFactory, + \Magento\Core\Model\Store\Config $coreStoreConfig, + \Magento\Shipping\Model\Rate\Result\ErrorFactory $rateErrorFactory, + \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory, \Magento\Usa\Model\Simplexml\ElementFactory $xmlElFactory, \Magento\Shipping\Model\Rate\ResultFactory $rateFactory, \Magento\Shipping\Model\Rate\Result\MethodFactory $rateMethodFactory, @@ -169,18 +169,28 @@ public function __construct( \Magento\Directory\Model\CountryFactory $countryFactory, \Magento\Directory\Model\CurrencyFactory $currencyFactory, \Magento\Directory\Helper\Data $directoryData, - \Magento\Core\Model\Store\Config $coreStoreConfig, - \Magento\Shipping\Model\Rate\Result\ErrorFactory $rateErrorFactory, - \Magento\Core\Model\Log\AdapterFactory $logAdapterFactory, + \Magento\Usa\Helper\Data $usaData, + \Magento\Catalog\Model\Resource\Product\CollectionFactory $productCollFactory, array $data = array() ) { $this->_usaData = $usaData; $this->_productCollFactory = $productCollFactory; $this->_xmlElFactory = $xmlElFactory; parent::__construct( - $xmlElFactory, $rateFactory, $rateMethodFactory, $trackFactory, $trackErrorFactory, $trackStatusFactory, - $regionFactory, $countryFactory, $currencyFactory, $directoryData, $coreStoreConfig, $rateErrorFactory, - $logAdapterFactory, $data + $coreStoreConfig, + $rateErrorFactory, + $logAdapterFactory, + $xmlElFactory, + $rateFactory, + $rateMethodFactory, + $trackFactory, + $trackErrorFactory, + $trackStatusFactory, + $regionFactory, + $countryFactory, + $currencyFactory, + $directoryData, + $data ); } diff --git a/app/code/Magento/User/Block/User/Edit/Form.php b/app/code/Magento/User/Block/User/Edit/Form.php index 34233d7db7880..514353f23a141 100644 --- a/app/code/Magento/User/Block/User/Edit/Form.php +++ b/app/code/Magento/User/Block/User/Edit/Form.php @@ -43,7 +43,7 @@ protected function _prepareForm() { /** @var \Magento\Data\Form $form */ $form = $this->_formFactory->create(array( - 'attributes' => array( + 'data' => array( 'id' => 'edit_form', 'action' => $this->getData('action'), 'method' => 'post', diff --git a/app/code/Magento/Webapi/Block/Adminhtml/Integration/Activate/Permissions/Tab/Webapi.php b/app/code/Magento/Webapi/Block/Adminhtml/Integration/Activate/Permissions/Tab/Webapi.php index 8db34a694650c..39c0b328e9556 100644 --- a/app/code/Magento/Webapi/Block/Adminhtml/Integration/Activate/Permissions/Tab/Webapi.php +++ b/app/code/Magento/Webapi/Block/Adminhtml/Integration/Activate/Permissions/Tab/Webapi.php @@ -24,58 +24,68 @@ namespace Magento\Webapi\Block\Adminhtml\Integration\Activate\Permissions\Tab; -use Magento\Backend\Block\Widget\Tab\TabInterface; -use Magento\View\Element\Template; -use Magento\Acl\Resource\ProviderInterface; -use Magento\Core\Helper\Data as CoreHelper; -use Magento\Core\Model\Acl\RootResource; -use Magento\View\Element\Template\Context; -use Magento\Integration\Helper\Data as IntegrationHelper; +use Magento\Integration\Block\Adminhtml\Integration\Edit\Tab\Info; +use Magento\Integration\Controller\Adminhtml\Integration as IntegrationController; +use Magento\Integration\Model\Integration as IntegrationModel; use Magento\Webapi\Helper\Data as WebapiHelper; /** * API permissions tab for integration activation dialog. + * + * TODO: Fix warnings suppression + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ -class Webapi extends Template implements TabInterface +class Webapi extends \Magento\Backend\Block\Widget\Form\Generic + implements \Magento\Backend\Block\Widget\Tab\TabInterface { /** @var string[] */ protected $_selectedResources; - /** @var RootResource */ + /** @var \Magento\Core\Model\Acl\RootResource */ protected $_rootResource; - /** @var ProviderInterface */ + /** @var \Magento\Acl\Resource\ProviderInterface */ protected $_resourceProvider; - /** @var IntegrationHelper */ + /** @var \Magento\Integration\Helper\Data */ protected $_integrationData; /** @var WebapiHelper */ protected $_webapiHelper; + /** @var \Magento\Core\Helper\Data */ + protected $_coreHelper; + /** * Initialize dependencies. * - * @param Context $context - * @param RootResource $rootResource - * @param ProviderInterface $resourceProvider - * @param IntegrationHelper $integrationData - * @param WebapiHelper $webapiData + * @param \Magento\Backend\Block\Template\Context $context + * @param \Magento\Core\Model\Registry $registry + * @param \Magento\Data\FormFactory $formFactory + * @param \Magento\Core\Helper\Data $coreHelper + * @param \Magento\Core\Model\Acl\RootResource $rootResource + * @param \Magento\Acl\Resource\ProviderInterface $resourceProvider + * @param \Magento\Integration\Helper\Data $integrationData + * @param \Magento\Webapi\Helper\Data $webapiData * @param array $data */ public function __construct( - Context $context, - RootResource $rootResource, - ProviderInterface $resourceProvider, - IntegrationHelper $integrationData, - WebapiHelper $webapiData, + \Magento\Backend\Block\Template\Context $context, + \Magento\Core\Model\Registry $registry, + \Magento\Data\FormFactory $formFactory, + \Magento\Core\Helper\Data $coreHelper, + \Magento\Core\Model\Acl\RootResource $rootResource, + \Magento\Acl\Resource\ProviderInterface $resourceProvider, + \Magento\Integration\Helper\Data $integrationData, + \Magento\Webapi\Helper\Data $webapiData, array $data = array() ) { $this->_rootResource = $rootResource; - $this->_webapiHelper = $webapiData; $this->_resourceProvider = $resourceProvider; $this->_integrationData = $integrationData; - parent::__construct($context, $data); + $this->_webapiHelper = $webapiData; + $this->_coreHelper = $coreHelper; + parent::__construct($context, $registry, $formFactory, $data); } /** @@ -93,7 +103,9 @@ protected function _construct() */ public function canShowTab() { - return true; + $integrationData = $this->_coreRegistry->registry(IntegrationController::REGISTRY_KEY_CURRENT_INTEGRATION); + return isset($integrationData[Info::DATA_SETUP_TYPE]) + && ($integrationData[Info::DATA_SETUP_TYPE] == IntegrationModel::TYPE_CONFIG); } /** @@ -140,7 +152,7 @@ public function getResourcesTreeJson() $resources = $this->_resourceProvider->getAclResources(); $aclResourcesTree = $this->_integrationData->mapResources($resources[1]['children']); - return $this->_coreData->jsonEncode($aclResourcesTree); + return $this->_coreHelper->jsonEncode($aclResourcesTree); } /** @@ -157,7 +169,17 @@ public function getSelectedResourcesJson() $resources = $this->_resourceProvider->getAclResources(); $selectedResources = $this->_getAllResourceIds($resources[1]['children']); } - return $this->_coreData->jsonEncode($selectedResources); + return $this->_coreHelper->jsonEncode($selectedResources); + } + + /** + * Whether tree has any resources. + * + * @return bool + */ + public function isTreeEmpty() + { + return $this->_selectedResources === []; } /** diff --git a/app/code/Magento/Webapi/Block/Adminhtml/Integration/Edit/Tab/Webapi.php b/app/code/Magento/Webapi/Block/Adminhtml/Integration/Edit/Tab/Webapi.php index 41c41975ca46b..65c695e4f2c47 100644 --- a/app/code/Magento/Webapi/Block/Adminhtml/Integration/Edit/Tab/Webapi.php +++ b/app/code/Magento/Webapi/Block/Adminhtml/Integration/Edit/Tab/Webapi.php @@ -24,12 +24,14 @@ namespace Magento\Webapi\Block\Adminhtml\Integration\Edit\Tab; +use Magento\Integration\Block\Adminhtml\Integration\Edit\Tab\Info; use Magento\Integration\Controller\Adminhtml\Integration as IntegrationController; +use Magento\Integration\Model\Integration as IntegrationModel; /** * Class for handling API section within integration. */ -class Webapi extends \Magento\Backend\Block\Widget\Form +class Webapi extends \Magento\Backend\Block\Widget\Form\Generic implements \Magento\Backend\Block\Widget\Tab\TabInterface { /** @@ -60,9 +62,14 @@ class Webapi extends \Magento\Backend\Block\Widget\Form protected $_webapiData; /** - * Construct + * Initialize dependencies. + * + * TODO: Fix excessive number of arguments + * @SuppressWarnings(PHPMD.ExcessiveParameterList) * * @param \Magento\Backend\Block\Template\Context $context + * @param \Magento\Core\Model\Registry $registry + * @param \Magento\Data\FormFactory $formFactory * @param \Magento\Core\Model\Acl\RootResource $rootResource * @param \Magento\User\Model\Resource\Rules\CollectionFactory $rulesCollFactory * @param \Magento\Acl\Resource\ProviderInterface $aclResourceProvider @@ -72,6 +79,8 @@ class Webapi extends \Magento\Backend\Block\Widget\Form */ public function __construct( \Magento\Backend\Block\Template\Context $context, + \Magento\Core\Model\Registry $registry, + \Magento\Data\FormFactory $formFactory, \Magento\Core\Model\Acl\RootResource $rootResource, \Magento\User\Model\Resource\Rules\CollectionFactory $rulesCollFactory, \Magento\Acl\Resource\ProviderInterface $aclResourceProvider, @@ -84,7 +93,7 @@ public function __construct( $this->_aclResourceProvider = $aclResourceProvider; $this->_webapiData = $webapiData; $this->_integrationData = $integrationData; - parent::__construct($context, $data); + parent::__construct($context, $registry, $formFactory, $data); } /** @@ -114,7 +123,9 @@ public function getTabTitle() */ public function canShowTab() { - return true; + $integrationData = $this->_coreRegistry->registry(IntegrationController::REGISTRY_KEY_CURRENT_INTEGRATION); + return !isset($integrationData[Info::DATA_SETUP_TYPE]) + || ($integrationData[Info::DATA_SETUP_TYPE] != IntegrationModel::TYPE_CONFIG); } /** diff --git a/app/code/Magento/Webapi/Block/Adminhtml/Role.php b/app/code/Magento/Webapi/Block/Adminhtml/Role.php deleted file mode 100644 index 9621b888e43bc..0000000000000 --- a/app/code/Magento/Webapi/Block/Adminhtml/Role.php +++ /dev/null @@ -1,60 +0,0 @@ -_headerText = __('API Roles'); - $this->_updateButton('add', 'label', __('Add New API Role')); - } - - /** - * Get create URL. - * - * @return string - */ - public function getCreateUrl() - { - return $this->getUrl('adminhtml/*/edit'); - } -} diff --git a/app/code/Magento/Webapi/Block/Adminhtml/Role/Edit.php b/app/code/Magento/Webapi/Block/Adminhtml/Role/Edit.php deleted file mode 100644 index fd2d4756cdb4c..0000000000000 --- a/app/code/Magento/Webapi/Block/Adminhtml/Role/Edit.php +++ /dev/null @@ -1,92 +0,0 @@ -_formScripts[] = "function saveAndContinueEdit(url)" . - "{var tagForm = new varienForm('edit_form'); tagForm.submit(url);}"; - - $this->_addButton('save_and_continue', array( - 'label' => __('Save and Continue Edit'), - 'onclick' => "saveAndContinueEdit('" . $this->getSaveAndContinueUrl() . "')", - 'class' => 'save' - ), 100); - - $this->_updateButton('save', 'label', __('Save API Role')); - $this->_updateButton('delete', 'label', __('Delete API Role')); - } - - /** - * Retrieve role SaveAndContinue URL. - * - * @return string - */ - public function getSaveAndContinueUrl() - { - return $this->getUrl('adminhtml/*/save', array('_current' => true, 'continue' => true)); - } - - /** - * Get header text. - * - * @return string - */ - public function getHeaderText() - { - if ($this->getApiRole()->getId()) { - return __("Edit API Role '%1'", $this->escapeHtml($this->getApiRole()->getRoleName())); - } else { - return __('New API Role'); - } - } -} diff --git a/app/code/Magento/Webapi/Block/Adminhtml/Role/Edit/Form.php b/app/code/Magento/Webapi/Block/Adminhtml/Role/Edit/Form.php deleted file mode 100644 index 64d5dc215b276..0000000000000 --- a/app/code/Magento/Webapi/Block/Adminhtml/Role/Edit/Form.php +++ /dev/null @@ -1,50 +0,0 @@ -_formFactory->create(array( - 'attributes' => array( - 'action' => $this->getUrl('adminhtml/*/save'), - 'id' => 'edit_form', - 'method' => 'post', - )) - ); - $form->setUseContainer(true); - $this->setForm($form); - - return parent::_prepareForm(); - } -} diff --git a/app/code/Magento/Webapi/Block/Adminhtml/Role/Edit/Tab/Main.php b/app/code/Magento/Webapi/Block/Adminhtml/Role/Edit/Tab/Main.php deleted file mode 100644 index 118f4b91538ac..0000000000000 --- a/app/code/Magento/Webapi/Block/Adminhtml/Role/Edit/Tab/Main.php +++ /dev/null @@ -1,88 +0,0 @@ -_formFactory->create(); - - $fieldset = $form->addFieldset('base_fieldset', array( - 'legend' => __('Role Information')) - ); - - $role = $this->getApiRole(); - if ($role && $role->getId()) { - $fieldset->addField('role_id', 'hidden', array( - 'name' => 'role_id', - 'value' => $role->getId() - )); - } - - $fieldset->addField('role_name', 'text', array( - 'name' => 'role_name', - 'id' => 'role_name', - 'class' => 'required-entry', - 'required' => true, - 'label' => __('Role Name'), - 'title' => __('Role Name'), - )); - - $fieldset->addField('in_role_user', 'hidden', - array( - 'name' => 'in_role_user', - 'id' => 'in_role_user', - ) - ); - - $fieldset->addField('in_role_user_old', 'hidden', - array( - 'name' => 'in_role_user_old' - ) - ); - - if ($role) { - $form->setValues($role->getData()); - } - $this->setForm($form); - - return parent::_prepareForm(); - } -} diff --git a/app/code/Magento/Webapi/Block/Adminhtml/Role/Edit/Tab/Resource.php b/app/code/Magento/Webapi/Block/Adminhtml/Role/Edit/Tab/Resource.php deleted file mode 100644 index 21ba797846a72..0000000000000 --- a/app/code/Magento/Webapi/Block/Adminhtml/Role/Edit/Tab/Resource.php +++ /dev/null @@ -1,157 +0,0 @@ -_resourceProvider = $resourceProvider; - $this->_ruleResource = $ruleResource; - $this->_rootResource = $rootResource; - } - - /** - * Prepare Form. - * - * @return \Magento\Webapi\Block\Adminhtml\Role\Edit\Tab\Resource - */ - protected function _prepareForm() - { - $resources = $this->_resourceProvider->getAclResources(); - $this->_aclResourcesTree = $this->_mapResources($resources[1]['children']); - return parent::_prepareForm(); - } - - /** - * Map resources - * - * @param array $resources - * @return array - */ - protected function _mapResources(array $resources) - { - $output = array(); - foreach ($resources as $resource) { - $item = array(); - $item['id'] = $resource['id']; - $item['text'] = __($resource['title']); - if (in_array($item['id'], $this->_getSelectedResourcesIds())) { - $item['checked'] = true; - } - $item['children'] = array(); - if (isset($resource['children'])) { - $item['children'] = $this->_mapResources($resource['children']); - } - $output[] = $item; - } - return $output; - } - - /** - * Check whether resource access is set to "All". - * - * @return bool - */ - public function isEverythingAllowed() - { - return in_array($this->_rootResource->getId(), $this->_getSelectedResourcesIds()); - } - - /** - * Get ACL resources tree. - * - * @return string - */ - public function getResourcesTree() - { - return $this->_aclResourcesTree; - } - - /** - * Get selected ACL resources of given API role. - * - * @return array - */ - protected function _getSelectedResourcesIds() - { - $apiRole = $this->getApiRole(); - if (null === $this->_selResourcesIds && $apiRole && $apiRole->getId()) { - $this->_selResourcesIds = $this->_ruleResource->getResourceIdsByRole($apiRole->getRoleId()); - } - return (array)$this->_selResourcesIds; - } -} diff --git a/app/code/Magento/Webapi/Block/Adminhtml/Role/Edit/Tabs.php b/app/code/Magento/Webapi/Block/Adminhtml/Role/Edit/Tabs.php deleted file mode 100644 index 3751f76b55cf7..0000000000000 --- a/app/code/Magento/Webapi/Block/Adminhtml/Role/Edit/Tabs.php +++ /dev/null @@ -1,83 +0,0 @@ -setId('page_tabs'); - $this->setDestElementId('edit_form'); - $this->setTitle(__('Role Information')); - } - - /** - * Prepare child blocks. - * - * @return \Magento\View\Element\AbstractBlock - */ - protected function _beforeToHtml() - { - /** @var \Magento\Webapi\Block\Adminhtml\Role\Edit\Tab\Main $mainBlock */ - $mainBlock = $this->getLayout()->getBlock('webapi.role.edit.tab.main'); - $mainBlock->setApiRole($this->getApiRole()); - $this->addTab('main_section', array( - 'label' => __('Role Info'), - 'title' => __('Role Info'), - 'content' => $mainBlock->toHtml(), - 'active' => true - )); - - /** @var \Magento\Webapi\Block\Adminhtml\Role\Edit\Tab\Resource $resourceBlock */ - $resourceBlock = $this->getLayout()->getBlock('webapi.role.edit.tab.resource'); - $resourceBlock->setApiRole($this->getApiRole()); - $this->addTab('resource_section', array( - 'label' => __('Resources'), - 'title' => __('Resources'), - 'content' => $resourceBlock->toHtml() - )); - - if ($this->getApiRole() && $this->getApiRole()->getRoleId() > 0) { - $usersGrid = $this->getLayout()->getBlock('webapi.role.edit.tab.users.grid'); - $this->addTab('user_section', array( - 'label' => __('Users'), - 'title' => __('Users'), - 'content' => $usersGrid->toHtml() - )); - } - - return parent::_beforeToHtml(); - } - -} diff --git a/app/code/Magento/Webapi/Block/Adminhtml/User.php b/app/code/Magento/Webapi/Block/Adminhtml/User.php deleted file mode 100644 index e0d6e19b8903d..0000000000000 --- a/app/code/Magento/Webapi/Block/Adminhtml/User.php +++ /dev/null @@ -1,50 +0,0 @@ -_headerText = __('API Users'); - $this->_updateButton('add', 'label', __('Add New API User')); - } -} diff --git a/app/code/Magento/Webapi/Block/Adminhtml/User/Edit.php b/app/code/Magento/Webapi/Block/Adminhtml/User/Edit.php deleted file mode 100644 index 7062ca31e77e2..0000000000000 --- a/app/code/Magento/Webapi/Block/Adminhtml/User/Edit.php +++ /dev/null @@ -1,96 +0,0 @@ -_addButton('save_and_continue', array( - 'label' => __('Save and Continue Edit'), - 'class' => 'save', - 'data_attribute' => array( - 'mage-init' => array( - 'button' => array('event' => 'saveAndContinueEdit', 'target' => '#edit_form'), - ), - ), - ), 100); - - $this->_updateButton('save', 'label', __('Save API User')); - $this->_updateButton('save', 'id', 'save_button'); - $this->_updateButton('delete', 'label', __('Delete API User')); - } - - /** - * Set Web API user to child form block. - * - * @return \Magento\Webapi\Block\Adminhtml\User\Edit - */ - protected function _beforeToHtml() - { - /** @var $formBlock \Magento\Webapi\Block\Adminhtml\User\Edit\Form */ - $formBlock = $this->getChildBlock('form'); - $formBlock->setApiUser($this->getApiUser()); - return parent::_beforeToHtml(); - } - - /** - * Get header text. - * - * @return string - */ - public function getHeaderText() - { - if ($this->getApiUser()->getId()) { - return __("Edit API User '%1'", $this->escapeHtml($this->getApiUser()->getApiKey())); - } else { - return __('New API User'); - } - } -} diff --git a/app/code/Magento/Webapi/Block/Adminhtml/User/Edit/Form.php b/app/code/Magento/Webapi/Block/Adminhtml/User/Edit/Form.php deleted file mode 100644 index 35ee61a5e8a70..0000000000000 --- a/app/code/Magento/Webapi/Block/Adminhtml/User/Edit/Form.php +++ /dev/null @@ -1,54 +0,0 @@ -_formFactory->create(); - $form->setId('edit_form'); - $form->setAction($this->getUrl('adminhtml/*/save')); - $form->setMethod('post'); - $form->setUseContainer(true); - $this->setForm($form); - - return parent::_prepareForm(); - } -} diff --git a/app/code/Magento/Webapi/Block/Adminhtml/User/Edit/Tab/Main.php b/app/code/Magento/Webapi/Block/Adminhtml/User/Edit/Tab/Main.php deleted file mode 100644 index 164d36abf588b..0000000000000 --- a/app/code/Magento/Webapi/Block/Adminhtml/User/Edit/Tab/Main.php +++ /dev/null @@ -1,99 +0,0 @@ -_formFactory->create(); - - $fieldset = $form->addFieldset('base_fieldset', array( - 'legend' => __('Account Information')) - ); - - $user = $this->getApiUser(); - if ($user->getId()) { - $fieldset->addField('user_id', 'hidden', array( - 'name' => 'user_id', - 'value' => $user->getId() - )); - } - - $fieldset->addField('company_name', 'text', array( - 'name' => 'company_name', - 'id' => 'company_name', - 'required' => false, - 'label' => __('Company Name'), - 'title' => __('Company Name'), - )); - - $fieldset->addField('contact_email', 'text', array( - 'name' => 'contact_email', - 'id' => 'contact_email', - 'class' => 'validate-email', - 'required' => true, - 'label' => __('Contact Email'), - 'title' => __('Contact Email'), - )); - - $fieldset->addField('api_key', 'text', array( - 'name' => 'api_key', - 'id' => 'api_key', - 'required' => true, - 'label' => __('API Key'), - 'title' => __('API Key'), - )); - - $fieldset->addField('secret', 'text', array( - 'name' => 'secret', - 'id' => 'secret', - 'required' => true, - 'label' => __('API Secret'), - 'title' => __('API Secret'), - )); - - if ($user) { - $form->setValues($user->getData()); - } - $this->setForm($form); - - return parent::_prepareForm(); - } -} diff --git a/app/code/Magento/Webapi/Block/Adminhtml/User/Edit/Tabs.php b/app/code/Magento/Webapi/Block/Adminhtml/User/Edit/Tabs.php deleted file mode 100644 index 8188dd1af9987..0000000000000 --- a/app/code/Magento/Webapi/Block/Adminhtml/User/Edit/Tabs.php +++ /dev/null @@ -1,70 +0,0 @@ -setId('page_tabs'); - $this->setDestElementId('edit_form'); - $this->setTitle(__('User Information')); - } - - /** - * Before to HTML. - * - * @return \Magento\View\Element\AbstractBlock - */ - protected function _beforeToHtml() - { - /** @var \Magento\Webapi\Block\Adminhtml\User\Edit\Tab\Main $mainTab */ - $mainTab = $this->getLayout()->getBlock('webapi.user.edit.tab.main'); - $mainTab->setApiUser($this->getApiUser()); - $this->addTab('main_section', array( - 'label' => __('User Info'), - 'title' => __('User Info'), - 'content' => $mainTab->toHtml(), - 'active' => true - )); - - $rolesGrid = $this->getLayout()->getBlock('webapi.user.edit.tab.roles.grid'); - $this->addTab('roles_section', array( - 'label' => __('User Role'), - 'title' => __('User Role'), - 'content' => $rolesGrid->toHtml(), - )); - return parent::_beforeToHtml(); - } -} diff --git a/app/code/Magento/Webapi/Controller/Adminhtml/Webapi/Role.php b/app/code/Magento/Webapi/Controller/Adminhtml/Webapi/Role.php deleted file mode 100644 index dab630543d104..0000000000000 --- a/app/code/Magento/Webapi/Controller/Adminhtml/Webapi/Role.php +++ /dev/null @@ -1,321 +0,0 @@ -_validatorFactory = $validatorFactory; - parent::__construct($context); - } - - /** - * Init. - * - * @return \Magento\Webapi\Controller\Adminhtml\Webapi\Role - */ - protected function _initAction() - { - $this->_view->loadLayout(); - $this->_setActiveMenu('Magento_Webapi::system_api_webapi_roles'); - $this->_addBreadcrumb( - __('Web Api'), - __('Web Api') - ); - $this->_addBreadcrumb( - __('API Roles'), - __('API Roles') - ); - return $this; - } - - /** - * Web API roles grid. - */ - public function indexAction() - { - $this->_title->add(__('API Roles')); - $this->_initAction(); - $this->_view->renderLayout(); - } - - /** - * AJAX Web API roles grid. - */ - public function rolegridAction() - { - $this->_view->loadLayout(false); - $this->_view->renderLayout(); - } - - /** - * Grid in edit role form. - */ - public function usersgridAction() - { - $this->_view->loadLayout(false); - $this->_view->renderLayout(); - } - - /** - * Edit Web API role. - */ - public function editAction() - { - $this->_initAction(); - $this->_title->add(__('API Roles')); - - $roleId = $this->getRequest()->getParam('role_id'); - - /** @var \Magento\Webapi\Model\Acl\Role $role */ - $role = $this->_objectManager->create('Magento\Webapi\Model\Acl\Role'); - if ($roleId) { - $role->load($roleId); - if (!$role->getId()) { - $this->_getSession()->addError( - __('This API role no longer exists.') - ); - $this->_redirect('adminhtml/*/'); - return; - } - $this->_addBreadcrumb( - __('Edit API Role'), - __('Edit API Role') - ); - $this->_title->add(__('Edit API Role')); - } else { - $this->_addBreadcrumb( - __('Add New API Role'), - __('Add New API Role') - ); - $this->_title->add(__('New API Role')); - } - - // Restore previously entered form data from session - $data = $this->_getSession()->getWebapiUserData(true); - if (!empty($data)) { - $role->setData($data); - } - - /** @var \Magento\Webapi\Block\Adminhtml\Role\Edit $editBlock */ - $editBlock = $this->_view->getLayout()->getBlock('webapi.role.edit'); - if ($editBlock) { - $editBlock->setApiRole($role); - } - - /** @var \Magento\Webapi\Block\Adminhtml\Role\Edit\Tabs $tabsBlock */ - $tabsBlock = $this->_view->getLayout()->getBlock('webapi.role.edit.tabs'); - if ($tabsBlock) { - $tabsBlock->setApiRole($role); - } - - $this->_view->renderLayout(); - } - - /** - * Remove role. - */ - public function deleteAction() - { - $roleId = $this->getRequest()->getParam('role_id', false); - - try { - $this->_objectManager->create('Magento\Webapi\Model\Acl\Role')->load($roleId)->delete(); - $this->_getSession()->addSuccess( - __('The API role has been deleted.') - ); - } catch (\Exception $e) { - $this->_getSession()->addError( - __('An error occurred while deleting this role.') - ); - } - - $this->_redirect("*/*/"); - } - - /** - * Save role. - */ - public function saveAction() - { - $data = $this->getRequest()->getPost(); - if ($data) { - $roleId = $this->getRequest()->getPost('role_id', false); - /** @var \Magento\Webapi\Model\Acl\Role $role */ - $role = $this->_objectManager->create('Magento\Webapi\Model\Acl\Role')->load($roleId); - if (!$role->getId() && $roleId) { - $this->_getSession()->addError( - __('This role no longer exists.') - ); - $this->_redirect('adminhtml/*/'); - return; - } - $role->setData($data); - - try { - $this->_validateRole($role); - $role->save(); - - $isNewRole = empty($roleId); - $this->_saveResources($role->getId(), $isNewRole); - $this->_saveUsers($role->getId()); - - $this->_getSession()->addSuccess( - __('The API role has been saved.') - ); - $this->_getSession()->setWebapiRoleData(false); - - if ($roleId && !$this->getRequest()->has('continue')) { - $this->_redirect('adminhtml/*/'); - } else { - $this->_redirect('adminhtml/*/edit', array('role_id' => $role->getId())); - } - } catch (\Exception $e) { - $this->_getSession()->addError($e->getMessage()); - $this->_getSession()->setWebapiRoleData($data); - $this->_redirect('adminhtml/*/edit', array('role_id' => $role->getId())); - } - } - } - - /** - * Validate Web API role data. - * - * @param \Magento\Webapi\Model\Acl\Role $role - * @throws \Magento\Validator\ValidatorException - */ - protected function _validateRole($role) - { - $group = $role->isObjectNew() ? 'create' : 'update'; - $validator = $this->_validatorFactory->createValidator('api_role', $group); - if (!$validator->isValid($role)) { - throw new \Magento\Validator\ValidatorException($validator->getMessages()); - } - } - - /** - * Save role resources. - * - * @param integer $roleId - * @param boolean $isNewRole - */ - protected function _saveResources($roleId, $isNewRole) - { - // parse resource list - $resources = explode(',', $this->getRequest()->getParam('resource', false)); - $isAll = $this->getRequest()->getParam('all'); - $rootResource = $this->_objectManager->get('Magento\Core\Model\Acl\RootResource'); - if ($isAll) { - $resources = array($rootResource->getId()); - } elseif (in_array($rootResource->getId(), $resources)) { - unset($resources[array_search( - $rootResource->getId(), - $resources - )]); - } - - $saveResourcesFlag = true; - if (!$isNewRole) { - // Check changes - /** @var \Magento\Webapi\Model\Resource\Acl\Rule $ruleResource */ - $ruleResource = $this->_objectManager->get('Magento\Webapi\Model\Resource\Acl\Rule'); - $oldResources = $ruleResource->getResourceIdsByRole($roleId); - if (count($oldResources) == count($resources) && !array_diff($oldResources, $resources)) { - $saveResourcesFlag = false; - } - } - - if ($saveResourcesFlag) { - $this->_objectManager->create('Magento\Webapi\Model\Acl\Rule') - ->setRoleId($roleId) - ->setResources($resources) - ->saveResources(); - } - } - - /** - * Save linked users. - * - * @param integer $roleId - */ - protected function _saveUsers($roleId) - { - // parse users list - $roleUsers = $this->_parseRoleUsers($this->getRequest()->getParam('in_role_user')); - $oldRoleUsers = $this->_parseRoleUsers($this->getRequest()->getParam('in_role_user_old')); - - if ($roleUsers != $oldRoleUsers) { - foreach ($oldRoleUsers as $userId) { - $user = $this->_objectManager->create('Magento\Webapi\Model\Acl\User')->load($userId); - $user->setRoleId(null)->save(); - } - - foreach ($roleUsers as $userId) { - $user = $this->_objectManager->create('Magento\Webapi\Model\Acl\User')->load($userId); - $user->setRoleId($roleId)->save(); - } - } - } - - /** - * Parse request string with users. - * - * @param string $roleUsers - * @return array - */ - protected function _parseRoleUsers($roleUsers) - { - parse_str($roleUsers, $roleUsers); - if ($roleUsers && count($roleUsers)) { - return array_keys($roleUsers); - } - - return array(); - } - - /** - * Check access rights. - * - * @return boolean - */ - protected function _isAllowed() - { - return $this->_authorization->isAllowed('Magento_Webapi::webapi_roles'); - } - -} diff --git a/app/code/Magento/Webapi/Controller/Adminhtml/Webapi/User.php b/app/code/Magento/Webapi/Controller/Adminhtml/Webapi/User.php deleted file mode 100644 index 73f27d6810073..0000000000000 --- a/app/code/Magento/Webapi/Controller/Adminhtml/Webapi/User.php +++ /dev/null @@ -1,266 +0,0 @@ -_validatorFactory = $validatorFactory; - parent::__construct($context); - } - - /** - * Initialize breadcrumbs. - * - * @return \Magento\Webapi\Controller\Adminhtml\Webapi\User - */ - protected function _initAction() - { - $this->_view->loadLayout(); - $this->_setActiveMenu('Magento_Webapi::system_api_webapi_users') - ->_addBreadcrumb( - __('Web Services'), - __('Web Services') - ) - ->_addBreadcrumb( - __('API Users'), - __('API Users') - ); - - return $this; - } - - /** - * Show web API users grid. - */ - public function indexAction() - { - $this->_initAction(); - $this->_title->add(__('API Users')); - - $this->_view->renderLayout(); - } - - /** - * Create New Web API user. - */ - public function newAction() - { - $this->getRequest()->setParam('user_id', null); - $this->_forward('edit'); - } - - /** - * Edit Web API user. - */ - public function editAction() - { - $this->_initAction(); - $this->_title->add(__('API Users')); - - $userId = (int)$this->getRequest()->getParam('user_id'); - $user = $this->_loadApiUser($userId); - if (!$user) { - return; - } - - // Update title and breadcrumb record. - $actionTitle = $user->getId() - ? $this->_objectManager->get('Magento\Escaper')->escapeHtml($user->getApiKey()) - : __('New API User'); - $this->_title->add($actionTitle); - $this->_addBreadcrumb($actionTitle, $actionTitle); - - // Restore previously entered form data from session. - $data = $this->_getSession()->getWebapiUserData(true); - if (!empty($data)) { - $user->setData($data); - } - - /** @var \Magento\Webapi\Block\Adminhtml\User\Edit $editBlock */ - $editBlock = $this->_view->getLayout()->getBlock('webapi.user.edit'); - if ($editBlock) { - $editBlock->setApiUser($user); - } - /** @var \Magento\Webapi\Block\Adminhtml\User\Edit\Tabs $tabsBlock */ - $tabsBlock = $this->_view->getLayout()->getBlock('webapi.user.edit.tabs'); - if ($tabsBlock) { - $tabsBlock->setApiUser($user); - } - - $this->_view->renderLayout(); - } - - /** - * Save Web API user. - */ - public function saveAction() - { - $userId = (int)$this->getRequest()->getPost('user_id'); - $data = $this->getRequest()->getPost(); - $redirectBack = false; - if ($data) { - $user = $this->_loadApiUser($userId); - if (!$user) { - return; - } - - $user->setData($data); - try { - $this->_validateUserData($user); - $user->save(); - $userId = $user->getId(); - - $this->_getSession() - ->setWebapiUserData(null) - ->addSuccess(__('The API user has been saved.')); - $redirectBack = $this->getRequest()->has('back'); - } catch (\Magento\Core\Exception $e) { - $this->_getSession() - ->setWebapiUserData($data) - ->addError($e->getMessage()); - $redirectBack = true; - } catch (\Exception $e) { - $this->_objectManager->get('Magento\Logger')->logException($e); - $this->_getSession() - ->setWebapiUserData($data) - ->addError($e->getMessage()); - $redirectBack = true; - } - } - if ($redirectBack) { - $this->_redirect('adminhtml/*/edit', array('user_id' => $userId)); - } else { - $this->_redirect('adminhtml/*/'); - } - } - - /** - * Delete user. - */ - public function deleteAction() - { - $userId = (int)$this->getRequest()->getParam('user_id'); - if ($userId) { - $user = $this->_loadApiUser($userId); - if (!$user) { - return; - } - try { - $user->delete(); - - $this->_getSession()->addSuccess( - __('The API user has been deleted.') - ); - $this->_redirect('adminhtml/*/'); - return; - } catch (\Exception $e) { - $this->_getSession()->addError($e->getMessage()); - $this->_redirect('adminhtml/*/edit', array('user_id' => $userId)); - return; - } - } - $this->_getSession()->addError( - __('Unable to find a user to be deleted.') - ); - $this->_redirect('adminhtml/*/'); - } - - /** - * AJAX Web API users grid. - */ - public function gridAction() - { - $this->_view->loadLayout(false); - $this->_view->renderLayout(); - } - - /** - * Web API user roles grid. - */ - public function rolesgridAction() - { - $this->_view->loadLayout(false); - $this->_view->renderLayout(); - } - - /** - * Check ACL. - * - * @return boolean - */ - protected function _isAllowed() - { - return $this->_authorization->isAllowed('Magento_Webapi::webapi_users'); - } - - /** - * Validate Web API user data. - * - * @param \Magento\Webapi\Model\Acl\User $user - * @throws \Magento\Validator\ValidatorException - */ - protected function _validateUserData($user) - { - $group = $user->isObjectNew() ? 'create' : 'update'; - $validator = $this->_validatorFactory->createValidator('api_user', $group); - if (!$validator->isValid($user)) { - throw new \Magento\Validator\ValidatorException($validator->getMessages()); - } - } - - /** - * Load Web API user. - * - * @param int $userId - * @return bool|\Magento\Webapi\Model\Acl\User - */ - protected function _loadApiUser($userId) - { - /** @var \Magento\Webapi\Model\Acl\User $user */ - $user = $this->_objectManager->create('Magento\Webapi\Model\Acl\User')->load($userId); - if (!$user->getId() && $userId) { - $this->_getSession()->addError( - __('This user no longer exists.') - ); - $this->_redirect('adminhtml/*/'); - return false; - } - return $user; - } -} diff --git a/app/code/Magento/Webapi/Controller/Request.php b/app/code/Magento/Webapi/Controller/Request.php index 0e951a658b319..78645513aace8 100644 --- a/app/code/Magento/Webapi/Controller/Request.php +++ b/app/code/Magento/Webapi/Controller/Request.php @@ -27,6 +27,9 @@ class Request extends \Zend_Controller_Request_Http implements \Magento\App\RequestInterface { + /** @var int */ + protected $_consumerId = 0; + /** * Modify pathInfo: strip down the front name and query parameters. * @@ -47,4 +50,24 @@ public function __construct( /** Remove GET parameters from path */ $this->_pathInfo = preg_replace('#\?.*#', '', $this->_pathInfo); } + + /** + * Set consumer ID. + * + * @param int $consumerId + */ + public function setConsumerId($consumerId) + { + $this->_consumerId = $consumerId; + } + + /** + * Get consumer ID. + * + * @return int + */ + public function getConsumerId() + { + return $this->_consumerId; + } } diff --git a/app/code/Magento/Webapi/Controller/Rest.php b/app/code/Magento/Webapi/Controller/Rest.php index ab2be5435ad97..a65933a313cc2 100644 --- a/app/code/Magento/Webapi/Controller/Rest.php +++ b/app/code/Magento/Webapi/Controller/Rest.php @@ -1,7 +1,5 @@ _router = $router; $this->_request = $request; @@ -73,6 +85,7 @@ public function __construct( $this->_appState = $appState; $this->_oauthService = $oauthService; $this->_oauthHelper = $oauthHelper; + $this->_authorizationService = $authorizationService; } /** @@ -100,15 +113,30 @@ public function dispatch(\Magento\App\RequestInterface $request) if (!$this->_appState->isInstalled()) { throw new \Magento\Webapi\Exception(__('Magento is not yet installed')); } + // TODO: Consider changing service interface to operate with objects to avoid overhead $requestUrl = $this->_oauthHelper->getRequestUrl($this->_request); $oauthRequest = $this->_oauthHelper->prepareRequest( $this->_request, $requestUrl, $this->_request->getRequestData() ); - $this->_oauthService->validateAccessTokenRequest( + $consumerId = $this->_oauthService->validateAccessTokenRequest( $oauthRequest, $requestUrl, $this->_request->getMethod() ); + $this->_request->setConsumerId($consumerId); + $route = $this->_router->match($this->_request); + if (!$this->_authorizationService->isAllowed($route->getAclResources())) { + // TODO: Consider passing Integration ID instead of Consumer ID + throw new \Magento\Service\AuthorizationException( + "Not Authorized.", + 0, + null, + array(), + 'authorization', + "Consumer ID = {$consumerId}", + implode($route->getAclResources(), ', ')); + } + if ($route->isSecure() && !$this->_request->isSecure()) { throw new \Magento\Webapi\Exception(__('Operation allowed only in HTTPS')); } diff --git a/app/code/Magento/Webapi/Controller/Rest/Router/Route.php b/app/code/Magento/Webapi/Controller/Rest/Router/Route.php index 50b5b8964ba5f..3d6018838a179 100644 --- a/app/code/Magento/Webapi/Controller/Rest/Router/Route.php +++ b/app/code/Magento/Webapi/Controller/Rest/Router/Route.php @@ -36,6 +36,9 @@ class Route extends \Zend_Controller_Router_Route /** @var boolean */ protected $_secure; + /** @var array */ + protected $_aclResources = array(); + /** * Set service class. * @@ -102,6 +105,26 @@ public function isSecure() return $this->_secure; } + /** + * Set ACL resources list. + * + * @param array $aclResources + */ + public function setAclResources($aclResources) + { + $this->_aclResources = $aclResources; + } + + /** + * Get ACL resources list. + * + * @return array + */ + public function getAclResources() + { + return $this->_aclResources; + } + /** * Matches a Request with parts defined by a map. Assigns and * returns an array of variables on a successful match. diff --git a/app/code/Magento/Webapi/Controller/Soap.php b/app/code/Magento/Webapi/Controller/Soap.php index b326d47dc3a32..0250903e6e514 100644 --- a/app/code/Magento/Webapi/Controller/Soap.php +++ b/app/code/Magento/Webapi/Controller/Soap.php @@ -25,6 +25,9 @@ */ namespace Magento\Webapi\Controller; +use Magento\Webapi\Exception as WebapiException; +use Magento\Service\AuthorizationException; + /** * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ @@ -114,7 +117,7 @@ public function dispatch(\Magento\App\RequestInterface $request) $request->setPathInfo('/' . implode('/', $pathParts)); try { if (!$this->_appState->isInstalled()) { - throw new \Magento\Webapi\Exception(__('Magento is not yet installed')); + throw new WebapiException(__('Magento is not yet installed')); } if ($this->_isWsdlRequest()) { $responseBody = $this->_wsdlGenerator->generate( @@ -123,7 +126,8 @@ public function dispatch(\Magento\App\RequestInterface $request) ); $this->_setResponseContentType(self::CONTENT_TYPE_WSDL_REQUEST); } else { - $this->_oauthService->validateAccessToken($this->_getAccessToken()); + $consumerId = $this->_oauthService->validateAccessToken($this->_getAccessToken()); + $this->_request->setConsumerId($consumerId); $responseBody = $this->_soapServer->handle(); $this->_setResponseContentType(self::CONTENT_TYPE_SOAP_CALL); } @@ -145,15 +149,21 @@ protected function _isWsdlRequest() } /** - * Parse the Authorization header and return the access token - * eg Authorization: Bearer + * Parse the Authorization header and return the access token e.g. Authorization: Bearer * * @return string Access token + * @throws AuthorizationException */ protected function _getAccessToken() { - $token = explode(' ', $_SERVER['HTTP_AUTHORIZATION']); - return $token[1]; + if (isset($_SERVER['HTTP_AUTHORIZATION'])) { + $token = explode(' ', $_SERVER['HTTP_AUTHORIZATION']); + if (isset($token[1]) && is_string($token[1])) { + return $token[1]; + } + throw new AuthorizationException(__('Authentication header format is invalid.')); + } + throw new AuthorizationException(__('Authentication header is absent.')); } /** diff --git a/app/code/Magento/Webapi/Controller/Soap/Handler.php b/app/code/Magento/Webapi/Controller/Soap/Handler.php index ec4a301ceed13..d06fc11c2bcba 100644 --- a/app/code/Magento/Webapi/Controller/Soap/Handler.php +++ b/app/code/Magento/Webapi/Controller/Soap/Handler.php @@ -1,9 +1,5 @@ _request = $request; $this->_objectManager = $objectManager; $this->_apiConfig = $apiConfig; + $this->_authorizationService = $authorizationService; } /** @@ -63,20 +77,33 @@ public function __construct( * @param string $operation * @param array $arguments * @return \stdClass|null - * @throws \Magento\Webapi\Exception|\LogicException + * @throws WebapiException + * @throws \LogicException + * @throws AuthorizationException */ public function __call($operation, $arguments) { $requestedServices = $this->_request->getRequestedServices(); $serviceMethodInfo = $this->_apiConfig->getServiceMethodInfo($operation, $requestedServices); - $serviceClass = $serviceMethodInfo[\Magento\Webapi\Model\Soap\Config::KEY_CLASS]; - $serviceMethod = $serviceMethodInfo[\Magento\Webapi\Model\Soap\Config::KEY_METHOD]; + $serviceClass = $serviceMethodInfo[SoapConfig::KEY_CLASS]; + $serviceMethod = $serviceMethodInfo[SoapConfig::KEY_METHOD]; // check if the operation is a secure operation & whether the request was made in HTTPS - if ($serviceMethodInfo[\Magento\Webapi\Model\Soap\Config::KEY_IS_SECURE] && !$this->_request->isSecure()) { - throw new \Magento\Webapi\Exception(__("Operation allowed only in HTTPS")); + if ($serviceMethodInfo[SoapConfig::KEY_IS_SECURE] && !$this->_request->isSecure()) { + throw new WebapiException(__("Operation allowed only in HTTPS")); } + if (!$this->_authorizationService->isAllowed($serviceMethodInfo[SoapConfig::KEY_ACL_RESOURCES])) { + // TODO: Consider passing Integration ID instead of Consumer ID + throw new AuthorizationException( + "Not Authorized.", + 0, + null, + array(), + 'authorization', + "Consumer ID = {$this->_request->getConsumerId()}", + implode($serviceMethodInfo[SoapConfig::KEY_ACL_RESOURCES], ', ')); + } $service = $this->_objectManager->get($serviceClass); $outputData = $service->$serviceMethod($this->_prepareParameters($arguments)); if (!is_array($outputData)) { diff --git a/app/code/Magento/Webapi/Model/Acl/Builder.php b/app/code/Magento/Webapi/Model/Acl/Builder.php deleted file mode 100644 index 06692277d7920..0000000000000 --- a/app/code/Magento/Webapi/Model/Acl/Builder.php +++ /dev/null @@ -1,46 +0,0 @@ -query('/config/mapping/resource') as $mappingNode) { - $mappingData = array(); - $mappingAttributes = $mappingNode->attributes; - $idNode = $mappingAttributes->getNamedItem('id'); - if (is_null($idNode)) { - throw new \Exception('Attribute "id" is required for ACL resource mapping.'); - } - $mappingData['id'] = $idNode->nodeValue; - - $parentNode = $mappingAttributes->getNamedItem('parent'); - if (is_null($parentNode)) { - throw new \Exception('Attribute "parent" is required for ACL resource mapping.'); - } - $mappingData['parent'] = $parentNode->nodeValue; - $aclResourceConfig['config']['mapping'][] = $mappingData; - } - return $aclResourceConfig; - } -} - diff --git a/app/code/Magento/Webapi/Model/Acl/Resource/Config/Reader/Filesystem.php b/app/code/Magento/Webapi/Model/Acl/Resource/Config/Reader/Filesystem.php deleted file mode 100644 index 833ba2a45c410..0000000000000 --- a/app/code/Magento/Webapi/Model/Acl/Resource/Config/Reader/Filesystem.php +++ /dev/null @@ -1,51 +0,0 @@ -_schema = $moduleReader->getModuleDir('etc', 'Magento_Webapi') . DIRECTORY_SEPARATOR . 'acl.xsd'; - } - - /** - * Get path to merged config schema - * - * @return string|null - */ - public function getSchema() - { - return $this->_schema; - } - - /** - * Get path to pre file validation schema - * - * @return string|null - */ - public function getPerFileSchema() - { - return $this->_perFileSchema; - } -} diff --git a/app/code/Magento/Webapi/Model/Acl/Resource/Provider.php b/app/code/Magento/Webapi/Model/Acl/Resource/Provider.php deleted file mode 100644 index f700a4c825182..0000000000000 --- a/app/code/Magento/Webapi/Model/Acl/Resource/Provider.php +++ /dev/null @@ -1,78 +0,0 @@ -_configReader = $configReader; - $this->_scope = $scope; - $this->_resourceTreeBuilder = $resourceTreeBuilder; - } - - /** - * {@inheritdoc} - */ - public function getAclResources() - { - $aclResourceConfig = $this->_configReader->read(); - if (!empty($aclResourceConfig['config']['acl']['resources'])) { - return $this->_resourceTreeBuilder->build($aclResourceConfig['config']['acl']['resources']); - } - return array(); - } - - /** - * {@inheritdoc} - */ - public function getAclVirtualResources() - { - $aclResourceConfig = $this->_configReader->read(); - return isset($aclResourceConfig['config']['mapping']) ? $aclResourceConfig['config']['mapping'] : array(); - } -} diff --git a/app/code/Magento/Webapi/Model/Acl/Resource/ProviderInterface.php b/app/code/Magento/Webapi/Model/Acl/Resource/ProviderInterface.php deleted file mode 100644 index 76ab71017bdd3..0000000000000 --- a/app/code/Magento/Webapi/Model/Acl/Resource/ProviderInterface.php +++ /dev/null @@ -1,39 +0,0 @@ -_init('Magento\Webapi\Model\Resource\Acl\Role'); - } -} diff --git a/app/code/Magento/Webapi/Model/Acl/Role/Factory.php b/app/code/Magento/Webapi/Model/Acl/Role/Factory.php deleted file mode 100644 index eb23babb62278..0000000000000 --- a/app/code/Magento/Webapi/Model/Acl/Role/Factory.php +++ /dev/null @@ -1,55 +0,0 @@ -_objectManager = $objectManager; - } - - /** - * Create ACL role model. - * - * @param array $arguments - * @return \Magento\Webapi\Model\Acl\Role - */ - public function create(array $arguments = array()) - { - return $this->_objectManager->create(self::CLASS_NAME, $arguments); - } -} diff --git a/app/code/Magento/Webapi/Model/Acl/Role/InRoleUserUpdater.php b/app/code/Magento/Webapi/Model/Acl/Role/InRoleUserUpdater.php deleted file mode 100644 index 76b6d57ce5b58..0000000000000 --- a/app/code/Magento/Webapi/Model/Acl/Role/InRoleUserUpdater.php +++ /dev/null @@ -1,67 +0,0 @@ -_roleId = (int)$request->getParam('role_id'); - $this->_userResource = $userResource; - } - - /** - * Init values with users assigned to role. - * - * @param array|null $values - * @return array|null - */ - public function update($values) - { - if ($this->_roleId) { - $values = $this->_userResource->getRoleUsers($this->_roleId); - } - return $values; - } -} diff --git a/app/code/Magento/Webapi/Model/Acl/Role/UsersUpdater.php b/app/code/Magento/Webapi/Model/Acl/Role/UsersUpdater.php deleted file mode 100644 index cefc4bfa97039..0000000000000 --- a/app/code/Magento/Webapi/Model/Acl/Role/UsersUpdater.php +++ /dev/null @@ -1,111 +0,0 @@ -_roleId = (int)$request->getParam('role_id'); - $this->_inRoleUsersFilter = $this->_parseInRoleUsersFilter($request, $backendHelper); - } - - /** - * Parse $_inRoleUsersFilter value from request - * - * @param \Magento\App\RequestInterface $request - * @param \Magento\Backend\Helper\Data $backendHelper - * @return int - */ - protected function _parseInRoleUsersFilter( - \Magento\App\RequestInterface $request, - \Magento\Backend\Helper\Data $backendHelper - ) { - $result = self::IN_ROLE_USERS_ANY; - $filter = $backendHelper->prepareFilterString($request->getParam('filter', '')); - if (isset($filter[self::IN_ROLE_USERS_PARAMETER])) { - $result = $filter[self::IN_ROLE_USERS_PARAMETER] ? self::IN_ROLE_USERS_YES : self::IN_ROLE_USERS_NO; - } elseif (!$request->isAjax()) { - $result = self::IN_ROLE_USERS_YES; - } - return $result; - } - - /** - * Add filtering users by role. - * - * @param \Magento\Webapi\Model\Resource\Acl\User\Collection $collection - * @return \Magento\Webapi\Model\Resource\Acl\User\Collection - */ - public function update($collection) - { - if ($this->_roleId) { - switch ($this->_inRoleUsersFilter) { - case self::IN_ROLE_USERS_YES: - $collection->addFieldToFilter('role_id', $this->_roleId); - break; - case self::IN_ROLE_USERS_NO: - $collection->addFieldToFilter('role_id', array( - array('neq' => $this->_roleId), - array('is' => new \Zend_Db_Expr('NULL')) - )); - break; - } - } - return $collection; - } -} diff --git a/app/code/Magento/Webapi/Model/Acl/Rule.php b/app/code/Magento/Webapi/Model/Acl/Rule.php deleted file mode 100644 index 5bfd02e78003e..0000000000000 --- a/app/code/Magento/Webapi/Model/Acl/Rule.php +++ /dev/null @@ -1,62 +0,0 @@ -_init('Magento\Webapi\Model\Resource\Acl\Rule'); - } - - /** - * Save role resources. - * - * @return \Magento\Webapi\Model\Acl\Rule - */ - public function saveResources() - { - $this->getResource()->saveResources($this); - return $this; - } -} diff --git a/app/code/Magento/Webapi/Model/Acl/Rule/Factory.php b/app/code/Magento/Webapi/Model/Acl/Rule/Factory.php deleted file mode 100644 index abac37a3fc7c8..0000000000000 --- a/app/code/Magento/Webapi/Model/Acl/Rule/Factory.php +++ /dev/null @@ -1,55 +0,0 @@ -_objectManager = $objectManager; - } - - /** - * Create a new instance of \Magento\Webapi\Model\Acl\Rule - * - * @param array $arguments fed into constructor - * @return \Magento\Webapi\Model\Acl\Rule - */ - public function create(array $arguments = array()) - { - return $this->_objectManager->create('Magento\Webapi\Model\Acl\Rule', $arguments); - } -} diff --git a/app/code/Magento/Webapi/Model/Acl/User.php b/app/code/Magento/Webapi/Model/Acl/User.php deleted file mode 100644 index a7765f45acfa5..0000000000000 --- a/app/code/Magento/Webapi/Model/Acl/User.php +++ /dev/null @@ -1,106 +0,0 @@ -_init('Magento\Webapi\Model\Resource\Acl\User'); - } - - /** - * Get role users. - * - * @param integer $roleId - * @return array - */ - public function getRoleUsers($roleId) - { - return $this->getResource()->getRoleUsers($roleId); - } - - /** - * Load user by key. - * - * @param string $key - * @return \Magento\Webapi\Model\Acl\User - */ - public function loadByKey($key) - { - return $this->load($key, 'api_key'); - } - - /** - * Get consumer key. - * - * @return string - */ - public function getKey() - { - return $this->getData('key'); - } - - /** - * Get consumer secret. - * - * @return string - */ - public function getSecret() - { - return $this->getData('secret'); - } - - /** - * Get consumer callback URL. - * - * @return string - */ - public function getCallBackUrl() - { - return ''; - } -} diff --git a/app/code/Magento/Webapi/Model/Acl/User/Factory.php b/app/code/Magento/Webapi/Model/Acl/User/Factory.php deleted file mode 100644 index 142afb7de4437..0000000000000 --- a/app/code/Magento/Webapi/Model/Acl/User/Factory.php +++ /dev/null @@ -1,55 +0,0 @@ -_objectManager = $objectManager; - } - - /** - * Create ACL user model. - * - * @param array $arguments - * @return \Magento\Webapi\Model\Acl\User - */ - public function create(array $arguments = array()) - { - return $this->_objectManager->create(self::CLASS_NAME, $arguments); - } -} diff --git a/app/code/Magento/Webapi/Model/Acl/User/RoleUpdater.php b/app/code/Magento/Webapi/Model/Acl/User/RoleUpdater.php deleted file mode 100644 index 5e3b3e310098b..0000000000000 --- a/app/code/Magento/Webapi/Model/Acl/User/RoleUpdater.php +++ /dev/null @@ -1,67 +0,0 @@ -_userId = (int)$request->getParam('user_id'); - $this->_userFactory = $userFactory; - } - - /** - * Initialize value with role assigned to user. - * - * @param int|null $value - * @return int|null - */ - public function update($value) - { - if ($this->_userId) { - $value = $this->_userFactory->create()->load($this->_userId)->getRoleId(); - } - return $value; - } -} diff --git a/app/code/Magento/Webapi/Model/Authorization/Loader/Resource.php b/app/code/Magento/Webapi/Model/Authorization/Loader/Resource.php deleted file mode 100644 index 5f8268c04bbda..0000000000000 --- a/app/code/Magento/Webapi/Model/Authorization/Loader/Resource.php +++ /dev/null @@ -1,87 +0,0 @@ -getResources() as $aclResource) { - $acl->deny(null, $aclResource); - } - } - - /** - * Load virtual resources as sub-resources of existing one. - * - * @param \Magento\Acl $acl - */ - protected function _loadVirtualResources(\Magento\Acl $acl) - { - $virtualResources = $this->_resourceProvider->getAclVirtualResources(); - foreach ($virtualResources as $virtualResource) { - $resourceParent = $virtualResource['parent']; - $resourceId = $virtualResource['id']; - if ($acl->has($resourceParent) && !$acl->has($resourceId)) { - /** @var $resource \Magento\Acl\Resource */ - $resource = $this->_resourceFactory->createResource(array('resourceId' => $resourceId)); - $acl->addResource($resource, $resourceParent); - } - } - } - - /** - * Populate ACL with resources from external storage. - * - * @param \Magento\Acl $acl - * @throws \Magento\Core\Exception - */ - public function populateAcl(\Magento\Acl $acl) - { - parent::populateAcl($acl); - $this->_denyResources($acl); - $this->_loadVirtualResources($acl); - } -} diff --git a/app/code/Magento/Webapi/Model/Authorization/Loader/Role.php b/app/code/Magento/Webapi/Model/Authorization/Loader/Role.php deleted file mode 100644 index b7ef7cb2db90f..0000000000000 --- a/app/code/Magento/Webapi/Model/Authorization/Loader/Role.php +++ /dev/null @@ -1,72 +0,0 @@ -_roleResource = $roleResource; - $this->_roleFactory = $roleFactory; - } - - /** - * Populate ACL with roles from external storage. - * - * @param \Magento\Acl $acl - */ - public function populateAcl(\Magento\Acl $acl) - { - $roleList = $this->_roleResource->getRolesIds(); - foreach ($roleList as $roleId) { - /** @var $aclRole \Magento\Webapi\Model\Authorization\Role */ - $aclRole = $this->_roleFactory->createRole(array('roleId' => $roleId)); - $acl->addRole($aclRole); - //Deny all privileges to Role. Some of them could be allowed later by whitelist - $acl->deny($aclRole); - } - } -} diff --git a/app/code/Magento/Webapi/Model/Authorization/Loader/Rule.php b/app/code/Magento/Webapi/Model/Authorization/Loader/Rule.php deleted file mode 100644 index ab355186a9b65..0000000000000 --- a/app/code/Magento/Webapi/Model/Authorization/Loader/Rule.php +++ /dev/null @@ -1,59 +0,0 @@ -_ruleResource = $ruleResource; - } - - /** - * Populate ACL with rules from external storage. - * - * @param \Magento\Acl $acl - */ - public function populateAcl(\Magento\Acl $acl) - { - $ruleList = $this->_ruleResource->getRuleList(); - foreach ($ruleList as $rule) { - $role = $rule['role_id']; - $resource = $rule['resource_id']; - if ($acl->hasRole($role) && $acl->has($resource)) { - $acl->allow($role, $resource); - } - } - } -} diff --git a/app/code/Magento/Webapi/Model/Authorization/Policy/Acl.php b/app/code/Magento/Webapi/Model/Authorization/Policy/Acl.php deleted file mode 100644 index cd41a0c046cef..0000000000000 --- a/app/code/Magento/Webapi/Model/Authorization/Policy/Acl.php +++ /dev/null @@ -1,37 +0,0 @@ -_objectManager = $objectManager; - } - - /** - * Return new ACL role model. - * - * @param array $arguments - * @return \Magento\Webapi\Model\Authorization\Role - */ - public function createRole(array $arguments = array()) - { - return $this->_objectManager->create(self::ROLE_CLASS_NAME, $arguments); - } -} diff --git a/app/code/Magento/Webapi/Model/Authorization/Role/Locator/Factory.php b/app/code/Magento/Webapi/Model/Authorization/Role/Locator/Factory.php deleted file mode 100644 index f097c59156eea..0000000000000 --- a/app/code/Magento/Webapi/Model/Authorization/Role/Locator/Factory.php +++ /dev/null @@ -1,55 +0,0 @@ -_objectManager = $objectManager; - } - - /** - * Create a new instance of \Magento\Webapi\Model\Authorization\RoleLocator - * - * @param array $arguments fed into constructor - * @return \Magento\Webapi\Model\Authorization\RoleLocator - */ - public function create(array $arguments = array()) - { - return $this->_objectManager->create('Magento\Webapi\Model\Authorization\RoleLocator', $arguments); - } -} diff --git a/app/code/Magento/Webapi/Model/Authorization/RoleLocator.php b/app/code/Magento/Webapi/Model/Authorization/RoleLocator.php deleted file mode 100644 index 807e21789f740..0000000000000 --- a/app/code/Magento/Webapi/Model/Authorization/RoleLocator.php +++ /dev/null @@ -1,64 +0,0 @@ -_roleId = isset($data['roleId']) ? $data['roleId'] : null; - } - - /** - * Set role ID into role locator. - * - * @param string $roleId - */ - public function setRoleId($roleId) - { - $this->_roleId = $roleId; - } - - /** - * Retrieve current role. - * - * @return string|null - */ - public function getAclRoleId() - { - return $this->_roleId; - } -} diff --git a/app/code/Magento/Webapi/Model/Authz/UserLocator.php b/app/code/Magento/Webapi/Model/Authz/UserLocator.php new file mode 100644 index 0000000000000..b21568822c710 --- /dev/null +++ b/app/code/Magento/Webapi/Model/Authz/UserLocator.php @@ -0,0 +1,72 @@ +_request = $request; + $this->_integrationFactory = $integrationFactory; + } + + /** + * {@inheritdoc} + */ + public function getUserId() + { + $consumerId = $this->_request->getConsumerId(); + $integration = $this->_integrationFactory->create()->loadByConsumerId($consumerId); + return $integration->getId() ? (int)$integration->getId() : 0; + } + + /** + * {@inheritdoc} + */ + public function getUserType() + { + return UserIdentifier::USER_TYPE_INTEGRATION; + } +} diff --git a/app/code/Magento/Webapi/Model/Config/Converter.php b/app/code/Magento/Webapi/Model/Config/Converter.php index 9a513f7420877..b237fe0fbe1b6 100644 --- a/app/code/Magento/Webapi/Model/Config/Converter.php +++ b/app/code/Magento/Webapi/Model/Config/Converter.php @@ -38,6 +38,7 @@ class Converter implements \Magento\Config\ConverterInterface const KEY_HTTP_METHOD = 'httpMethod'; const KEY_SERVICE_METHODS = 'methods'; const KEY_METHOD_ROUTE = 'route'; + const KEY_ACL_RESOURCES = 'resources'; /**#@-*/ /** @@ -74,6 +75,12 @@ public function convert($source) } $httpMethod = $restRoute->attributes->getNamedItem('httpMethod')->nodeValue; $method = $restRoute->attributes->getNamedItem('method')->nodeValue; + + $resources = $restRoute->attributes->getNamedItem('resources')->nodeValue; + /** Allow whitespace usage after comma. */ + $resources = str_replace(', ', ',', $resources); + $resources = explode(',', $resources); + $isSecureAttribute = $restRoute->attributes->getNamedItem('isSecure'); $isSecure = $isSecureAttribute ? true : false; $path = (string)$restRoute->nodeValue; @@ -82,7 +89,8 @@ public function convert($source) self::KEY_HTTP_METHOD => $httpMethod, self::KEY_SERVICE_METHOD => $method, self::KEY_METHOD_ROUTE => $path, - self::KEY_IS_SECURE => $isSecure + self::KEY_IS_SECURE => $isSecure, + self::KEY_ACL_RESOURCES => $resources ); } } diff --git a/app/code/Magento/Webapi/Model/Config/Integration/Reader.php b/app/code/Magento/Webapi/Model/Config/Integration/Reader.php index 8464c16404f54..7a8637f50d7f9 100644 --- a/app/code/Magento/Webapi/Model/Config/Integration/Reader.php +++ b/app/code/Magento/Webapi/Model/Config/Integration/Reader.php @@ -40,18 +40,33 @@ class Reader extends \Magento\Config\Reader\Filesystem /** * @param \Magento\Config\FileResolverInterface $fileResolver - * @param \Magento\Webapi\Model\Config\Integration\Converter $converter - * @param \Magento\Webapi\Model\Config\Integration\SchemaLocator $schemeLocator + * @param Converter $converter + * @param SchemaLocator $schemaLocator * @param \Magento\Config\ValidationStateInterface $validationState * @param string $fileName + * @param array $idAttributes + * @param string $domDocumentClass + * @param string $defaultScope */ public function __construct( \Magento\Config\FileResolverInterface $fileResolver, \Magento\Webapi\Model\Config\Integration\Converter $converter, - \Magento\Webapi\Model\Config\Integration\SchemaLocator $schemeLocator, + \Magento\Webapi\Model\Config\Integration\SchemaLocator $schemaLocator, \Magento\Config\ValidationStateInterface $validationState, - $fileName = 'integration\api.xml' + $fileName = 'integration\api.xml', + $idAttributes = array(), + $domDocumentClass = 'Magento\Config\Dom', + $defaultScope = 'global' ) { - parent::__construct($fileResolver, $converter, $schemeLocator, $validationState, $fileName); + parent::__construct( + $fileResolver, + $converter, + $schemaLocator, + $validationState, + $fileName, + $idAttributes, + $domDocumentClass, + $defaultScope + ); } } diff --git a/app/code/Magento/Webapi/Model/Config/Reader.php b/app/code/Magento/Webapi/Model/Config/Reader.php index 345ba22dc3b69..95131fb9493f0 100644 --- a/app/code/Magento/Webapi/Model/Config/Reader.php +++ b/app/code/Magento/Webapi/Model/Config/Reader.php @@ -40,18 +40,33 @@ class Reader extends \Magento\Config\Reader\Filesystem /** * @param \Magento\Config\FileResolverInterface $fileResolver - * @param \Magento\Webapi\Model\Config\Converter $converter - * @param \Magento\Webapi\Model\Config\SchemaLocator $schemeLocator + * @param Converter $converter + * @param SchemaLocator $schemaLocator * @param \Magento\Config\ValidationStateInterface $validationState * @param string $fileName + * @param array $idAttributes + * @param string $domDocumentClass + * @param string $defaultScope */ public function __construct( \Magento\Config\FileResolverInterface $fileResolver, \Magento\Webapi\Model\Config\Converter $converter, - \Magento\Webapi\Model\Config\SchemaLocator $schemeLocator, + \Magento\Webapi\Model\Config\SchemaLocator $schemaLocator, \Magento\Config\ValidationStateInterface $validationState, - $fileName = 'webapi.xml' + $fileName = 'webapi.xml', + $idAttributes = array(), + $domDocumentClass = 'Magento\Config\Dom', + $defaultScope = 'global' ) { - parent::__construct($fileResolver, $converter, $schemeLocator, $validationState, $fileName); + parent::__construct( + $fileResolver, + $converter, + $schemaLocator, + $validationState, + $fileName, + $idAttributes, + $domDocumentClass, + $defaultScope + ); } } diff --git a/app/code/Magento/Webapi/Model/Plugin/IntegrationServiceV1.php b/app/code/Magento/Webapi/Model/Plugin/IntegrationServiceV1.php new file mode 100644 index 0000000000000..2c132adb41942 --- /dev/null +++ b/app/code/Magento/Webapi/Model/Plugin/IntegrationServiceV1.php @@ -0,0 +1,157 @@ +_authzService = $authzService; + $this->_userIdentifierFactory = $userIdentifierFactory; + } + + /** + * Persist API permissions. + * + * @param IntegrationModel $integration + * @return IntegrationModel + */ + public function afterCreate($integration) + { + $this->_saveApiPermissions($integration); + return $integration; + } + + /** + * Persist API permissions. + * + * @param IntegrationModel $integration + * @return IntegrationModel + */ + public function afterUpdate($integration) + { + $this->_saveApiPermissions($integration); + return $integration; + } + + /** + * Add API permissions to integration data. + * + * @param IntegrationModel $integration + * @return IntegrationModel + */ + public function afterGet($integration) + { + $this->_addAllowedResources($integration); + return $integration; + } + + /** + * Add the list of allowed resources to the integration object data by 'resource' key. + * + * @param IntegrationModel $integration + */ + protected function _addAllowedResources(IntegrationModel $integration) + { + if ($integration->getId()) { + $userIdentifier = $this->_createUserIdentifier($integration->getId()); + $integration->setData('resource', $this->_authzService->getAllowedResources($userIdentifier)); + } + } + + /** + * Persist API permissions. + * + * Permissions are expected to be set to integration object by 'resource' key. + * If 'all_resources' is set and is evaluated to true, permissions to all resources will be granted. + * + * @param IntegrationModel $integration + */ + protected function _saveApiPermissions(IntegrationModel $integration) + { + if ($integration->getId()) { + $userIdentifier = $this->_createUserIdentifier($integration->getId()); + if ($integration->getData('all_resources')) { + $this->_authzService->grantAllPermissions($userIdentifier); + } else if (is_array($integration->getData('resource'))) { + $this->_authzService->grantPermissions($userIdentifier, $integration->getData('resource')); + } else { + $this->_authzService->grantPermissions($userIdentifier, array()); + } + } + } + + /** + * Instantiate new user identifier for an integration. + * + * @param int $integrationId + * @return UserIdentifier + */ + protected function _createUserIdentifier($integrationId) + { + $userIdentifier = $this->_userIdentifierFactory->create( + UserIdentifier::USER_TYPE_INTEGRATION, + (int)$integrationId + ); + return $userIdentifier; + } + + /** + * Process integration resource permissions after the integration is created + * + * @param array $integrationData Data of integration deleted + * @return array $integrationData + */ + public function afterDelete(array $integrationData) + { + //No check needed for integration data since it cannot be empty in the parent invocation - delete + $userIdentifier = $this->_userIdentifierFactory->create( + UserIdentifier::USER_TYPE_INTEGRATION, + (int)$integrationData[IntegrationModel::ID] + ); + $this->_authzService->removePermissions($userIdentifier); + return $integrationData; + } +} diff --git a/app/code/Magento/Webapi/Model/Plugin/Setup.php b/app/code/Magento/Webapi/Model/Plugin/Setup.php index cd58f6141dc22..3a8d2bfe8be6d 100644 --- a/app/code/Magento/Webapi/Model/Plugin/Setup.php +++ b/app/code/Magento/Webapi/Model/Plugin/Setup.php @@ -21,6 +21,7 @@ * @copyright Copyright (c) 2013 X.commerce, Inc. (http://www.magentocommerce.com) * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ + namespace Magento\Webapi\Model\Plugin; use Magento\Authz\Model\UserIdentifier; @@ -65,8 +66,8 @@ class Setup * Construct Setup plugin instance * * @param \Magento\Webapi\Model\IntegrationConfig $integrationConfig - * @param \Magento\Integration\Service\IntegrationV1Interface $integrationService * @param \Magento\Authz\Service\AuthorizationV1 $authzService + * @param \Magento\Integration\Service\IntegrationV1Interface $integrationService * @param \Magento\Authz\Model\UserIdentifier\Factory $userIdentifierFactory */ public function __construct( @@ -96,11 +97,11 @@ public function afterInitIntegrationProcessing($integrationNames) $integrations = $this->_integrationConfig->getIntegrations(); foreach ($integrationNames as $name) { if (isset($integrations[$name])) { - $integrationData = $this->_integrationService->findByName($name); - if (isset($integrationData[Integration::ID])) { + $integration = $this->_integrationService->findByName($name); + if ($integration->getId()) { $userIdentifier = $this->_userIdentifierFactory->create( UserIdentifier::USER_TYPE_INTEGRATION, - (int)$integrationData[Integration::ID] + $integration->getId() ); $this->_authzService->grantPermissions( $userIdentifier, @@ -111,4 +112,4 @@ public function afterInitIntegrationProcessing($integrationNames) } return $integrationNames; } -} \ No newline at end of file +} diff --git a/app/code/Magento/Webapi/Model/Resource/Acl/Role.php b/app/code/Magento/Webapi/Model/Resource/Acl/Role.php deleted file mode 100644 index 91191d8f165f6..0000000000000 --- a/app/code/Magento/Webapi/Model/Resource/Acl/Role.php +++ /dev/null @@ -1,89 +0,0 @@ -_init('webapi_role', 'role_id'); - } - - /** - * Initialize unique fields. - * - * @return \Magento\Webapi\Model\Resource\Acl\Role - */ - protected function _initUniqueFields() - { - $this->_uniqueFields = array( - array( - 'field' => 'role_name', - 'title' => __('Role Name') - ), - ); - return $this; - } - - /** - * Get roles list for selects. - * - * @return array - */ - public function getRolesList() - { - $adapter = $this->getReadConnection(); - $select = $adapter->select() - ->from($this->getMainTable(), array($this->getIdFieldName(), 'role_name')) - ->order('role_name'); - return $adapter->fetchPairs($select); - } - - /** - * Get all roles IDs. - * - * @return array - */ - public function getRolesIds() - { - $adapter = $this->getReadConnection(); - $select = $adapter->select()->from($this->getMainTable(), array($this->getIdFieldName())); - return $adapter->fetchCol($select); - } -} diff --git a/app/code/Magento/Webapi/Model/Resource/Acl/Role/Collection.php b/app/code/Magento/Webapi/Model/Resource/Acl/Role/Collection.php deleted file mode 100644 index 82fbacd4c1e51..0000000000000 --- a/app/code/Magento/Webapi/Model/Resource/Acl/Role/Collection.php +++ /dev/null @@ -1,37 +0,0 @@ -_init('Magento\Webapi\Model\Acl\Role', 'Magento\Webapi\Model\Resource\Acl\Role'); - } -} diff --git a/app/code/Magento/Webapi/Model/Resource/Acl/Rule.php b/app/code/Magento/Webapi/Model/Resource/Acl/Rule.php deleted file mode 100644 index 6c448970dde7e..0000000000000 --- a/app/code/Magento/Webapi/Model/Resource/Acl/Rule.php +++ /dev/null @@ -1,109 +0,0 @@ -_init('webapi_rule', 'rule_id'); - } - - /** - * Get all rules from DB. - * - * @return array - */ - public function getRuleList() - { - $adapter = $this->getReadConnection(); - $select = $adapter->select()->from($this->getMainTable(), array('resource_id', 'role_id')); - return $adapter->fetchAll($select); - } - - /** - * Get resource IDs assigned to role. - * - * @param integer $roleId Web api user role ID - * @return array - */ - public function getResourceIdsByRole($roleId) - { - $adapter = $this->getReadConnection(); - $select = $adapter->select() - ->from($this->getMainTable(), array('resource_id')) - ->where('role_id = ?', (int)$roleId); - return $adapter->fetchCol($select); - } - - /** - * Save resources. - * - * @param \Magento\Webapi\Model\Acl\Rule $rule - * @throws \Exception - */ - public function saveResources(\Magento\Webapi\Model\Acl\Rule $rule) - { - $roleId = $rule->getRoleId(); - if ($roleId > 0) { - $adapter = $this->_getWriteAdapter(); - $adapter->beginTransaction(); - - try { - $adapter->delete($this->getMainTable(), array('role_id = ?' => (int)$roleId)); - - $resources = $rule->getResources(); - if ($resources) { - $resourcesToInsert = array(); - foreach ($resources as $resName) { - $resourcesToInsert[] = array( - 'role_id' => $roleId, - 'resource_id' => trim($resName) - ); - } - $adapter->insertArray( - $this->getMainTable(), - array('role_id', 'resource_id'), - $resourcesToInsert - ); - } - - $adapter->commit(); - } catch (\Exception $e) { - $adapter->rollBack(); - throw $e; - } - } - } -} diff --git a/app/code/Magento/Webapi/Model/Resource/Acl/Rule/Collection.php b/app/code/Magento/Webapi/Model/Resource/Acl/Rule/Collection.php deleted file mode 100644 index eb456d94c1624..0000000000000 --- a/app/code/Magento/Webapi/Model/Resource/Acl/Rule/Collection.php +++ /dev/null @@ -1,57 +0,0 @@ - - */ -namespace Magento\Webapi\Model\Resource\Acl\Rule; - -class Collection extends \Magento\Core\Model\Resource\Db\Collection\AbstractCollection -{ - /** - * Resource collection initialization. - */ - protected function _construct() - { - $this->_init('Magento\Webapi\Model\Acl\Rule', 'Magento\Webapi\Model\Resource\Acl\Rule'); - } - - /** - * Retrieve rules by role. - * - * @param int $roleId - * @return \Magento\Webapi\Model\Resource\Acl\Rule\Collection - */ - public function getByRole($roleId) - { - $this->getSelect()->where("role_id = ?", (int)$roleId); - return $this; - } -} diff --git a/app/code/Magento/Webapi/Model/Resource/Acl/User.php b/app/code/Magento/Webapi/Model/Resource/Acl/User.php deleted file mode 100644 index 19c31bbe61a9c..0000000000000 --- a/app/code/Magento/Webapi/Model/Resource/Acl/User.php +++ /dev/null @@ -1,78 +0,0 @@ -_init('webapi_user', 'user_id'); - } - - /** - * Initialize unique fields. - * - * @return \Magento\Webapi\Model\Resource\Acl\User - */ - protected function _initUniqueFields() - { - $this->_uniqueFields = array( - array( - 'field' => 'api_key', - 'title' => __('API Key') - ), - ); - return $this; - } - - /** - * Get role users. - * - * @param integer $roleId - * @return array - */ - public function getRoleUsers($roleId) - { - $adapter = $this->_getReadAdapter(); - $select = $adapter->select() - ->from($this->getMainTable(), array('user_id')) - ->where('role_id = ?', (int)$roleId); - return $adapter->fetchCol($select); - } -} diff --git a/app/code/Magento/Webapi/Model/Resource/Acl/User/Collection.php b/app/code/Magento/Webapi/Model/Resource/Acl/User/Collection.php deleted file mode 100644 index 626a4968ab674..0000000000000 --- a/app/code/Magento/Webapi/Model/Resource/Acl/User/Collection.php +++ /dev/null @@ -1,37 +0,0 @@ -_init('Magento\Webapi\Model\Acl\User', 'Magento\Webapi\Model\Resource\Acl\User'); - } -} diff --git a/app/code/Magento/Webapi/Model/Rest/Config.php b/app/code/Magento/Webapi/Model/Rest/Config.php index a9945dd7603de..0d4bf38d2769f 100644 --- a/app/code/Magento/Webapi/Model/Rest/Config.php +++ b/app/code/Magento/Webapi/Model/Rest/Config.php @@ -46,6 +46,7 @@ class Config const KEY_CLASS = 'class'; const KEY_METHOD = 'method'; const KEY_ROUTE_PATH = 'routePath'; + const KEY_ACL_RESOURCES = 'resources'; /*#@-*/ /** @var \Magento\Webapi\Model\Config */ @@ -88,7 +89,8 @@ protected function _createRoute($routeData) $route->setServiceClass($routeData[self::KEY_CLASS]) ->setServiceMethod($routeData[self::KEY_METHOD]) - ->setSecure($routeData[self::KEY_IS_SECURE]); + ->setSecure($routeData[self::KEY_IS_SECURE]) + ->setAclResources($routeData[self::KEY_ACL_RESOURCES]); return $route; } @@ -130,12 +132,14 @@ public function getRestRoutes(\Magento\Webapi\Controller\Rest\Request $request) if (strtoupper($methodInfo[Converter::KEY_HTTP_METHOD]) == strtoupper($httpMethod)) { $secure = $methodInfo[Converter::KEY_IS_SECURE]; $methodRoute = $methodInfo[Converter::KEY_METHOD_ROUTE]; + $aclResources = $methodInfo[Converter::KEY_ACL_RESOURCES]; $routes[] = $this->_createRoute( array( self::KEY_ROUTE_PATH => $serviceData[Converter::KEY_BASE_URL] . $methodRoute, self::KEY_CLASS => $serviceName, self::KEY_METHOD => $methodName, - self::KEY_IS_SECURE => $secure + self::KEY_IS_SECURE => $secure, + self::KEY_ACL_RESOURCES => $aclResources ) ); } diff --git a/app/code/Magento/Webapi/Model/Soap/Config.php b/app/code/Magento/Webapi/Model/Soap/Config.php index ba7e4285cfa6b..6dae7df7070f1 100644 --- a/app/code/Magento/Webapi/Model/Soap/Config.php +++ b/app/code/Magento/Webapi/Model/Soap/Config.php @@ -37,6 +37,7 @@ class Config const KEY_IS_SECURE = 'isSecure'; const KEY_METHOD = 'method'; const KEY_IS_REQUIRED = 'inputRequired'; + const KEY_ACL_RESOURCES = 'resources'; /**#@-*/ /** @var \Magento\Filesystem */ @@ -110,7 +111,8 @@ protected function _getSoapOperations($requestedService) $this->_soapOperations[$operationName] = array( self::KEY_CLASS => $class, self::KEY_METHOD => $method, - self::KEY_IS_SECURE => $methodData[Converter::KEY_IS_SECURE] + self::KEY_IS_SECURE => $methodData[Converter::KEY_IS_SECURE], + self::KEY_ACL_RESOURCES => $methodData[Converter::KEY_ACL_RESOURCES] ); } } @@ -132,16 +134,14 @@ protected function _getSoapServices() $this->_soapServices = array(); foreach ($this->_config->getServices() as $serviceData) { $serviceClass = $serviceData[Converter::KEY_SERVICE_CLASS]; - $reflection = new \ReflectionClass($serviceClass); - foreach ($reflection->getMethods() as $method) { - // find if method is secure, assume operation is not secure by default - $methodName = $method->getName(); - $isSecure = $serviceData[Converter::KEY_SERVICE_METHODS][$methodName][Converter::KEY_IS_SECURE]; + foreach ($serviceData[Converter::KEY_SERVICE_METHODS] as $methodMetadata) { // TODO: Simplify the structure in SOAP. Currently it is unified in SOAP and REST + $methodName = $methodMetadata[Converter::KEY_SERVICE_METHOD]; $this->_soapServices[$serviceClass]['methods'][$methodName] = array( self::KEY_METHOD => $methodName, - self::KEY_IS_REQUIRED => (bool)$method->getNumberOfParameters(), - self::KEY_IS_SECURE => $isSecure + self::KEY_IS_REQUIRED => (bool)$methodMetadata[Converter::KEY_IS_SECURE], + self::KEY_IS_SECURE => $methodMetadata[Converter::KEY_IS_SECURE], + self::KEY_ACL_RESOURCES => $methodMetadata[Converter::KEY_ACL_RESOURCES] ); $this->_soapServices[$serviceClass][self::KEY_CLASS] = $serviceClass; }; @@ -171,7 +171,8 @@ public function getServiceMethodInfo($soapOperation, $requestedServices) return array( self::KEY_CLASS => $soapOperations[$soapOperation][self::KEY_CLASS], self::KEY_METHOD => $soapOperations[$soapOperation][self::KEY_METHOD], - self::KEY_IS_SECURE => $soapOperations[$soapOperation][self::KEY_IS_SECURE] + self::KEY_IS_SECURE => $soapOperations[$soapOperation][self::KEY_IS_SECURE], + self::KEY_ACL_RESOURCES => $soapOperations[$soapOperation][self::KEY_ACL_RESOURCES] ); } diff --git a/app/code/Magento/Webapi/Model/Source/Acl/Role.php b/app/code/Magento/Webapi/Model/Source/Acl/Role.php deleted file mode 100644 index 7bbf690618429..0000000000000 --- a/app/code/Magento/Webapi/Model/Source/Acl/Role.php +++ /dev/null @@ -1,77 +0,0 @@ - - */ -namespace Magento\Webapi\Model\Source\Acl; - -class Role implements \Magento\Core\Model\Option\ArrayInterface -{ - /** - * @var \Magento\Webapi\Model\Resource\Acl\Role - */ - protected $_resource = null; - - /** - * @param \Magento\Webapi\Model\Resource\Acl\RoleFactory $roleFactory - */ - public function __construct( - \Magento\Webapi\Model\Resource\Acl\RoleFactory $roleFactory - ) { - $this->_resource = $roleFactory->create(); - } - - /** - * Retrieve option hash of Web API Roles. - * - * @param bool $addEmpty - * @return array - */ - public function toOptionHash($addEmpty = true) - { - $options = $this->_resource->getRolesList(); - if ($addEmpty) { - $options = array('' => '') + $options; - } - return $options; - } - - /** - * Return option array. - * - * @return array - */ - public function toOptionArray() - { - $options = $this->_resource->getRolesList(); - return $options; - } -} diff --git a/app/code/Magento/Webapi/etc/acl.xsd b/app/code/Magento/Webapi/etc/acl.xsd deleted file mode 100644 index 88ff6a0b0e866..0000000000000 --- a/app/code/Magento/Webapi/etc/acl.xsd +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - - - - - - - - - - - - - - Attribute ID is unique under all ACL resources - - - - - - - - - - - - - - - - - - Attribute ID is unique under all mapped ACL resources - - - - - - - - - - - - - - - - - ACL Resource. Recursive complex type - - - - - - - - - - - - - - - - - ACL Resource mapping. - - - - - - - - - - - Item ID attribute can have only [A-Za-z0-9_]/[A-Za-z0-9_]. Minimal length is 3 symbols. Case insensitive. - - - - - - - - - - - - Item title attribute minimal length is 3 symbols - - - - - - - - - diff --git a/app/code/Magento/Webapi/etc/adminhtml/acl.xml b/app/code/Magento/Webapi/etc/adminhtml/acl.xml deleted file mode 100644 index c83409123c48a..0000000000000 --- a/app/code/Magento/Webapi/etc/adminhtml/acl.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/app/code/Magento/Webapi/etc/adminhtml/menu.xml b/app/code/Magento/Webapi/etc/adminhtml/menu.xml deleted file mode 100644 index 1bc1d041c30ec..0000000000000 --- a/app/code/Magento/Webapi/etc/adminhtml/menu.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - diff --git a/app/code/Magento/Webapi/etc/adminhtml/routes.xml b/app/code/Magento/Webapi/etc/adminhtml/routes.xml deleted file mode 100644 index 1e67b3e7da102..0000000000000 --- a/app/code/Magento/Webapi/etc/adminhtml/routes.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - diff --git a/app/code/Magento/Webapi/etc/config.xml b/app/code/Magento/Webapi/etc/config.xml deleted file mode 100644 index 95d7c45372b2f..0000000000000 --- a/app/code/Magento/Webapi/etc/config.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - diff --git a/app/code/Magento/Webapi/etc/di.xml b/app/code/Magento/Webapi/etc/di.xml index 4e87c64decd3c..3bb8d5606daeb 100644 --- a/app/code/Magento/Webapi/etc/di.xml +++ b/app/code/Magento/Webapi/etc/di.xml @@ -36,4 +36,11 @@ + + + + + + + diff --git a/app/code/Magento/Webapi/etc/module.xml b/app/code/Magento/Webapi/etc/module.xml index c1f25d2ac17c4..42ebeefa5ed0c 100755 --- a/app/code/Magento/Webapi/etc/module.xml +++ b/app/code/Magento/Webapi/etc/module.xml @@ -24,7 +24,7 @@ */ --> - + diff --git a/app/code/Magento/Webapi/etc/validation.xml b/app/code/Magento/Webapi/etc/validation.xml deleted file mode 100644 index 4b48169973820..0000000000000 --- a/app/code/Magento/Webapi/etc/validation.xml +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/code/Magento/Webapi/etc/webapi.xsd b/app/code/Magento/Webapi/etc/webapi.xsd index 25017998aa7a6..05f6994271804 100644 --- a/app/code/Magento/Webapi/etc/webapi.xsd +++ b/app/code/Magento/Webapi/etc/webapi.xsd @@ -29,12 +29,12 @@ - + - + @@ -53,8 +53,14 @@ + + + + + + diff --git a/app/code/Magento/Webapi/etc/webapi_rest/di.xml b/app/code/Magento/Webapi/etc/webapi_rest/di.xml index e09556f0e5c8e..6e6562d31b7b1 100644 --- a/app/code/Magento/Webapi/etc/webapi_rest/di.xml +++ b/app/code/Magento/Webapi/etc/webapi_rest/di.xml @@ -24,70 +24,14 @@ */ --> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - api_acl_resources - - - - - Magento_Webapi + + + + + - - - - - - - - - - - - - - - - - - - @@ -149,5 +93,8 @@ + + + diff --git a/app/code/Magento/Webapi/etc/webapi_soap/di.xml b/app/code/Magento/Webapi/etc/webapi_soap/di.xml index d701f2aa35bdb..922a5cf8290e6 100644 --- a/app/code/Magento/Webapi/etc/webapi_soap/di.xml +++ b/app/code/Magento/Webapi/etc/webapi_soap/di.xml @@ -24,70 +24,14 @@ */ --> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - api_acl_resources - - - - - Magento_Webapi + + + + + - - - - - - - - - - - - - - - - - - - @@ -96,4 +40,9 @@ + + + + + diff --git a/dev/tests/integration/testsuite/Magento/Webapi/Block/Adminhtml/Role/Edit/FormTest.php b/app/code/Magento/Webapi/sql/webapi_setup/upgrade-1.0.0.3-1.0.0.4.php similarity index 71% rename from dev/tests/integration/testsuite/Magento/Webapi/Block/Adminhtml/Role/Edit/FormTest.php rename to app/code/Magento/Webapi/sql/webapi_setup/upgrade-1.0.0.3-1.0.0.4.php index a437ec65a01c5..6c4fb1191c118 100644 --- a/dev/tests/integration/testsuite/Magento/Webapi/Block/Adminhtml/Role/Edit/FormTest.php +++ b/app/code/Magento/Webapi/sql/webapi_setup/upgrade-1.0.0.3-1.0.0.4.php @@ -1,6 +1,6 @@ startSetup(); +$connection = $installer->getConnection(); - /** - * @var \Magento\Webapi\Block\Adminhtml\Role\Edit\Form - */ - protected $_block; -} +$connection->dropTable($this->getTable('webapi_user')); +$connection->dropTable($this->getTable('webapi_rule')); +$connection->dropTable($this->getTable('webapi_role')); + +$installer->endSetup(); diff --git a/app/code/Magento/Webapi/view/adminhtml/integration/activate/permissions/tab/webapi.phtml b/app/code/Magento/Webapi/view/adminhtml/integration/activate/permissions/tab/webapi.phtml index ca5af5665540d..307cecb1194e6 100644 --- a/app/code/Magento/Webapi/view/adminhtml/integration/activate/permissions/tab/webapi.phtml +++ b/app/code/Magento/Webapi/view/adminhtml/integration/activate/permissions/tab/webapi.phtml @@ -27,29 +27,35 @@ */ ?>
    -
    -
    -
    + isTreeEmpty()): ?> +

    + +
    +
    +
    +
    -
    +
    - + }); + + diff --git a/app/code/Magento/Webapi/view/adminhtml/layout/adminhtml_integration_edit.xml b/app/code/Magento/Webapi/view/adminhtml/layout/adminhtml_integration_edit.xml index a034a0812f23d..8750b4f826288 100644 --- a/app/code/Magento/Webapi/view/adminhtml/layout/adminhtml_integration_edit.xml +++ b/app/code/Magento/Webapi/view/adminhtml/layout/adminhtml_integration_edit.xml @@ -32,6 +32,12 @@ integration_edit_tab_webapi info_section + + + api_config_section + integration_config_edit_tab_webapi + api_section + diff --git a/app/code/Magento/Webapi/view/adminhtml/layout/adminhtml_webapi_role_edit.xml b/app/code/Magento/Webapi/view/adminhtml/layout/adminhtml_webapi_role_edit.xml deleted file mode 100644 index 148849bdee87b..0000000000000 --- a/app/code/Magento/Webapi/view/adminhtml/layout/adminhtml_webapi_role_edit.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - - - - - - - - - 1 - - - - - - diff --git a/app/code/Magento/Webapi/view/adminhtml/layout/adminhtml_webapi_role_edit_tab_users_grid_block.xml b/app/code/Magento/Webapi/view/adminhtml/layout/adminhtml_webapi_role_edit_tab_users_grid_block.xml deleted file mode 100644 index bde870c4131b2..0000000000000 --- a/app/code/Magento/Webapi/view/adminhtml/layout/adminhtml_webapi_role_edit_tab_users_grid_block.xml +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - Magento\Webapi\Model\Acl\Role\UsersUpdater - - - - - - - roleUserGrid - Magento\Webapi\Model\Resource\Acl\User\Collection - true - role_user_id - ASC - - 1 - - - - Role Users Information - - - - 1 - - - - - - in_role_users - in_role_users - a-center - checkbox - - Magento\Webapi\Model\Acl\Role\InRoleUserUpdater - - - in_role_users - center - user_id - - - - - role_name - User ID - 20 - left - 1 - user_id - - - - - role_user_contactemail - Contact Email - left - contact_email - - - - - role_user_apikey - API Key - left - api_key - - - - - - diff --git a/app/code/Magento/Webapi/view/adminhtml/layout/adminhtml_webapi_role_grid_block.xml b/app/code/Magento/Webapi/view/adminhtml/layout/adminhtml_webapi_role_grid_block.xml deleted file mode 100644 index 061a0cd186177..0000000000000 --- a/app/code/Magento/Webapi/view/adminhtml/layout/adminhtml_webapi_role_grid_block.xml +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - webapiRoleGrid - Magento\Webapi\Model\Resource\Acl\Role\Collection - true - role_id - asc - - 1 - - - - - - */*/edit - - getId - - - No Roles Found - - - - ID - 80px - text - role_id - - - - - Role Name - role_name - - - - - - diff --git a/app/code/Magento/Webapi/view/adminhtml/layout/adminhtml_webapi_role_index.xml b/app/code/Magento/Webapi/view/adminhtml/layout/adminhtml_webapi_role_index.xml deleted file mode 100644 index f817b2ceacb99..0000000000000 --- a/app/code/Magento/Webapi/view/adminhtml/layout/adminhtml_webapi_role_index.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - diff --git a/app/code/Magento/Webapi/view/adminhtml/layout/adminhtml_webapi_role_rolegrid.xml b/app/code/Magento/Webapi/view/adminhtml/layout/adminhtml_webapi_role_rolegrid.xml deleted file mode 100644 index 403d7ed6347d7..0000000000000 --- a/app/code/Magento/Webapi/view/adminhtml/layout/adminhtml_webapi_role_rolegrid.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - diff --git a/app/code/Magento/Webapi/view/adminhtml/layout/adminhtml_webapi_role_usersgrid.xml b/app/code/Magento/Webapi/view/adminhtml/layout/adminhtml_webapi_role_usersgrid.xml deleted file mode 100644 index de882e9a0779e..0000000000000 --- a/app/code/Magento/Webapi/view/adminhtml/layout/adminhtml_webapi_role_usersgrid.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - diff --git a/app/code/Magento/Webapi/view/adminhtml/layout/adminhtml_webapi_user_edit.xml b/app/code/Magento/Webapi/view/adminhtml/layout/adminhtml_webapi_user_edit.xml deleted file mode 100644 index 06509e2bffc1b..0000000000000 --- a/app/code/Magento/Webapi/view/adminhtml/layout/adminhtml_webapi_user_edit.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - diff --git a/app/code/Magento/Webapi/view/adminhtml/layout/adminhtml_webapi_user_edit_tab_roles_grid_block.xml b/app/code/Magento/Webapi/view/adminhtml/layout/adminhtml_webapi_user_edit_tab_roles_grid_block.xml deleted file mode 100644 index 3097b6eb3afa9..0000000000000 --- a/app/code/Magento/Webapi/view/adminhtml/layout/adminhtml_webapi_user_edit_tab_roles_grid_block.xml +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - permissionsUserRolesGrid - Magento\Webapi\Model\Resource\Acl\Role\Collection - true - sort_order - ASC - - 1 - - - - User Roles Information - - - - permissionsUserRolesGrid - - - - role_id - role_id - role_id - Assigned - radio - a-center - center - 0 - 0 - 0 - - Magento\Webapi\Model\Acl\User\RoleUpdater - - - - - - - role_name - Role Name - role_name - - - - - - diff --git a/app/code/Magento/Webapi/view/adminhtml/layout/adminhtml_webapi_user_grid.xml b/app/code/Magento/Webapi/view/adminhtml/layout/adminhtml_webapi_user_grid.xml deleted file mode 100644 index cebca6e0fdcc0..0000000000000 --- a/app/code/Magento/Webapi/view/adminhtml/layout/adminhtml_webapi_user_grid.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - diff --git a/app/code/Magento/Webapi/view/adminhtml/layout/adminhtml_webapi_user_grid_block.xml b/app/code/Magento/Webapi/view/adminhtml/layout/adminhtml_webapi_user_grid_block.xml deleted file mode 100644 index 226f096fa7f53..0000000000000 --- a/app/code/Magento/Webapi/view/adminhtml/layout/adminhtml_webapi_user_grid_block.xml +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - permissionsUserGrid - Magento\Webapi\Model\Resource\Acl\User\Collection - true - user_name - asc - - 1 - - - - - - */*/edit - - getId - - - No Users Found - - - - ID - 80px - text - user_id - - - - - Contact Email - contact_email - - - - - API Key - api_key - - - - - Role Name - role_id - 200px - options - - - - - - - diff --git a/app/code/Magento/Webapi/view/adminhtml/layout/adminhtml_webapi_user_index.xml b/app/code/Magento/Webapi/view/adminhtml/layout/adminhtml_webapi_user_index.xml deleted file mode 100644 index 95ea54783ea90..0000000000000 --- a/app/code/Magento/Webapi/view/adminhtml/layout/adminhtml_webapi_user_index.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - diff --git a/app/code/Magento/Webapi/view/adminhtml/layout/adminhtml_webapi_user_rolesgrid.xml b/app/code/Magento/Webapi/view/adminhtml/layout/adminhtml_webapi_user_rolesgrid.xml deleted file mode 100644 index 61107e416f042..0000000000000 --- a/app/code/Magento/Webapi/view/adminhtml/layout/adminhtml_webapi_user_rolesgrid.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - diff --git a/app/code/Magento/Webapi/view/adminhtml/rolesedit.phtml b/app/code/Magento/Webapi/view/adminhtml/rolesedit.phtml deleted file mode 100644 index 1dab3938ea5f2..0000000000000 --- a/app/code/Magento/Webapi/view/adminhtml/rolesedit.phtml +++ /dev/null @@ -1,149 +0,0 @@ - - -
    - - - - -
    - -
    - - -
    - -
    -
    - -
    - - -
    -
    -
    -
    -
    - - - diff --git a/app/code/Magento/Webapi/view/adminhtml/rolesusersgridjs.phtml b/app/code/Magento/Webapi/view/adminhtml/rolesusersgridjs.phtml deleted file mode 100644 index 3399d3e9e0dfb..0000000000000 --- a/app/code/Magento/Webapi/view/adminhtml/rolesusersgridjs.phtml +++ /dev/null @@ -1,122 +0,0 @@ - -getLayout()->getBlock('webapi.role.edit.tab.users.grid'); ?> -getLayout()->getBlock('webapi.role.edit.tab.users.grid.columnSet.in_role_users'); ?> -getJsObjectName()): ?> - - diff --git a/app/code/Magento/Webhook/Block/Adminhtml/Integration/Activate/Permissions/Tab/Webhook.php b/app/code/Magento/Webhook/Block/Adminhtml/Integration/Activate/Permissions/Tab/Webhook.php deleted file mode 100644 index 3b71bab910f85..0000000000000 --- a/app/code/Magento/Webhook/Block/Adminhtml/Integration/Activate/Permissions/Tab/Webhook.php +++ /dev/null @@ -1,64 +0,0 @@ -_subscriptionData = $registry->registry(self::REGISTRY_KEY_CURRENT_SUBSCRIPTION); - } - - /** - * Gets accept url - * - * @return string - */ - public function getAcceptUrl() - { - return $this->getUrl('adminhtml/*/accept', array('id' => $this->_subscriptionData[self::DATA_SUBSCRIPTION_ID])); - } - - /** - * Get subscription name - * - * @return string - */ - public function getSubscriptionName() - { - return $this->_subscriptionData[self::DATA_NAME]; - } - - /** - * Get list of topics for subscription - * - * @return string[] - */ - public function getSubscriptionTopics() - { - return $this->_subscriptionData[self::DATA_TOPICS]; - } -} diff --git a/app/code/Magento/Webhook/Block/Adminhtml/Registration/Create/Form.php b/app/code/Magento/Webhook/Block/Adminhtml/Registration/Create/Form.php deleted file mode 100644 index 1c63171b3fac6..0000000000000 --- a/app/code/Magento/Webhook/Block/Adminhtml/Registration/Create/Form.php +++ /dev/null @@ -1,122 +0,0 @@ -_coreRegistry->registry(self::REGISTRY_KEY_CURRENT_SUBSCRIPTION); - $apiKey = $this->_generateRandomString(self::API_KEY_LENGTH); - $apiSecret = $this->_generateRandomString(self::API_SECRET_LENGTH); - $inputLength = max(self::API_KEY_LENGTH, self::API_SECRET_LENGTH, self::MIN_TEXT_INPUT_LENGTH); - - $form = $this->_formFactory->create(array( - 'attributes' => array( - 'id' => 'api_user', - 'action' => $this->getUrl( - 'adminhtml/*/register', array('id' => $subscription[self::DATA_SUBSCRIPTION_ID]) - ), - 'method' => 'post', - )) - ); - - $fieldset = $form; - - $fieldset->addField('company', 'text', array( - 'label' => __('Company'), - 'name' => 'company', - 'size' => $inputLength, - )); - - $fieldset->addField('email', 'text', array( - 'label' => __('Contact Email'), - 'name' => 'email', - 'class' => 'email', - 'required' => true, - 'size' => $inputLength, - )); - - $fieldset->addField('apikey', 'text', array( - 'label' => __('API Key'), - 'name' => 'apikey', - 'value' => $apiKey, - 'class' => 'monospace', - 'required' => true, - 'size' => $inputLength, - )); - - $fieldset->addField('apisecret', 'text', array( - 'label' => __('API Secret'), - 'name' => 'apisecret', - 'value' => $apiSecret, - 'class' => 'monospace', - 'required' => true, - 'size' => $inputLength, - )); - - $form->setUseContainer(true); - - $this->setForm($form); - - return parent::_prepareForm(); - } - - /** - * Generates a random alphanumeric string - * - * @param int $length - * @return string - */ - private function _generateRandomString($length) - { - return $this->mathRandom->getRandomString( - $length, \Magento\Math\Random::CHARS_DIGITS . \Magento\Math\Random::CHARS_LOWERS - ); - } -} diff --git a/app/code/Magento/Webhook/Block/Adminhtml/Registration/Create/Form/Container.php b/app/code/Magento/Webhook/Block/Adminhtml/Registration/Create/Form/Container.php deleted file mode 100644 index bac3dfadbab2e..0000000000000 --- a/app/code/Magento/Webhook/Block/Adminhtml/Registration/Create/Form/Container.php +++ /dev/null @@ -1,77 +0,0 @@ -_subscriptionData = $registry->registry(self::REGISTRY_KEY_CURRENT_SUBSCRIPTION);; - } - - /** - * Gets submit url - * - * @return string Form url - */ - public function getSubmitUrl() - { - return $this->getUrl( - 'adminhtml/*/register', array('id' => $this->_subscriptionData[self::DATA_SUBSCRIPTION_ID]) - ); - } - - /** - * Get subscription name - * - * @return string - */ - public function getSubscriptionName() - { - return $this->_subscriptionData[self::DATA_NAME]; - } -} diff --git a/app/code/Magento/Webhook/Block/Adminhtml/Registration/Failed.php b/app/code/Magento/Webhook/Block/Adminhtml/Registration/Failed.php deleted file mode 100644 index 7e0bbb610a88c..0000000000000 --- a/app/code/Magento/Webhook/Block/Adminhtml/Registration/Failed.php +++ /dev/null @@ -1,42 +0,0 @@ -_backendSession->getMessages(true)->getLastAddedMessage(); - return $lastAdded ? $lastAdded->toString() : null; - } -} diff --git a/app/code/Magento/Webhook/Block/Adminhtml/Subscription.php b/app/code/Magento/Webhook/Block/Adminhtml/Subscription.php deleted file mode 100644 index 8cc0a4728c628..0000000000000 --- a/app/code/Magento/Webhook/Block/Adminhtml/Subscription.php +++ /dev/null @@ -1,52 +0,0 @@ -_headerText = __('Subscriptions'); - $this->_addButtonLabel = __('Add Subscription'); - } -} diff --git a/app/code/Magento/Webhook/Block/Adminhtml/Subscription/Edit.php b/app/code/Magento/Webhook/Block/Adminhtml/Subscription/Edit.php deleted file mode 100644 index fb57603916ae0..0000000000000 --- a/app/code/Magento/Webhook/Block/Adminhtml/Subscription/Edit.php +++ /dev/null @@ -1,102 +0,0 @@ -_objectId = 'id'; - $this->_blockGroup = 'Magento_Webhook'; - $this->_controller = 'adminhtml_subscription'; - $this->_subscriptionData = $registry->registry(self::REGISTRY_KEY_CURRENT_SUBSCRIPTION); - // Don't allow the merchant to delete subscriptions that were generated by config file. - if ($this->_isCreatedByConfig()) { - $this->_removeButton('delete'); - $this->_removeButton('reset'); - $this->_removeButton('save'); - } - } - - /** - * Gets header text - * - * @return string - */ - public function getHeaderText() - { - if ($this->_isExistingSubscription()) { - return __('Edit Subscription'); - } else { - return __('Add Subscription'); - } - } - - /** - * Returns true is subscription exists - * - * @return bool - */ - protected function _isExistingSubscription() - { - return $this->_subscriptionData - && isset($this->_subscriptionData[self::DATA_SUBSCRIPTION_ID]) - && $this->_subscriptionData[self::DATA_SUBSCRIPTION_ID]; - } - - /** - * Check whether subscription was generated from configuration. - * - * Return false if subscription created within UI. - * - * @return bool - */ - protected function _isCreatedByConfig() - { - return $this->_subscriptionData && isset($this->_subscriptionData['alias']); - } -} diff --git a/app/code/Magento/Webhook/Block/Adminhtml/Subscription/Edit/Form.php b/app/code/Magento/Webhook/Block/Adminhtml/Subscription/Edit/Form.php deleted file mode 100644 index 53585d4d4bd82..0000000000000 --- a/app/code/Magento/Webhook/Block/Adminhtml/Subscription/Edit/Form.php +++ /dev/null @@ -1,164 +0,0 @@ -_formFactory = $formFactory; - $this->_registry = $registry; - $this->_format = $format; - $this->_authentication = $authentication; - $this->_hook = $hook; - } - - /** - * Prepares subscription editor form - * - * @return \Magento\Backend\Block\Widget\Form - */ - protected function _prepareForm() - { - $subscriptionData = $this->_registry->registry(self::REGISTRY_KEY_CURRENT_SUBSCRIPTION); - - $subscriptionId = isset($subscriptionData[self::DATA_SUBSCRIPTION_ID]) - ? $subscriptionData[self::DATA_SUBSCRIPTION_ID] - : 0; - $form = $this->_formFactory->create(array( - 'attributes' => array( - 'id' => 'edit_form', - 'action' => $this->getUrl('adminhtml/*/save', array('id' => $subscriptionId)), - 'method' => 'post', - )) - ); - - // We don't want to allow subscriptions defined in config to be edited by the user. - $disabled = isset($subscriptionData[self::DATA_ALIAS]) && !empty($subscriptionData[self::DATA_ALIAS]); - - $fieldset = $form->addFieldset('subscription_fieldset', array('legend' => __('Subscription'))); - - $fieldset->addField( - 'name', 'text', - array( - 'label' => __('Name'), - 'class' => 'required-entry', - 'required' => true, - 'name' => 'name', - 'disabled' => $disabled, - ) - ); - - $fieldset->addField( - 'endpoint_url', 'text', - array( - 'label' => __('Endpoint URL'), - 'class' => 'required-entry', - 'required' => true, - 'name' => 'endpoint_url', - 'disabled' => $disabled, - ) - ); - - $fieldset->addField( - 'format', 'select', - array( - 'name' => 'format', - 'label' => __('Format'), - 'title' => __('Format'), - 'values' => $this->_format->getFormatsForForm(), - 'disabled' => $disabled, - ) - ); - - $fieldset->addField( - 'authentication_type', 'select', - array( - 'name' => 'authentication_type', - 'label' => __('Authentication Types'), - 'title' => __('Authentication Types'), - 'values' => $this->_authentication->getAuthenticationsForForm(), - 'disabled' => $disabled, - ) - ); - - $fieldset->addField( - 'topics', 'multiselect', - array( - 'name' => 'topics[]', - 'label' => __('Topics'), - 'title' => __('Topics'), - 'required' => true, - 'values' => $this->_hook->getTopicsForForm(), - 'disabled' => $disabled, - ) - ); - - $form->setUseContainer(true); - $form->setValues($subscriptionData); - $this->setForm($form); - return parent::_prepareForm(); - } -} diff --git a/app/code/Magento/Webhook/Block/Adminhtml/Subscription/Grid/Renderer/Action.php b/app/code/Magento/Webhook/Block/Adminhtml/Subscription/Grid/Renderer/Action.php deleted file mode 100644 index b7e0b767db937..0000000000000 --- a/app/code/Magento/Webhook/Block/Adminhtml/Subscription/Grid/Renderer/Action.php +++ /dev/null @@ -1,62 +0,0 @@ -getStatus()) { - case \Magento\Webhook\Model\Subscription::STATUS_ACTIVE : - return '' . __('Revoke') . ''; - case \Magento\Webhook\Model\Subscription::STATUS_REVOKED : - return '' . __('Activate') . ''; - case \Magento\Webhook\Model\Subscription::STATUS_INACTIVE : - $url = $this->getUrl('adminhtml/webhook_registration/activate', array('id' => $row->getId())); - return '' - . __('Activate') . ''; - default : - return ''; - } - } -} diff --git a/app/code/Magento/Webhook/Controller/Adminhtml/Webhook/Registration.php b/app/code/Magento/Webhook/Controller/Adminhtml/Webhook/Registration.php deleted file mode 100644 index 436a8cddb5891..0000000000000 --- a/app/code/Magento/Webhook/Controller/Adminhtml/Webhook/Registration.php +++ /dev/null @@ -1,239 +0,0 @@ -_userFactory = $userFactory; - $this->_subscriptionService = $subscriptionService; - $this->_registry = $registry; - } - - /** - * Activate subscription - * Step 1 - display subscription required resources - */ - public function activateAction() - { - try { - $this->_initSubscription(); - $this->_view->loadLayout(); - $this->_view->renderLayout(); - } catch (\Magento\Core\Exception $e) { - $this->_redirectFailed($e->getMessage()); - } - } - - /** - * Agree to provide required subscription resources - * Step 2 - redirect to specified auth action - */ - public function acceptAction() - { - try { - $subscriptionData = $this->_initSubscription(); - - $route = '*/webhook_registration/user'; - $this->_redirect( - $route, - array(self::PARAM_SUBSCRIPTION_ID => $subscriptionData[self::DATA_SUBSCRIPTION_ID]) - ); - } catch (\Magento\Core\Exception $e) { - $this->_redirectFailed($e->getMessage()); - } - } - - /** - * Displays form for gathering api user data - */ - public function userAction() - { - try { - $this->_initSubscription(); - $this->_view->loadLayout(); - $this->_view->renderLayout(); - } catch (\Magento\Core\Exception $e) { - $this->_redirectFailed($e->getMessage()); - } - } - - /** - * Continue createApiUser - */ - public function registerAction() - { - try { - $subscriptionData = $this->_initSubscription(); - /** @var string $key */ - $key = $this->getRequest()->getParam(self::PARAM_APIKEY); - /** @var string $secret */ - $secret = $this->getRequest()->getParam(self::PARAM_APISECRET); - /** @var string $email */ - $email = $this->getRequest()->getParam(self::PARAM_EMAIL); - /** @var string $company */ - $company = $this->getRequest()->getParam(self::PARAM_COMPANY); - - if (empty($key) || empty($secret) || empty($email)) { - throw new \Magento\Webhook\Exception( - __('API Key, API Secret and Contact Email are required fields.') - ); - } - - if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { - $this->_redirectFailed(__('Invalid Email address provided')); - return; - } - - $userContext = array( - 'email' => $email, - 'key' => $key, - 'secret' => $secret, - 'company' => $company, - ); - - /** @var string[] $topics */ - $topics = $subscriptionData[self::DATA_TOPICS]; - $userId = $this->_userFactory->createUser($userContext, $topics); - - $subscriptionData['api_user_id'] = $userId; - $subscriptionData['status'] = \Magento\Webhook\Model\Subscription::STATUS_ACTIVE; - $subscriptionData = $this->_subscriptionService->update($subscriptionData); - - $this->_redirectSucceeded($subscriptionData); - - } catch (\Magento\Core\Exception $e) { - $this->_redirectFailed($e->getMessage()); - } - } - - /** - * Redirect to this page when the authentication process is completed successfully - */ - public function succeededAction() - { - try { - $this->_view->loadLayout(); - $this->_view->renderLayout(); - $subscriptionData = $this->_initSubscription(); - - $this->_getSession()->addSuccess( - __('The subscription \'%1\' has been activated.', - $subscriptionData[self::DATA_NAME]) - ); - } catch (\Magento\Core\Exception $e) { - $this->_getSession()->addError($e->getMessage()); - } - } - - /** - * Redirect to this action when the authentication process fails for any reason. - */ - public function failedAction() - { - $this->_view->loadLayout(); - $this->_view->renderLayout(); - } - - /** - * Initialize general settings for subscription - * - * @throws \Exception|\Magento\Core\Exception if subscription can't be found - * @return array - */ - protected function _initSubscription() - { - $subscriptionId = (int) $this->getRequest()->getParam(self::PARAM_SUBSCRIPTION_ID); - $subscriptionData = $this->_subscriptionService->get($subscriptionId); - - $this->_registry->register(self::REGISTRY_KEY_CURRENT_SUBSCRIPTION, $subscriptionData); - return $subscriptionData; - } - - /** - * Log successful subscription and redirect to success page - * - * @param array $subscriptionData - */ - protected function _redirectSucceeded(array $subscriptionData) - { - $this->_getSession()->addSuccess( - __('The subscription \'%1\' has been activated.', $subscriptionData[self::DATA_NAME]) - ); - $this->_redirect('adminhtml/webhook_registration/succeeded', - array(self::PARAM_SUBSCRIPTION_ID => $subscriptionData[self::DATA_SUBSCRIPTION_ID])); - } - - /** - * Add error and redirect to failure page - * - * @param string $errorMessage - */ - protected function _redirectFailed($errorMessage) - { - $this->_getSession()->addError($errorMessage); - $this->_redirect('adminhtml/webhook_registration/failed'); - } -} diff --git a/app/code/Magento/Webhook/Controller/Adminhtml/Webhook/Subscription.php b/app/code/Magento/Webhook/Controller/Adminhtml/Webhook/Subscription.php deleted file mode 100644 index e3afc24564330..0000000000000 --- a/app/code/Magento/Webhook/Controller/Adminhtml/Webhook/Subscription.php +++ /dev/null @@ -1,295 +0,0 @@ -_registry = $registry; - $this->_subscriptionService = $subscriptionService; - } - - /** - * Loads and renders subscription controller layout - */ - public function indexAction() - { - $this->_view->loadLayout(); - $this->_setActiveMenu('Magento_Webhook::system_api_webapi_webhook'); - $this->_title->add(__('System')); - $this->_title->add(__('Web Services')); - $this->_title->add(__('WebHook Subscriptions')); - - $this->_view->renderLayout(); - } - - /** - * Register new action and throw control to 'edit' action - */ - public function newAction() - { - $this->_forward('edit'); - } - - /** - * Initialize subscription and render action layout - */ - public function editAction() - { - try { - $subscriptionData = $this->_initSubscriptionData(); - - if ($this->_registry->registry(self::REGISTRY_KEY_WEBHOOK_ACTION) !== self::ACTION_NEW) { - $data = $this->_session->getFormData(true); - if (!empty($data)) { - $subscriptionData = $this->_updateSubscriptionData($subscriptionData, $data); - } - $this->_registry->unregister(self::REGISTRY_KEY_CURRENT_SUBSCRIPTION); - $this->_registry->register(self::REGISTRY_KEY_CURRENT_SUBSCRIPTION, $subscriptionData); - } - - $this->_view->loadLayout(); - $this->_setActiveMenu('Magento_Webapi::system_webapi'); - $this->_title->add(__('System')); - $this->_title->add(__('Web Services')); - $this->_title->add(__('WebHook Subscriptions')); - if ($this->_registry->registry(self::REGISTRY_KEY_WEBHOOK_ACTION) === self::ACTION_NEW) { - $this->_title->add(__('Add Subscription')); - } else { - $this->_title->add(__('Edit Subscription')); - } - - $this->_view->renderLayout(); - } catch (\Magento\Core\Exception $e) { - $this->_getSession()->addError($e->getMessage()); - $this->_redirect('adminhtml/*/'); - } - } - - /** - * Save subscription action - */ - public function saveAction() - { - try { - /** @var array $data */ - $data = $this->getRequest()->getPost(); - $subscriptionData = $this->_initSubscriptionData(); - if ($data) { - $subscriptionData = $this->_updateSubscriptionData($subscriptionData, $data); - if ($this->_registry->registry(self::REGISTRY_KEY_WEBHOOK_ACTION) === self::ACTION_NEW) { - $this->_subscriptionService->create($subscriptionData); - } else if ( - isset($subscriptionData[self::DATA_SUBSCRIPTION_ID]) - && $subscriptionData[self::DATA_SUBSCRIPTION_ID] - ) { - $this->_subscriptionService->update($subscriptionData); - } else { - $this->_subscriptionService->create($subscriptionData); - } - $this->_getSession()->addSuccess( - __('The subscription \'%1\' has been saved.', - $subscriptionData[self::DATA_NAME]) - ); - $this->_redirect('adminhtml/*/'); - } else { - $this->_getSession()->addError( - __('The subscription \'%1\' has not been saved, as no data was provided.', - $subscriptionData[self::DATA_NAME]) - ); - $this->_redirect( - '*/*/edit', - array(self::PARAM_SUBSCRIPTION_ID => $this->getRequest()->getParam(self::PARAM_SUBSCRIPTION_ID)) - ); - } - } catch (\Magento\Core\Exception $e) { - $this->_getSession()->addError($e->getMessage()); - $this->_redirect('adminhtml/*/'); - } - } - - /** - * Delete subscription action - */ - public function deleteAction() - { - try { - $subscriptionData = $this->_initSubscriptionData(); - if ($this->_isCreatedByUser($subscriptionData)) { - try { - $subscriptionId = isset($subscriptionData[self::DATA_SUBSCRIPTION_ID]) - ? $subscriptionData[self::DATA_SUBSCRIPTION_ID] - : null; - $this->_subscriptionService->delete($subscriptionId); - $this->_getSession()->addSuccess( - __('The subscription \'%1\' has been removed.', - $subscriptionData[self::DATA_NAME]) - ); - } - catch (\Magento\Core\Exception $e) { - $this->_getSession()->addError($e->getMessage()); - } - } else { - $this->_getSession()->addError( - __('The subscription \'%1\' can not be removed.', - $subscriptionData[self::DATA_NAME]) - ); - } - } catch (\Magento\Core\Exception $e) { - $this->_getSession()->addError($e->getMessage()); - } - $this->_redirect('adminhtml/*/'); - } - - /** - * Revoke subscription - */ - public function revokeAction() - { - try { - $subscriptionId = $this->getRequest()->getParam(self::PARAM_SUBSCRIPTION_ID); - if ($subscriptionId) { - $subscriptionData = $this->_subscriptionService->revoke($subscriptionId); - $this->_getSession()->addSuccess( - __('The subscription \'%1\' has been revoked.', - $subscriptionData[self::DATA_NAME]) - ); - } else { - $this->_getSession()->addError(__('No Subscription ID was provided with the request.')); - } - } catch (\Magento\Core\Exception $e) { - $this->_getSession()->addError($e->getMessage()); - } - - $this->_redirect('adminhtml/webhook_subscription/index'); - } - - /** - * Activate subscription. Step 1 - display subscription required resources - */ - public function activateAction() - { - try { - $subscriptionId = $this->getRequest()->getParam(self::PARAM_SUBSCRIPTION_ID); - if ($subscriptionId) { - $subscriptionData = $this->_subscriptionService->activate($subscriptionId); - $this->_getSession()->addSuccess( - __('The subscription \'%1\' has been activated.', - $subscriptionData[self::DATA_NAME]) - ); - } else { - $this->_getSession()->addError(__('No Subscription ID was provided with the request.')); - } - } catch (\Magento\Core\Exception $e) { - $this->_getSession()->addError($e->getMessage()); - } - - $this->_redirect('adminhtml/webhook_subscription/index'); - } - - /** - * Initialize general settings for subscription - * - * @return array - * @throws \Magento\Webhook\Exception - */ - protected function _initSubscriptionData() - { - $subscriptionId = (int) $this->getRequest()->getParam(self::PARAM_SUBSCRIPTION_ID); - if ($subscriptionId) { - $subscriptionData = $this->_subscriptionService->get($subscriptionId); - } else { - $subscriptionData = array(); - $this->_registry->register(self::REGISTRY_KEY_WEBHOOK_ACTION, self::ACTION_NEW); - } - - $this->_registry->register(self::REGISTRY_KEY_CURRENT_SUBSCRIPTION, $subscriptionData); - return $subscriptionData; - } - - /** - * Helper function that returns updated subscription data with data gathered from a Form post. - * - * We need to make sure that only authorized data is being updated. For example we disable the 'Version' field - * in the UI for subscriptions generated by config, we don't want a user to be able to bypass this by performing - * a manual POST. - * - * @param array $subscriptionData - * @param array $data - * @return array - */ - protected function _updateSubscriptionData($subscriptionData, $data) - { - return array_merge($subscriptionData, $data); - } - - /** - * Determine if a subscription was created by a user or not, by looking at the data. - * - * @param array $subscriptionData - * @return bool true if the subscription was created by a user - */ - protected function _isCreatedByUser($subscriptionData) - { - return !isset($subscriptionData[self::DATA_ALIAS]); - } -} diff --git a/app/code/Magento/Webhook/Helper/Data.php b/app/code/Magento/Webhook/Helper/Data.php deleted file mode 100644 index 7e4241d29cdf4..0000000000000 --- a/app/code/Magento/Webhook/Helper/Data.php +++ /dev/null @@ -1,34 +0,0 @@ -_userFactory = $userFactory; - $this->_dateTime = $dateTime; - } - - /** - * Initialize model - */ - public function _construct() - { - parent::_construct(); - $this->_init('Magento\Webhook\Model\Resource\Endpoint'); - } - - /** - * Return subscription endpoint url for compatibility with interface - * - * @return string - */ - public function getEndpointUrl() - { - return $this->getData('endpoint_url'); - } - - /** - * Return subscription timeout in secs for compatibility with interface - * - * @return string - */ - public function getTimeoutInSecs() - { - return $this->getData('timeout_in_secs'); - } - - /** - * Prepare data to be saved to database - * - * @return \Magento\Core\Model\AbstractModel - * @throws \Magento\Webhook\Exception - */ - protected function _beforeSave() - { - parent::_beforeSave(); - - if (!$this->hasAuthenticationType()) { - $this->setAuthenticationType(\Magento\Outbound\EndpointInterface::AUTH_TYPE_NONE); - } - - if ($this->hasDataChanges()) { - $this->setUpdatedAt($this->_dateTime->formatDate(time())); - } - - return $this; - } - - /** - * Returns the format this message should be sent in (JSON, XML, etc.) - * - * @return string - */ - public function getFormat() - { - return $this->getData('format'); - } - - /** - * Returns the user abstraction associated with this subscription or null if no user has been associated yet. - * - * @return \Magento\Outbound\UserInterface|null - */ - public function getUser() - { - if ($this->getApiUserId() === null) { - return null; - } - return $this->_userFactory->create($this->getApiUserId()); - } - - /** - * Returns the type of authentication to use when attaching authentication to a message - * - * @return string - */ - public function getAuthenticationType() - { - return $this->getData('authentication_type'); - } -} diff --git a/app/code/Magento/Webhook/Model/Event.php b/app/code/Magento/Webhook/Model/Event.php deleted file mode 100644 index 1d3f9ef91578b..0000000000000 --- a/app/code/Magento/Webhook/Model/Event.php +++ /dev/null @@ -1,192 +0,0 @@ -_dateTime = $dateTime; - parent::__construct($context, $registry, $resource, $resourceCollection, $data); - } - - /** - * Initialize Model - */ - public function _construct() - { - parent::_construct(); - $this->_init('Magento\Webhook\Model\Resource\Event'); - $this->setStatus(\Magento\PubSub\EventInterface::STATUS_READY_TO_SEND); - } - - /** - * Prepare data to be saved to database - * - * @return \Magento\Webhook\Model\Event - */ - protected function _beforeSave() - { - parent::_beforeSave(); - if ($this->isObjectNew()) { - $this->setCreatedAt($this->_dateTime->formatDate(true)); - } elseif ($this->getId() && !$this->hasData('updated_at')) { - $this->setUpdatedAt($this->_dateTime->formatDate(true)); - } - return $this; - } - - /** - * Prepare data before set - * - * @param array $data - * @return \Magento\Webhook\Model\Event - */ - public function setBodyData(array $data) - { - return $this->setData('body_data', serialize($data)); - } - - /** - * Prepare data before return - * - * @return array - */ - public function getBodyData() - { - $data = $this->getData('body_data'); - if (!is_null($data)) { - return unserialize($data); - } - return array(); - } - - /** - * Prepare headers before set - * - * @param array $headers - * @return \Magento\Webhook\Model\Event - */ - public function setHeaders(array $headers) - { - return $this->setData('headers', serialize($headers)); - } - - /** - * Prepare headers before return - * - * @return array - */ - public function getHeaders() - { - $headers = $this->getData('headers'); - if (!is_null($headers)) { - return unserialize($headers); - } - return array(); - } - - /** - * Prepare options before set - * - * @param array $options - * @return \Magento\Webhook\Model\Event - */ - public function setOptions(array $options) - { - return $this->setData('options', serialize($options)); - } - - /** - * Return status. Enable compatibility with interface - * - * @return null|int - */ - public function getStatus() - { - return $this->getData('status'); - } - - /** - * Return topic and enable compatibility with interface - * - * @return null|string - */ - public function getTopic() - { - return $this->getData('topic'); - } - - /** - * Mark event as processed - * - * @return \Magento\Webhook\Model\Event - */ - public function complete() - { - $this->setData('status', \Magento\PubSub\EventInterface::STATUS_PROCESSED) - ->save(); - return $this; - } - - /** - * Mark event as processed - * - * @return \Magento\Webhook\Model\Event - */ - public function markAsInProgress() - { - $this->setData('status', \Magento\PubSub\EventInterface::STATUS_IN_PROGRESS); - return $this; - } -} diff --git a/app/code/Magento/Webhook/Model/Event/Factory.php b/app/code/Magento/Webhook/Model/Event/Factory.php deleted file mode 100644 index 38cacbbe5b3bb..0000000000000 --- a/app/code/Magento/Webhook/Model/Event/Factory.php +++ /dev/null @@ -1,80 +0,0 @@ -_objectManager = $objectManager; - $this->_arrayConverter = $arrayConverter; - } - - /** - * Create event - * - * @param string $topic Topic on which to publish data - * @param array $data Data to be published. Should only contain primitives - * @return \Magento\Webhook\Model\Event - */ - public function create($topic, $data) - { - return $this->_objectManager->create('Magento\Webhook\Model\Event', array( - 'data' => array( - 'topic' => $topic, - 'body_data' => serialize($this->_arrayConverter->convertDataToArray($data)) - ) - ))->setDataChanges(true); - } - - /** - * Return the empty instance of Event - * - * @return \Magento\Webhook\Model\Event - */ - public function createEmpty() - { - return $this->_objectManager->create('Magento\Webhook\Model\Event'); - } -} diff --git a/app/code/Magento/Webhook/Model/Event/QueueReader.php b/app/code/Magento/Webhook/Model/Event/QueueReader.php deleted file mode 100644 index 8d8c488506102..0000000000000 --- a/app/code/Magento/Webhook/Model/Event/QueueReader.php +++ /dev/null @@ -1,61 +0,0 @@ -_iterator = $collection->getIterator(); - } - - /** - * Get the top event from the queue. - * - * @return \Magento\PubSub\EventInterface|null - */ - public function poll() - { - if ($this->_iterator->valid()) { - /** @var \Magento\Webhook\Model\Event $event */ - $event = $this->_iterator->current(); - $this->_iterator->next(); - return $event; - } - return null; - } -} diff --git a/app/code/Magento/Webhook/Model/Event/QueueWriter.php b/app/code/Magento/Webhook/Model/Event/QueueWriter.php deleted file mode 100644 index 8f119a246c9e3..0000000000000 --- a/app/code/Magento/Webhook/Model/Event/QueueWriter.php +++ /dev/null @@ -1,59 +0,0 @@ -_eventFactory = $eventFactory; - } - - /** - * Adds event to the queue. - * - * @param \Magento\PubSub\EventInterface $event - * @return null - */ - public function offer(\Magento\PubSub\EventInterface $event) - { - if ($event instanceof \Magento\Webhook\Model\Event) { - $event->save(); - } else { - $magentoEvent = $this->_eventFactory->create($event->getTopic(), $event->getBodyData()); - $magentoEvent->save(); - } - } -} diff --git a/app/code/Magento/Webhook/Model/Job.php b/app/code/Magento/Webhook/Model/Job.php deleted file mode 100644 index aa31958ff8e25..0000000000000 --- a/app/code/Magento/Webhook/Model/Job.php +++ /dev/null @@ -1,225 +0,0 @@ - 1, - 2 => 2, - 3 => 4, - 4 => 10, - 5 => 30, - 6 => 60, - 7 => 120, - 8 => 240, - ); - - /** - * @param \Magento\Core\Model\Context $context - * @param \Magento\Core\Model\Registry $registry - * @param \Magento\Webhook\Model\Event\Factory $eventFactory - * @param \Magento\Webhook\Model\Subscription\Factory $subscriptionFactory - * @param \Magento\Stdlib\DateTime $dateTime - * @param \Magento\Core\Model\Resource\AbstractResource $resource - * @param \Magento\Data\Collection\Db $resourceCollection - * @param array $data - */ - public function __construct( - \Magento\Core\Model\Context $context, - \Magento\Core\Model\Registry $registry, - \Magento\Webhook\Model\Event\Factory $eventFactory, - \Magento\Webhook\Model\Subscription\Factory $subscriptionFactory, - \Magento\Stdlib\DateTime $dateTime, - \Magento\Core\Model\Resource\AbstractResource $resource = null, - \Magento\Data\Collection\Db $resourceCollection = null, - array $data = array() - ) { - $this->_eventFactory = $eventFactory; - $this->_subscriptionFactory = $subscriptionFactory; - $this->_dateTime = $dateTime; - parent::__construct($context, $registry, $resource, $resourceCollection, $data); - } - - /** - * Initialize model - */ - public function _construct() - { - parent::_construct(); - $this->_init('Magento\Webhook\Model\Resource\Job'); - - if ($this->hasEvent()) { - $this->setEventId($this->getEvent()->getId()); - } - - if ($this->hasSubscription()) { - $this->setSubscriptionId($this->getSubscription()->getId()); - } - $this->setStatus(\Magento\PubSub\JobInterface::STATUS_READY_TO_SEND); - } - - /** - * Prepare data to be saved to database - * - * @return \Magento\Webhook\Model\Job - */ - protected function _beforeSave() - { - parent::_beforeSave(); - if ($this->isObjectNew()) { - $this->setCreatedAt($this->_dateTime->formatDate(true)); - } elseif ($this->getId() && !$this->hasData('updated_at')) { - $this->setUpdatedAt($this->_dateTime->formatDate(true)); - } - return $this; - } - - /** - * Get event - * - * @return \Magento\PubSub\EventInterface|\Magento\Webhook\Model\Event|null - */ - public function getEvent() - { - if ($this->hasData('event')) { - return $this->getData('event'); - } - - if ($this->hasData('event_id')) { - $event = $this->_eventFactory->createEmpty() - ->load($this->getEventId()); - $this->setData('event', $event); - return $event; - } - - return null; - } - - /** - * Get subscription - * - * @return \Magento\Webhook\Model\Subscription|null - */ - public function getSubscription() - { - if ($this->hasData('subscription')) { - return $this->getData('subscription'); - } - - if ($this->hasData('subscription_id')) { - $subscription = $this->_subscriptionFactory->create() - ->load($this->getSubscriptionId()); - - $this->setData('subscription', $subscription); - return $subscription; - } - - return null; - } - - /** - * Update the Job status to indicate it has completed successfully - * - * @return \Magento\Webhook\Model\Job - */ - public function complete() - { - $this->setStatus(\Magento\PubSub\JobInterface::STATUS_SUCCEEDED) - ->save(); - return $this; - } - - /** - * Handles failed HTTP response - * - * @return \Magento\Webhook\Model\Job - */ - public function handleFailure() - { - $retryCount = $this->getRetryCount(); - if ($retryCount < count($this->_retryTimeToAdd)) { - $addedTimeInMinutes = $this->_retryTimeToAdd[$retryCount + 1] * 60 + time(); - $this->setRetryCount($retryCount + 1); - $this->setRetryAt($this->_dateTime->formatDate($addedTimeInMinutes)); - $this->setUpdatedAt($this->_dateTime->formatDate(time(), true)); - $this->setStatus(\Magento\PubSub\JobInterface::STATUS_RETRY); - } else { - $this->setStatus(\Magento\PubSub\JobInterface::STATUS_FAILED); - } - return $this; - } - - /** - * Retrieve the status of the Job - * - * @return int - */ - public function getStatus() - { - return $this->getData('status'); - } - - /** - * Set the status of the Job - * - * @param int $status - * @return \Magento\Webhook\Model\Job - */ - public function setStatus($status) - { - $this->setData('status', $status); - return $this; - } -} diff --git a/app/code/Magento/Webhook/Model/Job/Factory.php b/app/code/Magento/Webhook/Model/Job/Factory.php deleted file mode 100644 index e7fe8728cb45e..0000000000000 --- a/app/code/Magento/Webhook/Model/Job/Factory.php +++ /dev/null @@ -1,63 +0,0 @@ -_objectManager = $objectManager; - } - - /** - * Create Job - * - * @param \Magento\PubSub\SubscriptionInterface $subscription - * @param \Magento\PubSub\EventInterface $event - * @return \Magento\PubSub\JobInterface - */ - public function create(\Magento\PubSub\SubscriptionInterface $subscription, \Magento\PubSub\EventInterface $event) - { - return $this->_objectManager->create('Magento\Webhook\Model\Job', array( - 'data' => array( - 'event' => $event, - 'subscription' => $subscription - ) - )); - } -} diff --git a/app/code/Magento/Webhook/Model/Job/QueueReader.php b/app/code/Magento/Webhook/Model/Job/QueueReader.php deleted file mode 100644 index 7890ba840dc80..0000000000000 --- a/app/code/Magento/Webhook/Model/Job/QueueReader.php +++ /dev/null @@ -1,64 +0,0 @@ -_collection = $collection; - $this->_iterator = $this->_collection->getIterator(); - } - - /** - * Return the top job from the queue. - * - * @return \Magento\PubSub\JobInterface|null - */ - public function poll() - { - if ($this->_iterator->valid()) { - /** @var $job \Magento\PubSub\JobInterface */ - $job = $this->_iterator->current(); - $this->_iterator->next(); - return $job; - } - return null; - } -} diff --git a/app/code/Magento/Webhook/Model/Job/QueueWriter.php b/app/code/Magento/Webhook/Model/Job/QueueWriter.php deleted file mode 100644 index 82a37ba37a8ec..0000000000000 --- a/app/code/Magento/Webhook/Model/Job/QueueWriter.php +++ /dev/null @@ -1,61 +0,0 @@ -_jobFactory = $jobFactory; - } - - /** - * Adds the job to the queue. - * - * @param \Magento\PubSub\JobInterface $job - * @return null - */ - public function offer(\Magento\PubSub\JobInterface $job) - { - if ($job instanceof \Magento\Webhook\Model\Job) { - $job->save(); - } else { - /** @var \Magento\Webhook\Model\Job $magentoJob */ - $magentoJob = $this->_jobFactory->create($job->getSubscription(), $job->getEvent()); - $magentoJob->save(); - } - } -} diff --git a/app/code/Magento/Webhook/Model/Observer.php b/app/code/Magento/Webhook/Model/Observer.php deleted file mode 100644 index c36abfac7b5f4..0000000000000 --- a/app/code/Magento/Webhook/Model/Observer.php +++ /dev/null @@ -1,105 +0,0 @@ -_webapiEventHandler = $webapiEventHandler; - $this->_subscriptionSet = $subscriptionSet; - $this->_logger = $logger; - } - - /** - * Triggered after webapi user deleted. It updates status of the activated subscriptions - * associated with this webapi user to inactive - */ - public function afterWebapiUserDelete() - { - try { - $subscriptions = $this->_subscriptionSet->getActivatedSubscriptionsWithoutApiUser(); - /** @var \Magento\Webhook\Model\Subscription $subscription */ - foreach ($subscriptions as $subscription) { - $subscription->setStatus(\Magento\Webhook\Model\Subscription::STATUS_INACTIVE) - ->save(); - } - } catch (\Exception $exception) { - $this->_logger->logException($exception); - } - } - - /** - * Triggered after webapi user change - * - * @param \Magento\Event\Observer $observer - */ - public function afterWebapiUserChange(\Magento\Event\Observer $observer) - { - try { - $model = $observer->getEvent()->getObject(); - - $this->_webapiEventHandler->userChanged($model); - } catch (\Exception $exception) { - $this->_logger->logException($exception); - } - } - - /** - * Triggered after webapi role change - * - * @param \Magento\Event\Observer $observer - */ - public function afterWebapiRoleChange(\Magento\Event\Observer $observer) - { - try { - $model = $observer->getEvent()->getObject(); - - $this->_webapiEventHandler->roleChanged($model); - } catch (\Exception $exception) { - $this->_logger->logException($exception); - } - } -} diff --git a/app/code/Magento/Webhook/Model/Resource/Endpoint.php b/app/code/Magento/Webhook/Model/Resource/Endpoint.php deleted file mode 100644 index 093d7c5426f26..0000000000000 --- a/app/code/Magento/Webhook/Model/Resource/Endpoint.php +++ /dev/null @@ -1,68 +0,0 @@ -_init('outbound_endpoint', 'endpoint_id'); - } - - /** - * Get endpoints associated with a given api user id. - * - * @param int|int[] $apiUserIds - * @return array - */ - public function getApiUserEndpoints($apiUserIds) - { - $adapter = $this->_getReadAdapter(); - $select = $adapter->select() - ->from($this->getMainTable(), array('endpoint_id')) - ->where('api_user_id IN (?)', $apiUserIds); - return $adapter->fetchCol($select); - } - - /** - * Get endpoints that do not have an associated api user - * - * @return array - */ - public function getEndpointsWithoutApiUser() - { - $adapter = $this->_getReadAdapter(); - $select = $adapter->select() - ->from($this->getMainTable(), array('endpoint_id')) - ->where('api_user_id IS NULL'); - return $adapter->fetchCol($select); - } -} diff --git a/app/code/Magento/Webhook/Model/Resource/Event.php b/app/code/Magento/Webhook/Model/Resource/Event.php deleted file mode 100644 index d43694e2d797a..0000000000000 --- a/app/code/Magento/Webhook/Model/Resource/Event.php +++ /dev/null @@ -1,39 +0,0 @@ -_init('webhook_event', 'event_id'); - } -} diff --git a/app/code/Magento/Webhook/Model/Resource/Event/Collection.php b/app/code/Magento/Webhook/Model/Resource/Event/Collection.php deleted file mode 100644 index 1acca1484ad2c..0000000000000 --- a/app/code/Magento/Webhook/Model/Resource/Event/Collection.php +++ /dev/null @@ -1,181 +0,0 @@ -_dateTime = $dateTime; - parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource); - $this->_timeoutIdling = is_null($timeoutIdling) ? - self::DEFAULT_TIMEOUT_IDLING_EVENTS : $timeoutIdling; - } - - public function _construct() - { - parent::_construct(); - $this->_init('Magento\Webhook\Model\Event', 'Magento\Webhook\Model\Resource\Event'); - } - - /** - * Adds FOR UPDATE lock on retrieved rows and filter status - * - * @return \Magento\Webhook\Model\Resource\Event\Collection - */ - protected function _initSelect() - { - parent::_initSelect(); - $this->getSelect()->forUpdate(true); - $this->addFieldToFilter('status', \Magento\PubSub\EventInterface::STATUS_READY_TO_SEND) - ->setOrder('created_at', \Magento\Data\Collection::SORT_ORDER_ASC) - ->setPageSize(self::PAGE_SIZE); - return $this; - } - - /** - * Start transaction before executing the query in order to update the status atomically - * - * @return \Magento\Webhook\Model\Resource\Event\Collection - */ - protected function _beforeLoad() - { - parent::_beforeLoad(); - $this->getConnection()->beginTransaction(); - return $this; - } - - /** - * Update the status and commit transaction in case of success - * - * @return \Magento\Webhook\Model\Resource\Event\Collection - * @throws \Exception - */ - protected function _afterLoad() - { - parent::_afterLoad(); - try { - $loadedIds = $this->_getLoadedIds(); - if (!empty($loadedIds)) { - $this->getConnection()->update($this->getMainTable(), - array('status' => \Magento\PubSub\EventInterface::STATUS_IN_PROGRESS), - array('event_id IN (?)' => $loadedIds)); - } - $this->getConnection()->commit(); - } catch (\Exception $e) { - $this->getConnection()->rollBack(); - $this->clear(); - throw $e; - } - - return $this; - } - - /** - * Retrieve ids of all loaded records - * - * @return array - */ - protected function _getLoadedIds() - { - $result = array(); - foreach ($this->getItems() as $item) { - $result[] = $item->getId(); - } - return $result; - } - - /** - * Change event status back to STATUS_READY_TO_SEND if stays in STATUS_IN_PROGRESS longer than defined delay - * - * Regularly run by scheduling mechanism - * - * @throws \Exception - * @return null - */ - public function revokeIdlingInProgress() - { - $this->getConnection()->beginTransaction(); - try { - /* if event is in progress state for less than hour we do nothing with it*/ - $okUpdatedTime = time() - $this->_timeoutIdling; - $this->addFieldToFilter('status', \Magento\PubSub\EventInterface::STATUS_IN_PROGRESS) - ->addFieldToFilter('updated_at', array('to' => $this->_dateTime->formatDate($okUpdatedTime), - 'datetime' => true)); - $idsToRevoke = $this->_getLoadedIds(); - if (count($idsToRevoke)) { - $this->getConnection()->update($this->getMainTable(), - array('status' => \Magento\PubSub\EventInterface::STATUS_READY_TO_SEND), - array('event_id IN (?)' => $idsToRevoke)); - } - } catch (\Exception $e) { - $this->getConnection()->rollBack(); - $this->clear(); - throw $e; - } - $this->getConnection()->commit(); - } -} diff --git a/app/code/Magento/Webhook/Model/Resource/Job.php b/app/code/Magento/Webhook/Model/Resource/Job.php deleted file mode 100644 index 45b7bcb165236..0000000000000 --- a/app/code/Magento/Webhook/Model/Resource/Job.php +++ /dev/null @@ -1,39 +0,0 @@ -_init('webhook_dispatch_job', 'dispatch_job_id'); - } -} diff --git a/app/code/Magento/Webhook/Model/Resource/Job/Collection.php b/app/code/Magento/Webhook/Model/Resource/Job/Collection.php deleted file mode 100644 index 56d6bb022ffc2..0000000000000 --- a/app/code/Magento/Webhook/Model/Resource/Job/Collection.php +++ /dev/null @@ -1,193 +0,0 @@ -dateTime = $dateTime; - parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource); - $this->_timeoutIdling = is_null($timeoutIdling) ? - self::DEFAULT_TIMEOUT_IDLING_JOBS : $timeoutIdling; - } - - /** - * Initialize Collection - */ - public function _construct() - { - parent::_construct(); - $this->_init('Magento\Webhook\Model\Job', 'Magento\Webhook\Model\Resource\Job'); - } - - /** - * Adds FOR UPDATE lock on retrieved rows and filter status - * - * @return \Magento\Webhook\Model\Resource\Job\Collection - */ - protected function _initSelect() - { - parent::_initSelect(); - $this->getSelect()->forUpdate(true); - - $this->addFieldToFilter('status', array( - 'in' => array( - \Magento\PubSub\JobInterface::STATUS_READY_TO_SEND, - \Magento\PubSub\JobInterface::STATUS_RETRY - ))) - ->addFieldToFilter( - 'retry_at', - array('to' => $this->dateTime->formatDate(true), 'datetime' => true) - ) - ->setOrder('updated_at', \Magento\Data\Collection::SORT_ORDER_ASC) - ->setPageSize(self::PAGE_SIZE); - return $this; - } - - /** - * Start transaction before executing the query in order to update the status atomically - * - * @return \Magento\Webhook\Model\Resource\Job\Collection - */ - protected function _beforeLoad() - { - parent::_beforeLoad(); - $this->getConnection()->beginTransaction(); - return $this; - } - - /** - * Update the status and commit transaction in case of success - * - * @return \Magento\Webhook\Model\Resource\Job\Collection - * @throws \Exception - */ - protected function _afterLoad() - { - parent::_afterLoad(); - try { - $loadedIds = $this->_getLoadedIds(); - if (!empty($loadedIds)) { - $this->getConnection()->update($this->getMainTable(), - array('status' => \Magento\PubSub\JobInterface::STATUS_IN_PROGRESS), - array('dispatch_job_id IN (?)' => $loadedIds)); - } - $this->getConnection()->commit(); - } catch (\Exception $e) { - $this->getConnection()->rollBack(); - $this->clear(); - throw $e; - } - - return $this; - } - - - /** - * Retrieve ids of all loaded records - * - * @return array - */ - protected function _getLoadedIds() - { - $result = array(); - foreach ($this->getItems() as $item) { - $result[] = $item->getId(); - } - return $result; - } - - /** - * Change job status back to STATUS_READY_TO_SEND if stays in STATUS_IN_PROGRESS longer than defined delay - * - * Regularly run by scheduling mechanism - * - * @throws \Exception - * @return null - */ - public function revokeIdlingInProgress() - { - $this->getConnection()->beginTransaction(); - try { - /* if event is in progress state for less than defined delay we do nothing with it */ - $okUpdatedTime = time() - $this->_timeoutIdling; - $this->addFieldToFilter('status', \Magento\PubSub\JobInterface::STATUS_IN_PROGRESS) - ->addFieldToFilter('updated_at', array('to' => $this->dateTime->formatDate($okUpdatedTime), - 'datetime' => true)); - - if (!count($this->getItems())) { - $this->getConnection()->commit(); - return; - } - - /** @var \Magento\Webhook\Model\Job $job */ - foreach ($this->getItems() as $job) { - $job->handleFailure() - ->save(); - } - - } catch (\Exception $e) { - $this->getConnection()->rollBack(); - $this->clear(); - throw $e; - } - $this->getConnection()->commit(); - } -} diff --git a/app/code/Magento/Webhook/Model/Resource/Subscription.php b/app/code/Magento/Webhook/Model/Resource/Subscription.php deleted file mode 100644 index f6c7ce8e088da..0000000000000 --- a/app/code/Magento/Webhook/Model/Resource/Subscription.php +++ /dev/null @@ -1,193 +0,0 @@ -_webHookList = $config->getWebhooks(); - parent::__construct($resource); - } - - /** - * Pseudo-constructor for resource model initialization - */ - public function _construct() - { - $this->_init('webhook_subscription', 'subscription_id'); - } - - - /** - * Perform actions after subscription load - * - * @param \Magento\Core\Model\AbstractModel $subscription - * @return \Magento\Core\Model\Resource\Db\AbstractDb - */ - protected function _afterLoad(\Magento\Core\Model\AbstractModel $subscription) - { - $this->loadTopics($subscription); - return parent::_afterLoad($subscription); - } - - /** - * Perform actions after subscription save - * - * @param \Magento\Core\Model\AbstractModel $subscription - * @return \Magento\Core\Model\Resource\Db\AbstractDb - */ - protected function _afterSave(\Magento\Core\Model\AbstractModel $subscription) - { - $oldTopics = $this->_getTopics($subscription->getId()); - $this->_updateTopics($oldTopics, $subscription); - return parent::_afterSave($subscription); - } - - /** - * Gets list of topics for subscription - * - * @param int $subscriptionId - * @return string[] - */ - protected function _getTopics($subscriptionId) - { - $adapter = $this->_getReadAdapter(); - $select = $adapter->select() - ->from($this->getTable('webhook_subscription_hook'), 'topic') - ->where('subscription_id = ?', $subscriptionId); - return $adapter->fetchCol($select); - } - - /** - * Load topics of given subscription - * - * @param \Magento\Core\Model\AbstractModel $subscription - */ - public function loadTopics(\Magento\Core\Model\AbstractModel $subscription) - { - $subscription->setData('topics', $this->_getTopics($subscription->getId())); - } - /** - * Updates list of topics for subscription - * - * @param array $oldTopics - * @param \Magento\Core\Model\AbstractModel $subscription - * @return \Magento\Webhook\Model\Resource\Subscription - */ - protected function _updateTopics($oldTopics, \Magento\Core\Model\AbstractModel $subscription) - { - $newTopics = $subscription->getData('topics'); - $supportedTopics = $this->_getSupportedTopics(); - $subscriptionId = $subscription->getId(); - if (!empty($newTopics) && is_array($newTopics)) { - if (!empty($supportedTopics) && is_array($supportedTopics)) { - $newTopics = array_intersect($newTopics, $supportedTopics); - } - $intersection = array(); - if (!empty($oldTopics) && is_array($oldTopics)) { - $intersection = array_intersect($newTopics, $oldTopics); - $oldTopics = array_diff($oldTopics, $intersection); - } else { - $oldTopics = array(); - } - $newTopics = array_diff($newTopics, $intersection); - - $this->_performTopicUpdates($oldTopics, $newTopics, $subscriptionId); - } - return $this; - } - - /** - * Get list of webhook topics defined in webhook.xml - * - * @return string[] - */ - protected function _getSupportedTopics() - { - $availableHooks = array(); - foreach ($this->_webHookList as $key => $configData) { - foreach ($configData as $name => $hook) { - if (is_array($hook)) { - $availableHooks[] = $key . '/' . $name; - } - } - if (isset($configData['label'])) { - $availableHooks[] = $key; - } - } - return $availableHooks; - } - - /** - * Update topics for a specific subscription - * - * @param array $oldTopics - * @param array $newTopics - * @param string $subscriptionId - */ - protected function _performTopicUpdates($oldTopics, $newTopics, $subscriptionId) - { - $insertData = array(); - - foreach ($newTopics as $topic) { - $insertData[] = array( - 'subscription_id' => $subscriptionId, - 'topic' => $topic - ); - } - - if (count($oldTopics) > 0) { - $this->_getWriteAdapter()->delete( - $this->getTable('webhook_subscription_hook'), - array( - 'subscription_id = ?' => $subscriptionId, - 'topic in (?)' => $oldTopics - ) - ); - } - - if (count($insertData) > 0) { - $this->_getWriteAdapter()->insertMultiple( - $this->getTable('webhook_subscription_hook'), - $insertData - ); - } - } -} diff --git a/app/code/Magento/Webhook/Model/Resource/Subscription/Collection.php b/app/code/Magento/Webhook/Model/Resource/Subscription/Collection.php deleted file mode 100644 index 77165d8b8e6a0..0000000000000 --- a/app/code/Magento/Webhook/Model/Resource/Subscription/Collection.php +++ /dev/null @@ -1,214 +0,0 @@ -_endpointResource = $endpointResource; - } - - /** - * Initialization here - */ - public function _construct() - { - parent::_construct(); - $this->_init('Magento\Webhook\Model\Subscription', 'Magento\Webhook\Model\Resource\Subscription'); - } - - - /** - * Return all subscriptions by topic - * - * @param string $topic - * @return \Magento\PubSub\SubscriptionInterface[] - */ - public function getSubscriptionsByTopic($topic) - { - return $this->clearFilters() - ->addTopicFilter($topic) - ->addIsActiveFilter(true) - ->clear() - ->getItems(); - } - - /** - * Returns all subscriptions that match a given alias - * - * @param string $alias - * @return \Magento\Webhook\Model\Subscription[] - */ - public function getSubscriptionsByAlias($alias) - { - return $this->clearFilters() - ->addAliasFilter($alias) - ->clear() - ->getItems(); - } - - /** - * Get subscriptions whose endpoint has no api user - * - * @return \Magento\Webhook\Model\Subscription[] - */ - public function getActivatedSubscriptionsWithoutApiUser() - { - $endpointIds = $this->_endpointResource->getEndpointsWithoutApiUser(); - - return $this->clearFilters() - ->addEndpointIdsFilter($endpointIds) - ->addNotInactiveFilter() - ->clear() - ->getItems(); - } - - /** - * Get api user subscriptions - * - * @param int|int[] $apiUserIds - * @return \Magento\Webhook\Model\Subscription[] - */ - public function getApiUserSubscriptions($apiUserIds) - { - $endpointIds = $this->_endpointResource->getApiUserEndpoints($apiUserIds); - - return $this->clearFilters() - ->addEndpointIdsFilter($endpointIds) - ->clear() - ->getItems(); - } - - /** - * Clear the select object - * - * @return \Magento\Webhook\Model\Resource\Subscription\Collection - */ - public function clearFilters() - { - $this->_select = $this->_conn->select(); - $this->_initSelect(); - return $this; - } - - /** - * Select subscriptions whose endpoint's id is in given array - * - * @param array $endpointIds - * @return \Magento\Webhook\Model\Resource\Subscription\Collection - */ - public function addEndpointIdsFilter($endpointIds) - { - $this->getSelect()->where('endpoint_id IN (?)', $endpointIds); - - return $this; - } - - /** - * Add filter by topic field to collection - * - * @param string $topic - * @return \Magento\Webhook\Model\Resource\Subscription\Collection - */ - public function addTopicFilter($topic) - { - $this->getSelect() - ->joinInner(array('hooks' => $this->getTable('webhook_subscription_hook')), - $this->getConnection() - ->quoteInto('hooks.subscription_id=main_table.subscription_id AND hooks.topic=?', $topic) - ); - return $this; - } - - /** - * Add filter by alias field to collection - * - * @param string|array $alias - * @return \Magento\Webhook\Model\Resource\Subscription\Collection - */ - public function addAliasFilter($alias) - { - $this->addFieldToFilter('alias', $alias); - return $this; - } - - /** - * Adds filter by status field to collection based on parameter - * - * @param bool $isActive - * @return \Magento\Webhook\Model\Resource\Subscription\Collection - */ - public function addIsActiveFilter($isActive) - { - if ($isActive) { - $this->addFieldToFilter('status', \Magento\PubSub\SubscriptionInterface::STATUS_ACTIVE); - } else { - $this->addFieldToFilter('status', \Magento\PubSub\SubscriptionInterface::STATUS_INACTIVE); - } - return $this; - } - - /** - * Filter out anything in the INACTIVE state - * - * @return \Magento\Webhook\Model\Resource\Subscription\Collection - */ - public function addNotInactiveFilter() - { - $this->getSelect()->where('status IN (?)', array( - \Magento\Webhook\Model\Subscription::STATUS_ACTIVE, - \Magento\Webhook\Model\Subscription::STATUS_REVOKED)); - - return $this; - } -} diff --git a/app/code/Magento/Webhook/Model/Resource/Subscription/Grid/Collection.php b/app/code/Magento/Webhook/Model/Resource/Subscription/Grid/Collection.php deleted file mode 100644 index 445f890b54d7c..0000000000000 --- a/app/code/Magento/Webhook/Model/Resource/Subscription/Grid/Collection.php +++ /dev/null @@ -1,64 +0,0 @@ -updateSubscriptionCollection(); - } -} diff --git a/app/code/Magento/Webhook/Model/Source/Authentication.php b/app/code/Magento/Webhook/Model/Source/Authentication.php deleted file mode 100644 index 3f57f077da959..0000000000000 --- a/app/code/Magento/Webhook/Model/Source/Authentication.php +++ /dev/null @@ -1,73 +0,0 @@ -_authenticationTypes = $authenticationTypes; - } - - /** - * Get available authentication types - * - * @return array - */ - public function toOptionArray() - { - return $this->_authenticationTypes; - - } - - /** - * Return authentications for use by a form - * - * @return array - */ - public function getAuthenticationsForForm() - { - $elements = array(); - foreach ($this->_authenticationTypes as $authName => $authentication) { - $elements[] = array( - 'label' => __($authentication), - 'value' => $authName, - ); - } - - return $elements; - } -} diff --git a/app/code/Magento/Webhook/Model/Source/Format.php b/app/code/Magento/Webhook/Model/Source/Format.php deleted file mode 100644 index bef1bf1a15572..0000000000000 --- a/app/code/Magento/Webhook/Model/Source/Format.php +++ /dev/null @@ -1,77 +0,0 @@ -_formats = $formats; - } - - /** - * Get available formats - * - * @return string[] - */ - public function toOptionArray() - { - return $this->_formats; - } - - /** - * Return non-empty formats for use by a form - * - * @return array - */ - public function getFormatsForForm() - { - $elements = array(); - foreach ($this->_formats as $formatName => $format) { - $elements[] = array( - 'label' => __($format), - 'value' => $formatName, - ); - } - - return $elements; - } -} diff --git a/app/code/Magento/Webhook/Model/Source/Hook.php b/app/code/Magento/Webhook/Model/Source/Hook.php deleted file mode 100644 index d450cfb56a9bc..0000000000000 --- a/app/code/Magento/Webhook/Model/Source/Hook.php +++ /dev/null @@ -1,104 +0,0 @@ -_options = $config->getWebhooks(); - } - - /** - * Get available topics - * - * @return array - */ - public function toOptionArray() - { - return $this->_options; - } - - /** - * Scan config element to retrieve topics - * - * @return array - */ - public function getTopicsForForm() - { - $elements = array(); - - // process groups - $elements = $this->_getTopicsForForm($this->toOptionArray(), array(), $elements); - - return $elements; - } - - /** - * Recursive helper function to dynamically build topic information for our form. - * Seeks out nodes under 'webhook' stopping when it finds a leaf that contains 'label' - * The value is constructed using the XML tree parents. - * @param array $node - * @param array $path - * @param array $elements - * @return array - */ - protected function _getTopicsForForm($node, $path, $elements) - { - if (!empty($node['label'])) { - $value = join('/', $path); - - $label = __($node['label']); - - $elements[] = array( - 'label' => $label, - 'value' => $value, - ); - - return $elements; - } - - foreach ($node as $group => $child) { - $path[] = $group; - $elements = $this->_getTopicsForForm($child, $path, $elements); - array_pop($path); - } - - return $elements; - } -} diff --git a/app/code/Magento/Webhook/Model/Subscription.php b/app/code/Magento/Webhook/Model/Subscription.php deleted file mode 100644 index 577a752b8bd0a..0000000000000 --- a/app/code/Magento/Webhook/Model/Subscription.php +++ /dev/null @@ -1,484 +0,0 @@ -_dateTime = $dateTime; - $this->_endpoint = $endpoint; - } - - /** - * Initialize model - */ - public function _construct() - { - parent::_construct(); - $this->_init('Magento\Webhook\Model\Resource\Subscription'); - } - - /** - * Prepare data to be saved to database - * - * @return \Magento\Core\Model\AbstractModel - */ - protected function _beforeSave() - { - // TODO: Can this ever be set to anything else, is it being used? - if (!$this->hasRegistrationMechanism()) { - $this->setRegistrationMechanism(self::REGISTRATION_MECHANISM_MANUAL); - } - - if ($this->_endpoint->hasDataChanges()) { - $this->_endpoint->save(); - if ($this->getEndpointId() === null) { - $this->setEndpointId($this->_endpoint->getId()); - } - } - - if ($this->hasDataChanges()) { - $this->setUpdatedAt($this->_dateTime->formatDate(time())); - } - - return parent::_beforeSave(); - } - - /** - * Processing object after delete data - * - * We need to be sure that related objects like Endpoint are also deleted. - * - * @return \Magento\Core\Model\AbstractModel|void - */ - protected function _afterDelete() - { - $this->getEndpoint()->delete(); - - return parent::_afterDelete(); - } - - /** - * Determines if the subscription is subscribed to a topic. - * - * @param string $topic The topic to check - * @return boolean True if subscribed, false otherwise - */ - public function hasTopic($topic) - { - return in_array($topic, $this->getTopics()); - } - - - /** - * Mark this subscription status to activated - */ - public function activate() - { - $this->setStatus(\Magento\PubSub\SubscriptionInterface::STATUS_ACTIVE); - } - - /** - * Mark this subscription status as deactivated - */ - public function deactivate() - { - $this->setStatus(\Magento\PubSub\SubscriptionInterface::STATUS_INACTIVE); - } - - /** - * Mark this subscription status to revoked - */ - public function revoke() - { - $this->setStatus(\Magento\PubSub\SubscriptionInterface::STATUS_REVOKED); - } - - /** - * Checks that the subscription has access to all the resources/topics it has subscribed to. - * - * @return string[] array of all invalid topics - */ - public function findRestrictedTopics() - { - $restrictedTopics = array(); - $user = $this->getUser(); - if (null === $user) { - return $restrictedTopics; - } - foreach ($this->getTopics() as $topic) { - if (!$user->hasPermission($topic)) { - $restrictedTopics[] = $topic; - } - } - - return $restrictedTopics; - } - - /** - * Returns the endpoint to which messages will be sent - * - * @return \Magento\Webhook\Model\Endpoint - */ - public function getEndpoint() - { - if (!$this->_endpointLoaded && $this->getEndpointId() !== null) { - $this->_endpoint->load($this->getEndpointId()); - $this->_endpointLoaded = true; - } - return $this->_endpoint; - } - - /** - * Overwrite data in the object. - * - * If $key is string, the attribute value will be overwritten by $value - * - * If $key is an array, it will overwrite all the data in the object. - * - * @param string|array $key - * @param mixed $value - * @return \Magento\Webhook\Model\Subscription - */ - public function setData($key, $value = null) - { - parent::setData($key, $value); - - if (is_array($key)) { - $this->_setDataArray($key); - } else { - switch ($key) { - case self::FIELD_ENDPOINT_URL: - $this->setEndpointUrl($value); - break; - case self::FIELD_FORMAT: - $this->setFormat($value); - break; - case self::FIELD_AUTHENTICATION_TYPE: - $this->setAuthenticationType($value); - break; - case self::FIELD_API_USER_ID: - $this->setApiUserId($value); - break; - case self::FIELD_TIMEOUT_IN_SECS: - $this->setTimeoutInSecs($value); - break; - } - } - - return $this; - } - - /** - * Set the endpoint URL for this Subscription - * - * @param string $url - * @return \Magento\Webhook\Model\Subscription - */ - public function setEndpointUrl($url) - { - $this->getEndpoint()->setEndpointUrl($url); - $this->setDataChanges(true); - return $this; - } - - /** - * Set the endpoint timeout in seconds. - * - * @param int $timeout - * @return \Magento\Webhook\Model\Subscription - */ - public function setTimeoutInSecs($timeout) - { - $this->getEndpoint()->setTimeoutInSecs($timeout); - $this->setDataChanges(true); - return $this; - } - - /** - * Set the format in which data should be sent (json, xml) - * - * @param string $format - * @return \Magento\Webhook\Model\Subscription - */ - public function setFormat($format) - { - $this->getEndpoint()->setFormat($format); - $this->setDataChanges(true); - return $this; - } - - /** - * Set the api user id that this subscription is associated with - * - * @param string $userId - * @return \Magento\Webhook\Model\Subscription - */ - public function setApiUserId($userId) - { - $this->getEndpoint()->setApiUserId($userId); - $this->setDataChanges(true); - return $this; - } - - /** - * Set the authentication type for this subscription - * - * @param string $authType - * @return \Magento\Webhook\Model\Subscription - */ - public function setAuthenticationType($authType) - { - $this->getEndpoint()->setAuthenticationType($authType); - $this->setDataChanges(true); - return $this; - } - - /** - * Returns the user abstraction associated with this subscription or null if no user has been associated yet. - * - * @return \Magento\Outbound\UserInterface|null - */ - public function getUser() - { - return $this->getEndpoint()->getUser(); - } - - /** - * Returns the type of authentication to use when attaching authentication to a message - * - * @return string - */ - public function getAuthenticationType() - { - return $this->getEndpoint()->getAuthenticationType(); - } - - /** - * Returns the format this message should be sent in (JSON, XML, etc.) - * - * @return string - */ - public function getFormat() - { - return $this->getEndpoint()->getFormat(); - } - - /** - * Returns the api user id that this subscriptions endpoint is associated with. - * - * @return string - */ - public function getApiUserId() - { - return $this->getEndpoint()->getApiUserId(); - } - - /** - * Returns the endpoint URL of this subscription - * - * @return string - */ - public function getEndpointUrl() - { - return $this->getEndpoint()->getEndpointUrl(); - } - - /** - * Returns the maximum time in seconds that this subscription is willing to wait before a retry should be attempted - * - * @return int - */ - public function getTimeoutInSecs() - { - return $this->getEndpoint()->getTimeoutInSecs(); - } - - /** - * Returns a list of topics that this Subscription is subscribed to - * - * @return array string[] - */ - public function getTopics() - { - if (!isset($this->_data['topics'])) { - $this->_getResource()->loadTopics($this); - } - /** if subscription doesn't have topics, $this->_data['topics'] can still be null. - * Therefore it is better to call _getData() to avoid exception - */ - return $this->_getData('topics'); - } - - /** - * Get the status of this endpoint, which should match one of the constants in \Magento\PubSub\SubscriptionInterface - * - * @return int - */ - public function getStatus() - { - return $this->_getData('status'); - } - - /** - * Object data getter - * - * If $key is not defined, method will return all the data as an array. - * Otherwise it will return value of the element specified by $key. - * It is possible to use keys like a/b/c for access nested array data. - * - * If $index is specified it will treat data as an array and retrieve - * corresponding member. If data is a string - it will be exploded by - * new line character and converted to array. - * - * @param string $key - * @param string|int $index - * @return mixed - */ - public function getData($key = '', $index = null) - { - $data = parent::getData($key, $index); - - switch ($key) { - case self::FIELD_ENDPOINT_URL: - return $this->getEndpointUrl(); - case self::FIELD_FORMAT: - return $this->getFormat(); - case self::FIELD_AUTHENTICATION_TYPE: - return $this->getAuthenticationType(); - case self::FIELD_API_USER_ID: - return $this->getApiUserId(); - case self::FIELD_TIMEOUT_IN_SECS: - return $this->getTimeoutInSecs(); - case '': - $data[self::FIELD_ENDPOINT_URL] = $this->getEndpointUrl(); - $data[self::FIELD_FORMAT] = $this->getFormat(); - $data[self::FIELD_AUTHENTICATION_TYPE] = $this->getAuthenticationType(); - $data[self::FIELD_API_USER_ID] = $this->getApiUserId(); - $data[self::FIELD_TIMEOUT_IN_SECS] = $this->getTimeoutInSecs(); - return $data; - default: - return $data; - } - } - - /** - * Set data by calling setter functions - * - * @param array $data - */ - protected function _setDataArray(array $data) - { - if (isset($data[self::FIELD_ENDPOINT_URL])) { - $this->setEndpointUrl($data[self::FIELD_ENDPOINT_URL]); - } - if (isset($data[self::FIELD_FORMAT])) { - $this->setFormat($data[self::FIELD_FORMAT]); - } - if (isset($data[self::FIELD_AUTHENTICATION_TYPE])) { - $this->setAuthenticationType($data[self::FIELD_AUTHENTICATION_TYPE]); - } - if (isset($data[self::FIELD_API_USER_ID])) { - $this->setApiUserId($data[self::FIELD_API_USER_ID]); - } - if (isset($data[self::FIELD_TIMEOUT_IN_SECS])) { - $this->setTimeoutInSecs($data[self::FIELD_TIMEOUT_IN_SECS]); - } - } -} diff --git a/app/code/Magento/Webhook/Model/Subscription/Config.php b/app/code/Magento/Webhook/Model/Subscription/Config.php deleted file mode 100644 index 638168d7eb1ae..0000000000000 --- a/app/code/Magento/Webhook/Model/Subscription/Config.php +++ /dev/null @@ -1,183 +0,0 @@ -_subscriptionSet = $subscriptionSet; - $this->_config = $config; - $this->_subscriptionFactory = $subscriptionFactory; - $this->_logger = $logger; - } - - /** - * Checks if new subscriptions need to be generated from config files - * - * @return \Magento\Webhook\Model\Subscription\Config - */ - public function updateSubscriptionCollection() - { - foreach ($this->_config->getSubscriptions() as $alias => $subscriptionData) { - try { - $this->_validateConfigData($subscriptionData, $alias); - $subscriptions = $this->_subscriptionSet->getSubscriptionsByAlias($alias); - if (empty($subscriptions)) { - // add new subscription - $subscription = $this->_subscriptionFactory->create() - ->setAlias($alias) - ->setStatus(\Magento\Webhook\Model\Subscription::STATUS_INACTIVE); - } else { - // get first subscription from array - $subscription = current($subscriptions); - } - - // update subscription from config - $this->_updateSubscriptionFromConfigData($subscription, $subscriptionData); - } catch (\LogicException $e){ - $this->_logger->logException(new \Magento\Webhook\Exception($e->getMessage())); - } - } - return $this; - } - - /** - * Validates config data by checking that $data is an array and that 'data' maps to some value - * - * @param mixed $data - * @param string $alias - * @throws \LogicException - */ - protected function _validateConfigData($data, $alias) - { - // We can't demand that every possible value be supplied as some of these can be supplied - // at a later point in time using the web API - if (!( is_array($data) && isset($data['name']))) { - throw new \LogicException(__( - "Invalid config data for subscription '%1'.", $alias - )); - } - } - - /** - * Configures a subscription - * - * @param \Magento\Webhook\Model\Subscription $subscription - * @param array $rawConfigData - * @return \Magento\Core\Model\AbstractModel - */ - protected function _updateSubscriptionFromConfigData( - \Magento\Webhook\Model\Subscription $subscription, - array $rawConfigData - ) { - // Set defaults for unset values - $configData = $this->_processConfigData($rawConfigData); - - $subscription->setName($configData['name']) - ->setFormat($configData['format']) - ->setEndpointUrl($configData['endpoint_url']) - ->setTopics($configData['topics']) - ->setAuthenticationType($configData['authentication_type']) - ->setRegistrationMechanism($configData['registration_mechanism']); - - return $subscription->save(); - } - - /** - * Sets defaults for unset values - * - * @param array $configData - * @return array - */ - private function _processConfigData($configData) - { - $defaultData = array( - 'name' => null, - 'format' => \Magento\Outbound\EndpointInterface::FORMAT_JSON, - 'endpoint_url' => null, - 'topics' => array(), - 'authentication_type' => \Magento\Outbound\EndpointInterface::AUTH_TYPE_NONE, - 'registration_mechanism' => \Magento\Webhook\Model\Subscription::REGISTRATION_MECHANISM_MANUAL, - ); - - if (isset($configData['topics'])) { - $configData['topics'] = $this->_getTopicsFlatList($configData['topics']); - } - - return array_merge($defaultData, $configData); - } - - /** - * Convert topics into acceptable form for subscription - * - * @param array $topics - * @return array - */ - protected function _getTopicsFlatList(array $topics) - { - $flatList = array(); - - foreach ($topics as $topicGroup => $topicNames) { - $topicNamesKeys = array_keys($topicNames); - foreach ($topicNamesKeys as $topicName) { - $flatList[] = $topicGroup . '/' . $topicName; - } - } - - return $flatList; - } -} diff --git a/app/code/Magento/Webhook/Model/Subscription/Options/Status.php b/app/code/Magento/Webhook/Model/Subscription/Options/Status.php deleted file mode 100644 index 92bba2a655493..0000000000000 --- a/app/code/Magento/Webhook/Model/Subscription/Options/Status.php +++ /dev/null @@ -1,59 +0,0 @@ -_translator = $translator; - } - - /** - * Return statuses array - * - * @return array - */ - public function toOptionArray() - { - return array( - \Magento\Webhook\Model\Subscription::STATUS_ACTIVE => __('Active'), - \Magento\Webhook\Model\Subscription::STATUS_REVOKED => __('Revoked'), - \Magento\Webhook\Model\Subscription::STATUS_INACTIVE => __('Inactive'), - ); - } -} diff --git a/app/code/Magento/Webhook/Model/User.php b/app/code/Magento/Webhook/Model/User.php deleted file mode 100644 index 1cb0c47ee9404..0000000000000 --- a/app/code/Magento/Webhook/Model/User.php +++ /dev/null @@ -1,88 +0,0 @@ -_user = $userFactory->create(); - $this->_user->load($webapiUserId); - $roleLocator = $roleLocatorFactory->create(array( - 'data' => array('roleId' => $this->_user->getRoleId()) - )); - - $this->_authorization = $authorizationFactory->create(array( - 'aclPolicy' => $aclPolicy, - 'roleLocator' => $roleLocator - )); - } - - /** - * Returns a shared secret known only by Magento and this user - * - * @return string A shared secret that both the user and Magento know about - */ - public function getSharedSecret() - { - return $this->_user->getSecret(); - } - - /** - * Checks whether this user has permission for the given topic - * - * @param string $topic Topic to check - * @return bool True if permissions exist - */ - public function hasPermission($topic) - { - return $this->_authorization->isAllowed($topic); - } -} diff --git a/app/code/Magento/Webhook/Model/User/Factory.php b/app/code/Magento/Webhook/Model/User/Factory.php deleted file mode 100644 index 7754604e98426..0000000000000 --- a/app/code/Magento/Webhook/Model/User/Factory.php +++ /dev/null @@ -1,57 +0,0 @@ -_objectManager = $objectManager; - } - - /** - * Create a new instance of \Magento\Webhook\Model\User - * - * @param int $webapiUserId webapi user id - * @return \Magento\Webhook\Model\User - */ - public function create($webapiUserId) - { - return $this->_objectManager->create('Magento\Webhook\Model\User', array('webapiUserId' => $webapiUserId)); - } -} diff --git a/app/code/Magento/Webhook/Model/Webapi/EventHandler.php b/app/code/Magento/Webhook/Model/Webapi/EventHandler.php deleted file mode 100644 index e8039f0ff5944..0000000000000 --- a/app/code/Magento/Webhook/Model/Webapi/EventHandler.php +++ /dev/null @@ -1,94 +0,0 @@ -_subscriptionSet = $subscriptionSet; - $this->_resourceAclUser = $resourceAclUser; - } - - /** - * Notifies the event handler that a webapi user has changed - * - * @param \Magento\Webapi\Model\Acl\User $user User object that changed - */ - public function userChanged($user) - { - // call helper that finds and notifies subscription (user_id) - $this->_validateSubscriptionsForUsers(array($user->getId())); - } - - /** - * Notifies the event handler that a webapi role has changed - * - * @param \Magento\Webapi\Model\Acl\Role $role Role object that changed - */ - public function roleChanged($role) - { - // get all users that contain this role (role_id) - $users = $this->_resourceAclUser->getRoleUsers($role->getId()); - - // for each user, call helper that finds and notifies subscription (user_id) - $this->_validateSubscriptionsForUsers($users); - } - - /** - * Finds all Subscriptions for the given users, and validates that these subscriptions are still valid. - * - * @param array $userIds users to check against - */ - protected function _validateSubscriptionsForUsers(array $userIds) - { - $subscriptions = $this->_subscriptionSet->getApiUserSubscriptions($userIds); - - /** @var \Magento\Webhook\Model\Subscription $subscription */ - foreach ($subscriptions as $subscription) { - if ($subscription->findRestrictedTopics()) { - $subscription->deactivate(); - $subscription->save(); - } - } - } -} diff --git a/app/code/Magento/Webhook/Model/Webapi/EventHandler/Factory.php b/app/code/Magento/Webhook/Model/Webapi/EventHandler/Factory.php deleted file mode 100644 index 6411effef8f9c..0000000000000 --- a/app/code/Magento/Webhook/Model/Webapi/EventHandler/Factory.php +++ /dev/null @@ -1,57 +0,0 @@ -_objectManager = $objectManager; - } - - /** - * Create a new instance of \Magento\Webhook\Model\Webapi\EventHandler - * - * @param array $arguments Fed into constructor - * @return \Magento\Webhook\Model\Webapi\EventHandler - */ - public function create(array $arguments = array()) - { - return $this->_objectManager->create('Magento\Webhook\Model\Webapi\EventHandler', $arguments); - } -} diff --git a/app/code/Magento/Webhook/Model/Webapi/User/Factory.php b/app/code/Magento/Webhook/Model/Webapi/User/Factory.php deleted file mode 100644 index 6283aa9f5a546..0000000000000 --- a/app/code/Magento/Webhook/Model/Webapi/User/Factory.php +++ /dev/null @@ -1,226 +0,0 @@ -_ruleFactory = $ruleFactory; - $this->_userFactory = $userFactory; - $this->_roleFactory = $roleFactory; - $this->_cache = $cache; - $this->_mathRandom = $mathRandom; - $this->_initVirtualResourceMapping($resourceProvider); - } - - /** - * Creates a new user and role for the subscription associated with this Webapi. - * - * @param array $userContext Information needed to create a user: email, company, secret, key - * @param array $topics Resources the user should have access to - * @return int Webapi user id - * @throws \Exception If a new user can't be created (because of DB issues for instance) - */ - public function createUser(array $userContext, array $topics) - { - // Company is an optional variable - $userContext[self::CONTEXT_COMPANY] = isset($userContext[self::CONTEXT_COMPANY]) - ? $userContext[self::CONTEXT_COMPANY] - : null; - - $role = $this->_createWebapiRole($userContext[self::CONTEXT_EMAIL], $userContext[self::CONTEXT_COMPANY]); - - try { - $this->_createWebapiRule($topics, $role->getId()); - $user = $this->_createWebapiUser($userContext, $role); - } catch (\Exception $e) { - $role->delete(); - throw $e; - } - - return $user->getId(); - } - - /** - * Creates a new \Magento\Webapi\Model\Acl\Role role with a unique name - * - * @param string $email - * @param string $company - * @return \Magento\Webapi\Model\Acl\Role - */ - protected function _createWebapiRole($email, $company) - { - $roleName = $this->_createRoleName($email, $company); - $role = $this->_roleFactory->create()->load($roleName, 'role_name'); - - // Check if a role with this name already exists, we need a new role with a unique name - if ($role->getId()) { - $uniqString = $this->_mathRandom->getUniqueHash(); - $roleName = $this->_createRoleName($email, $company, $uniqString); - } - - $role = $this->_roleFactory->create() - ->setRoleName($roleName) - ->save(); - - return $role; - } - - /** - * Creates a rule and associates it with a role - * - * @param array $topics - * @param int $roleId - * @return null - */ - public function _createWebapiRule(array $topics, $roleId) - { - $resources = array(); - foreach ($topics as $topic) { - $resources[] = isset($this->_topicMapping[$topic]) ? $this->_topicMapping[$topic] : $topic; - } - array_unique($resources); - - $resources = array_merge($resources, array( - 'webhook/create', - 'webhook/get', - 'webhook/update', - 'webhook/delete', - )); - - $this->_ruleFactory->create() - ->setRoleId($roleId) - ->setResources($resources) - ->saveResources(); - - /* Updating the ACL cache so that new role appears there */ - $this->_cache->clean(); - } - - /** - * Creates a webapi User in the DB - * - * @param array $userContext - * @param \Magento\Webapi\Model\Acl\Role $role - * @return \Magento\Core\Model\AbstractModel - */ - protected function _createWebapiUser(array $userContext, $role) - { - $user = $this->_userFactory->create() - ->setRoleId($role->getId()) - ->setApiKey($userContext[self::CONTEXT_KEY]) - ->setSecret($userContext[self::CONTEXT_SECRET]) - ->setCompanyName($userContext[self::CONTEXT_COMPANY]) - ->setContactEmail($userContext[self::CONTEXT_EMAIL]) - ->save(); - return $user; - } - - /** - * Create unique role name - * - * @param string $email - * @param string $prefix - * @param string $suffix - * @return string - */ - protected function _createRoleName($email, $prefix = null, $suffix = null) - { - $result = ''; - if ($prefix) { - $result = $prefix . self::NAME_DELIM; - } - - $result .= $email; - - if ($suffix) { - $result .= self::NAME_DELIM . $suffix; - } - return $result; - } - - /** - * Initialize our virtual resource to merchant visible resource mapping array. - * - * @param \Magento\Webapi\Model\Acl\Resource\Provider $resourceProvider - */ - protected function _initVirtualResourceMapping( - \Magento\Webapi\Model\Acl\Resource\Provider $resourceProvider - ) { - $virtualResources = $resourceProvider->getAclVirtualResources(); - foreach ($virtualResources as $resource) { - $virtualResource = $resource['id']; - $parentResource = $resource['parent']; - $this->_topicMapping[$virtualResource] = $parentResource; - } - } -} diff --git a/app/code/Magento/Webhook/Service/SubscriptionV1.php b/app/code/Magento/Webhook/Service/SubscriptionV1.php deleted file mode 100644 index ed4e82d273430..0000000000000 --- a/app/code/Magento/Webhook/Service/SubscriptionV1.php +++ /dev/null @@ -1,329 +0,0 @@ -_subscriptionFactory = $subscriptionFactory; - $this->_subscriptionSet = $subscriptionSet; - } - - /** - * Create a new Subscription - * - * @param array $subscriptionData - * @return array Subscription data - * @throws \Exception|\Magento\Core\Exception - * @throws \Magento\Webhook\Exception - */ - public function create(array $subscriptionData) - { - try { - $subscription = $this->_subscriptionFactory->create($subscriptionData); - - $this->_validateTopics($subscription); - - $subscription->save(); - - return $subscription->getData(); - } catch (\Magento\Core\Exception $exception) { - // These messages are already translated, we can simply surface them. - throw $exception; - } catch (\Exception $exception) { - // These messages have no translation, we should not expose our internals but may consider logging them. - throw new \Magento\Webhook\Exception( - __('Unexpected error. Please contact the administrator.') - ); - } - } - - /** - * Get all Subscriptions associated with a given api user. - * - * @param int $apiUserId - * @throws \Exception|\Magento\Core\Exception - * @throws \Magento\Webhook\Exception - * @return array of Subscription data arrays - */ - public function getAll($apiUserId) - { - try { - $result = array(); - $subscriptions = $this->_subscriptionSet->getApiUserSubscriptions($apiUserId); - - /** @var \Magento\Webhook\Model\Subscription $subscription*/ - foreach ($subscriptions as $subscription) { - $result[] = $subscription->getData(); - } - - return $result; - } catch (\Magento\Core\Exception $e) { - // These messages are already translated, we can simply surface them. - throw $e; - } catch (\Exception $e) { - // These messages have no translation, we should not expose our internals but may consider logging them. - throw new \Magento\Webhook\Exception( - __('Unexpected error. Please contact the administrator.') - ); - } - } - - /** - * Update a Subscription. - * - * @param array $subscriptionData - * @return array Subscription data - * @throws \Exception|\Magento\Core\Exception - * @throws \Magento\Webhook\Exception - */ - public function update(array $subscriptionData) - { - try { - $subscription = $this->_loadSubscriptionById($subscriptionData['subscription_id']); - $subscription->addData($subscriptionData); - - $this->_validateTopics($subscription); - - $subscription->save(); - - return $subscription->getData(); - } catch (\Magento\Core\Exception $e) { - // These messages are already translated, we can simply surface them. - throw $e; - } catch (\Exception $e) { - // These messages have no translation, we should not expose our internals but may consider logging them. - throw new \Magento\Webhook\Exception( - __('Unexpected error. Please contact the administrator.') - ); - } - } - - /** - * Get the details of a specific Subscription. - * - * @param int $subscriptionId - * @return array Subscription data - * @throws \Exception|\Magento\Core\Exception - * @throws \Magento\Webhook\Exception - */ - public function get($subscriptionId) - { - try { - $subscription = $this->_loadSubscriptionById($subscriptionId); - return $subscription->getData(); - } catch (\Magento\Core\Exception $e) { - // These messages are already translated, we can simply surface them. - throw $e; - } catch (\Exception $e) { - // These messages have no translation, we should not expose our internals but may consider logging them. - throw new \Magento\Webhook\Exception( - __('Unexpected error. Please contact the administrator.') - ); - } - } - - /** - * Delete a Subscription. - * - * @param int $subscriptionId - * @return array Subscription data - * @throws \Exception|\Magento\Core\Exception - * @throws \Magento\Webhook\Exception - */ - public function delete($subscriptionId) - { - try { - $subscription = $this->_loadSubscriptionById($subscriptionId); - $subscriptionData = $subscription->getData(); - - $subscription->delete(); - - return $subscriptionData; - } catch (\Magento\Core\Exception $e) { - // These messages are already translated, we can simply surface them. - throw $e; - } catch (\Exception $e) { - // These messages have no translation, we should not expose our internals but may consider logging them. - throw new \Magento\Webhook\Exception( - __('Unexpected error. Please contact the administrator.') - ); - } - } - - /** - * Activate a subscription. - * - * @param int $subscriptionId - * @return array - * @throws \Exception|\Magento\Core\Exception - * @throws \Magento\Webhook\Exception - */ - public function activate($subscriptionId) - { - try { - $subscription = $this->_loadSubscriptionById($subscriptionId); - - $subscription->activate(); - $subscription->save(); - return $subscription->getData(); - } catch (\Magento\Core\Exception $e) { - // These messages are already translated, we can simply surface them. - throw $e; - } catch (\Exception $e) { - // These messages have no translation, we should not expose our internals but may consider logging them. - throw new \Magento\Webhook\Exception( - __('Unexpected error. Please contact the administrator.') - ); - } - } - - /** - * De-activate a subscription. - * - * @param int $subscriptionId - * @return array - * @throws \Exception|\Magento\Core\Exception - * @throws \Magento\Webhook\Exception - */ - public function deactivate($subscriptionId) - { - try { - $subscription = $this->_loadSubscriptionById($subscriptionId); - - $subscription->deactivate(); - $subscription->save(); - return $subscription->getData(); - } catch (\Magento\Core\Exception $e) { - // These messages are already translated, we can simply surface them. - throw $e; - } catch (\Exception $e) { - // These messages have no translation, we should not expose our internals but may consider logging them. - throw new \Magento\Webhook\Exception( - __('Unexpected error. Please contact the administrator.') - ); - } - } - - /** - * Revoke a subscription. - * - * @param int $subscriptionId - * @return array - * @throws \Exception|\Magento\Core\Exception - * @throws \Magento\Webhook\Exception - */ - public function revoke($subscriptionId) - { - try { - $subscription = $this->_loadSubscriptionById($subscriptionId); - - $subscription->revoke(); - $subscription->save(); - return $subscription->getData(); - } catch (\Magento\Core\Exception $e) { - // These messages are already translated, we can simply surface them. - throw $e; - } catch (\Exception $e) { - // These messages have no translation, we should not expose our internals but may consider logging them. - throw new \Magento\Webhook\Exception( - __('Unexpected error. Please contact the administrator.') - ); - } - } - - /** - * Returns trues if a given userId is associated with a subscription - * - * @param int $apiUserId - * @param int $subscriptionId - * @throws \Magento\Webhook\Exception - */ - public function validateOwnership($apiUserId, $subscriptionId) - { - $subscription = $this->_loadSubscriptionById($subscriptionId); - if ($subscription->getApiUserId() != $apiUserId) { - throw new \Magento\Webhook\Exception( - __("User with id %1 doesn't have permission to modify subscription %2", $apiUserId, $subscriptionId) - ); - } - } - - /** - * Validates all the topics for a Subscription are Authorized. - * - * If invalid topics exists, an exception will be thrown. - * - * @param \Magento\Webhook\Model\Subscription $subscription - * @throws \Magento\Webhook\Exception - */ - private function _validateTopics(\Magento\Webhook\Model\Subscription $subscription) - { - $invalidTopics = $subscription->findRestrictedTopics(); - if (!empty($invalidTopics)) { - $listOfTopics = implode(', ', $invalidTopics); - throw new \Magento\Webhook\Exception( - __('The following topics are not authorized: %1', $listOfTopics) - ); - } - } - - /** - * Load subscription by id. - * - * @param int $subscriptionId - * @throws \Magento\Webhook\Exception - * @return \Magento\Webhook\Model\Subscription - */ - protected function _loadSubscriptionById($subscriptionId) - { - $subscription = $this->_subscriptionFactory->create()->load($subscriptionId); - if (!$subscription->getId()) { - throw new \Magento\Webhook\Exception( - __("Subscription with ID '%1' doesn't exist.", $subscriptionId) - ); - } - return $subscription; - } - -} diff --git a/app/code/Magento/Webhook/Service/SubscriptionV1Interface.php b/app/code/Magento/Webhook/Service/SubscriptionV1Interface.php deleted file mode 100644 index 7c8596032832c..0000000000000 --- a/app/code/Magento/Webhook/Service/SubscriptionV1Interface.php +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/app/code/Magento/Webhook/etc/adminhtml/menu.xml b/app/code/Magento/Webhook/etc/adminhtml/menu.xml deleted file mode 100644 index 996ecfc759d11..0000000000000 --- a/app/code/Magento/Webhook/etc/adminhtml/menu.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - diff --git a/app/code/Magento/Webhook/etc/adminhtml/routes.xml b/app/code/Magento/Webhook/etc/adminhtml/routes.xml deleted file mode 100644 index 504fa4f315b3b..0000000000000 --- a/app/code/Magento/Webhook/etc/adminhtml/routes.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/app/code/Magento/Webhook/etc/crontab.xml b/app/code/Magento/Webhook/etc/crontab.xml deleted file mode 100644 index 89e4e08a13933..0000000000000 --- a/app/code/Magento/Webhook/etc/crontab.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - * * * * * - - - * * * * * - - - */15 * * * * - - - */15 * * * * - - diff --git a/app/code/Magento/Webhook/etc/di.xml b/app/code/Magento/Webhook/etc/di.xml deleted file mode 100644 index 51dafbf59c884..0000000000000 --- a/app/code/Magento/Webhook/etc/di.xml +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - - Magento\Outbound\Formatter\Json - - - - - - - JSON - - - - - - - Magento\Outbound\Authentication\Hmac - - - - - - - HMAC SHA256 - - - - - - - - - - - - - - - - - diff --git a/app/code/Magento/Webhook/etc/events.xml b/app/code/Magento/Webhook/etc/events.xml deleted file mode 100644 index 94bf8bbb98088..0000000000000 --- a/app/code/Magento/Webhook/etc/events.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/app/code/Magento/Webhook/etc/frontend/routes.xml b/app/code/Magento/Webhook/etc/frontend/routes.xml deleted file mode 100644 index a6ea3884f0470..0000000000000 --- a/app/code/Magento/Webhook/etc/frontend/routes.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/app/code/Magento/Webhook/etc/module.xml b/app/code/Magento/Webhook/etc/module.xml deleted file mode 100755 index b18c83866ff35..0000000000000 --- a/app/code/Magento/Webhook/etc/module.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/app/code/Magento/Webhook/etc/webapi.xml b/app/code/Magento/Webhook/etc/webapi.xml deleted file mode 100644 index 91337f8f30d88..0000000000000 --- a/app/code/Magento/Webhook/etc/webapi.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - /:subscriptionId - /:subscriptionId - /:subscriptionId - - diff --git a/app/code/Magento/Webhook/etc/webapi/acl.xml b/app/code/Magento/Webhook/etc/webapi/acl.xml deleted file mode 100644 index 985a39ed7a9d5..0000000000000 --- a/app/code/Magento/Webhook/etc/webapi/acl.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/app/code/Magento/Webhook/schema/service/SubscriptionV1.xsd b/app/code/Magento/Webhook/schema/service/SubscriptionV1.xsd deleted file mode 100644 index ab46c8a7b4962..0000000000000 --- a/app/code/Magento/Webhook/schema/service/SubscriptionV1.xsd +++ /dev/null @@ -1,190 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Subscription ID - - - - - Subscription Alias - - - - - Subscription Name - - - - - Subscription subscribed topics - - - - - Subscription Status - - - - - Subscription Endpoint URL - - - - - Subscription Retry Timeout in Seconds - - - - - Subscription Authentication Type - - - - - Subscription Format - - - - - - - - - - Subscription Topic - - - - - - diff --git a/app/code/Magento/Webhook/sql/webhook_setup/install-1.0.0.0.php b/app/code/Magento/Webhook/sql/webhook_setup/install-1.0.0.0.php deleted file mode 100644 index 5f261019d9890..0000000000000 --- a/app/code/Magento/Webhook/sql/webhook_setup/install-1.0.0.0.php +++ /dev/null @@ -1,238 +0,0 @@ -startSetup(); - -/* @var $connection \Magento\DB\Adapter\AdapterInterface */ -$connection = $this->getConnection(); - -/** - * Create new table 'webhook_subscription' - */ -$subscriptionTable = $connection->newTable($this->getTable('webhook_subscription')) - ->addColumn('subscription_id', \Magento\DB\Ddl\Table::TYPE_INTEGER, 10, - array('identity' => true, 'unsigned' => true, 'nullable' => false, 'primary' => true), - 'Subscription Id') - ->addColumn('name', \Magento\DB\Ddl\Table::TYPE_TEXT, 255, - array('nullable' =>false), - 'Subscription Name') - ->addColumn('registration_mechanism', \Magento\DB\Ddl\Table::TYPE_TEXT, 40, - array('nullable' =>false), - 'Registration Mechanism') - ->addColumn('status', \Magento\DB\Ddl\Table::TYPE_INTEGER, null, - array('unsigned' => true, 'nullable' => false, 'default' => 0), - 'Status') - ->addColumn('alias', \Magento\DB\Ddl\Table::TYPE_TEXT, 255, array(), - 'Alias') - ->addColumn('updated_at', \Magento\DB\Ddl\Table::TYPE_TIMESTAMP, null, array(), - 'Updated At') - ->addColumn('endpoint_id', \Magento\DB\Ddl\Table::TYPE_INTEGER, 10, - array('nullable' => true,'default' => NULL,'unsigned' => true), - 'Subscription Endpoint') - ->addForeignKey( - $this->getFkName('webhook_subscription', 'endpoint_id', 'outbound_endpoint', 'endpoint_id'), - 'endpoint_id', - $this->getTable('outbound_endpoint'), - 'endpoint_id', - \Magento\DB\Ddl\Table::ACTION_SET_NULL, - \Magento\DB\Ddl\Table::ACTION_CASCADE) - ->addIndex( - $this->getIdxName('webhook_subscription', array('alias')), - array('alias') - ) - ->addIndex( - $this->getIdxName('webhook_subscription', array('status')), - array('status') - ) - ->setOption('collate', null) - ->setOption('comment', 'Subscription'); -$connection->createTable($subscriptionTable); - -/** - * Create table 'webhook_subscription_hook' - */ -$hookTable = $connection->newTable($this->getTable('webhook_subscription_hook')) - ->addColumn('hook_id', \Magento\DB\Ddl\Table::TYPE_INTEGER, 10, array( - 'identity' => true, - 'unsigned' => true, - 'nullable' => false, - 'primary' => true, - ), 'Hook Id') - ->addColumn('subscription_id', \Magento\DB\Ddl\Table::TYPE_INTEGER, null, array( - 'unsigned' => true, - 'nullable' => false, - ), 'Subscription Id') - ->addColumn('topic', \Magento\DB\Ddl\Table::TYPE_TEXT, 255, array( - ), 'Hook Topic') - ->addIndex( - $this->getIdxName('webhook_subscription_hook', array('topic')), - array('topic')) - ->addForeignKey( - $this->getFkName('webhook_subscription_hook', 'subscription_id', 'webhook_subscription', 'subscription_id'), - 'subscription_id', - $this->getTable('webhook_subscription'), - 'subscription_id', - \Magento\DB\Ddl\Table::ACTION_CASCADE, - \Magento\DB\Ddl\Table::ACTION_CASCADE - ) - ->setOption('collate', null) - ->setOption('comment', 'Webhook'); -$connection->createTable($hookTable); - -/** - * Create table 'webhook_event' - */ -$eventTable = $connection->newTable($this->getTable('webhook_event')) - ->addColumn('event_id', \Magento\DB\Ddl\Table::TYPE_INTEGER, 10, - array('identity' => true, 'unsigned' => true, 'nullable' => false, 'primary' => true), - 'Event Id') - ->addColumn('topic', \Magento\DB\Ddl\Table::TYPE_TEXT, 255, - array('nullable' => false), 'Hook Topic') - ->addColumn('body_data', \Magento\DB\Ddl\Table::TYPE_VARBINARY, '4M', - array('nullable' => false), - 'Serialized Data Array') - ->addColumn('headers', \Magento\DB\Ddl\Table::TYPE_TEXT, '16k', array(), - 'Headers') - ->addColumn('options', \Magento\DB\Ddl\Table::TYPE_TEXT, '16k', array(), - 'Options') - ->addColumn('status', \Magento\DB\Ddl\Table::TYPE_INTEGER, 10, array('nullable' => false), - 'Status') - ->addColumn('updated_at', \Magento\DB\Ddl\Table::TYPE_TIMESTAMP, null, array('nullable' => false), - 'Updated At') - ->addColumn('created_at', \Magento\DB\Ddl\Table::TYPE_TIMESTAMP, null, array('nullable' => false), - 'Created At') - ->addIndex($this->getIdxName('webhook_event', array('status')), array('status')) - ->setOption('collate', null) - ->setOption('comment', 'Queued Event Data'); -$connection->createTable($eventTable); - -/** - * Create table 'webhook_dispatch_job' - */ -$dispatchJobTable = $connection->newTable($this->getTable('webhook_dispatch_job')) - ->addColumn('dispatch_job_id', \Magento\DB\Ddl\Table::TYPE_INTEGER, 10, array( - 'identity' => true, 'unsigned' => true, 'nullable' => false, 'primary' => true), - 'Dispatch Job Id') - ->addColumn('event_id', \Magento\DB\Ddl\Table::TYPE_INTEGER, null, - array('unsigned' => true, 'nullable' => false), - 'Event Id') - ->addColumn('subscription_id', \Magento\DB\Ddl\Table::TYPE_INTEGER, null, - array('unsigned' => true, 'nullable' => false), - 'Subscription Id') - ->addColumn('status', \Magento\DB\Ddl\Table::TYPE_SMALLINT, null, - array('nullable' => false, 'default' => '0'), - 'Status') - ->addColumn('retry_count', \Magento\DB\Ddl\Table::TYPE_INTEGER, null, - array('unsigned' => true, 'nullable' => false), - 'Retry Count') - ->addColumn('updated_at', \Magento\DB\Ddl\Table::TYPE_TIMESTAMP, null, - array('default' => \Magento\DB\Ddl\Table::TIMESTAMP_INIT_UPDATE, 'nullable' => false), - 'Updated At') - ->addColumn('created_at', \Magento\DB\Ddl\Table::TYPE_TIMESTAMP, null, - array('default' => '0000-00-00 00:00:00', 'nullable' => false), - 'Created At') - ->addColumn('retry_at', \Magento\DB\Ddl\Table::TYPE_TIMESTAMP, null, - array('default' => '0000-00-00 00:00:00', 'nullable' => false), - 'Retry At') - ->addForeignKey( - $this->getFkName('webhook_dispatch_job', 'subscription_id', 'webhook_subscription', 'subscription_id'), - 'subscription_id', - $this->getTable('webhook_subscription'), - 'subscription_id', - \Magento\DB\Ddl\Table::ACTION_CASCADE, - \Magento\DB\Ddl\Table::ACTION_CASCADE - ) - ->addForeignKey( - $this->getFkName('webhook_dispatch_job', 'event_id', 'webhook_event', 'event_id'), - 'event_id', - $this->getTable('webhook_event'), - 'event_id', - \Magento\DB\Ddl\Table::ACTION_CASCADE, - \Magento\DB\Ddl\Table::ACTION_CASCADE - ) - ->addIndex( - $this->getIdxName('webhook_dispatch_job', array('status')), - array('status') - ) - ->addIndex( - $this->getIdxName('webhook_dispatch_job', array('retry_at')), - array('retry_at') - ) - ->setOption('collate', null) - ->setOption('comment', 'Dispatch Jobs'); -$connection->createTable($dispatchJobTable); - -/** - * Create table 'outbound_endpoint' * - */ -$outboundEndpointTbl = $connection->newTable($this->getTable('outbound_endpoint')) - ->addColumn('endpoint_id', \Magento\DB\Ddl\Table::TYPE_INTEGER, 10, - array('identity' => true, 'unsigned' => true, 'nullable' => false, 'primary' => true), - 'Endpoint Id') - ->addColumn('name', \Magento\DB\Ddl\Table::TYPE_TEXT, 255, - array('nullable' =>false), - 'Endpoint Name') - ->addColumn('endpoint_url', \Magento\DB\Ddl\Table::TYPE_TEXT, 255, - array('nullable' =>false), - 'Endpoint URL') - ->addColumn('authentication_type', \Magento\DB\Ddl\Table::TYPE_TEXT, 40, - array('nullable' =>false), - 'Authentication Type') - ->addColumn('format', \Magento\DB\Ddl\Table::TYPE_TEXT, 40, - array('nullable' =>false), - 'Data Format') - ->addColumn('status', \Magento\DB\Ddl\Table::TYPE_INTEGER, null, - array('unsigned' => true, 'nullable' => false, 'default' => 0), - 'Status') - ->addColumn('api_user_id', \Magento\DB\Ddl\Table::TYPE_INTEGER, null, array( - 'unsigned' => true, 'nullable' => true), - 'Webapi User Id') - ->addColumn('updated_at', \Magento\DB\Ddl\Table::TYPE_TIMESTAMP, null, array(), - 'Updated At') - ->addColumn( - 'timeout_in_secs', - \Magento\DB\Ddl\Table::TYPE_INTEGER, - null, - array( 'nullable' => false, 'default' => 5), - 'Timeout in seconds') - ->addIndex( - $this->getIdxName('outbound_endpoint', array('endpoint_id'), - \Magento\DB\Adapter\AdapterInterface::INDEX_TYPE_UNIQUE), - array('endpoint_id'), - array('type' => \Magento\DB\Adapter\AdapterInterface::INDEX_TYPE_UNIQUE)) - ->addForeignKey( - $this->getFkName('outbound_endpoint', 'api_user_id', 'webapi_user', 'user_id'), - 'api_user_id', - $this->getTable('webapi_user'), - 'user_id', - \Magento\DB\Ddl\Table::ACTION_SET_NULL, - \Magento\DB\Ddl\Table::ACTION_CASCADE) - ->setOption('collate', null) - ->setOption('comment', 'Endpoint for outbound messages'); -$connection->createTable($outboundEndpointTbl); - -$this->endSetup(); diff --git a/app/code/Magento/Webhook/view/adminhtml/css/boxes.css b/app/code/Magento/Webhook/view/adminhtml/css/boxes.css deleted file mode 100644 index 23fa8bf7f02d7..0000000000000 --- a/app/code/Magento/Webhook/view/adminhtml/css/boxes.css +++ /dev/null @@ -1,1858 +0,0 @@ -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License (AFL 3.0) - * that is bundled with this package in the file LICENSE_AFL.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/afl-3.0.php - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@magentocommerce.com so we can send you a copy immediately. - * - * DISCLAIMER - * - * Do not edit or add to this file if you wish to upgrade Magento to newer - * versions in the future. If you wish to customize Magento for your - * needs please refer to http://www.magentocommerce.com for more information. - * - * @copyright Copyright (c) 2013 X.commerce, Inc. (http://www.magentocommerce.com) - * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) - */ - -/***************** WIDGETS ****************** - Loading Indicator - Tables - Grid ( ubiquitous, massaction and dynamic) - Accordion - Tabs ( vertical and horizontal ) - Messages - Forms ( setter and elements) - Switcher - Space - Boxes - Scroller -*/ - -/**************** STRUCTURE ***************** - Layout - Header & Footer - Columns - Headings -*/ - -/************** PAGE-SPECIFIC *************** - Login - Sales - Catalog - Customers - Newsletter - System -*/ - -/********** ALIGNMENT AND CLEARS ***********/ - - -/******************************************************************/ -/**************************** WIDGETS *****************************/ -/******************************************************************/ - - -/* LOADING INDICATOR -*******************************************************************/ -#loading-process { - position:absolute; - top:45%; - left:50%; - margin-left:-60px; - border:2px solid #f1af73; - padding:15px 60px; - background:#fff4e9; - color:#d85909; - font-size:1.1em; - font-weight:bold; - text-align:center; - z-index:501; - } -#loading-mask, -.loading-mask { - background:background:url(../images/blank.gif) repeat; - position:absolute; - color:#d85909; - font-size:1.1em; - font-weight:bold; - text-align:center; - opacity:0.80; - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; /* IE8 */ - z-index:500; - } -#loading-mask .loader, -.loading-mask .loader { - position:fixed; - top:45%; - left:50%; - width:150px; - margin-left:-105px; - padding:15px 30px; - background:#fff4e9; - border:2px solid #f1af73; - color:#d85909; - font-weight:bold; - text-align:center; - z-index:1000; - } -.loading-mask .loader { - position:absolute; - } -.loading-mask { - *filter:alpha(opacity=60); - -moz-opacity:.6; - opacity:.6; - -webkit-opacity:.6; - background: #ffffff; - } -#message-popup-window-mask { position:absolute; top:0; right:0; bottom:0; left:0; width:100%; height:100%; z-index:980; background-color:#efefef; opacity:.5; -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";/*IE8*/ } -.message-popup { position:absolute; z-index:990; width:407px; top:-9999em; left:50%; margin:0 0 0 -203px; background:#f3bf8f; padding:0 4px 4px; } -.message-popup.show { top:280px; } -.message-popup .message-popup-head { padding:1px 0; } -.message-popup .message-popup-head h2 { padding:0 10px; margin:0; font:bold 12px/19px Arial, Helvetica, sans-serif; color:#644f3b; } -.message-popup .message-popup-head a { float:right; border:1px solid #ea7601; padding:0 12px 0 7px; background:url(../images/bkg_btn-close.gif) 0 50% repeat-x !important; font:normal 12px/17px Arial, Helvetica, sans-serif; color:#fff; text-decoration:none !important; cursor:pointer; } -.message-popup .message-popup-head a span { float:left; background:url(../images/bkg_btn-close2.gif) 0 50% no-repeat; padding-left:19px; } -.message-popup .message-popup-content { background:#fdf4eb; padding:21px 21px 10px; } -.message-popup .message-popup-content .message-icon { float:left; width:50px; padding:47px 0 0; background-position:50% 0; background-repeat:no-repeat; font-size:10px; line-height:12px; text-transform:uppercase; text-align:center; overflow:hidden; } -.message-popup .message-popup-content .message-critical { color:#e41101; } -.message-popup .message-popup-content .message-major { color:#f55600; } -.message-popup .message-popup-content .message-minor { color:#ff9e22; } -.message-popup .message-popup-content .message-notice { color:#659601; } -.message-popup .message-popup-content .message-text { float:right; width:295px; min-height:4.5em; overflow:hidden; color:#644f3b; } -.message-popup .message-popup-content .read-more { margin:7px 0 0; text-align:right; } -.message-popup .message-popup-content .read-more a { background:url(../images/more_arrow.gif) 0 50% no-repeat; padding-left:14px; text-decoration:underline; } -.message-popup .message-popup-content .read-more a:hover { text-decoration:none; } - -/* TABLES -*******************************************************************************/ - -/* Grid - General */ -.grid { border-bottom:0; padding-bottom:.5em; } -.grid table { width:100%; border:1px solid #cbd3d4; border-bottom:none; } -.grid table.border { border:1px solid #cbd3d4; } -.grid tbody { background:#fff; } /* Zebra odd-row */ -.grid tr.even, .grid tr.even tr { background:#f6f6f6; } /* Zebra even-row */ -.grid tr.on-mouse { background:#fcf5dd; cursor:pointer; } /* Rows mouse-over */ -.grid tr.invalid { background-color:#f5d6c7; } -.grid th, .grid td { padding:2px 4px 2px 4px; } -.grid th { white-space:nowrap; } -.grid td.editable input.input-text { width:50px !important; margin-left:4px !important; } -.grid td input.input-text { width:86%; } -.grid td input.input-text-export-filter { width:272px; } -.grid td input.input-text-range { width:104px; } -.grid td input.input-text-range-date { width:87px; } -.grid td input.input-inactive { background:#eee; } -.grid table td { border-width:0 1px 1px 0; border-color:#dadfe0; border-style:solid; } -.grid table.border td { background:#fff !important; } -.grid table td.first, -.grid table td.last { border-right:0; } -.grid table td.product { text-align:right; } -.grid table td.empty-text { padding:15px; } -.grid table td .action-select { width:100%; } -.grid .separator { padding:0 4px; color:#b9b9b9; } - -.grid tbody.odd tr { background:#fff !important; } -.grid tbody.even tr { background:#f6f6f6 !important; } -.grid tbody.odd tr td, -.grid tbody.even tr td { border-bottom:0; } -.grid tbody.odd tr.border td, -.grid tbody.even tr.border td { border-bottom:1px solid #dadfe0; } - - -/* Grid - Pager and Buttons row */ -table.actions { width:100%; margin:.5em 0; } -table.actions td { vertical-align:top; } -.pager select { width:4em!important; margin:0 4px; } -.pager input.page { width:2em !important; } -.pager .arrow { margin:0 3px; vertical-align:middle; } - - -/* Grid - Headings */ -.grid tr.headings { background:url(../images/sort_row_bg.gif) 0 50% repeat-x; } -.grid tr.headings th { border-width:1px; border-color:#f9f9f9 #d1cfcf #f9f9f9 #f9f9f9; border-style:solid; padding-top:1px; padding-bottom:0; font-size:.9em; } -.grid tr.headings th.last { border-right:0; } -.grid tr.headings th.no-link { /* Grid th with no sorting functionality */ padding-top:2px; padding-bottom:1px; color:#67767e; } -.grid tr.headings th span.nobr { display:block; /* FF3 fix */ } -.grid tr.headings th a { display:block; padding:2px 4px 1px 0; color:#2d444f; text-decoration:none; } -.grid tr.headings th a:hover { color:#d85909; text-decoration:none; } -.grid tr.headings th a.sort-arrow-desc, -.grid tr.headings th a.sort-arrow-asc { background:url(../images/sort_on_bg.gif) 0 0 no-repeat; border-bottom:1px solid #fff; border-right:1px solid #fff; padding-bottom:2px; } -.grid tr.headings th span.sort-title { display:block; padding:3px 12px 4px 0; line-height:1; } -.grid tr.headings th a.sort-arrow-desc span.sort-title, -.grid tr.headings th a.sort-arrow-asc span.sort-title { background-position:right 50%; background-repeat:no-repeat; padding:3px 12px 2px 8px; } -.grid tr.headings th a.sort-arrow-desc span.sort-title { background-image:url(../images/grid_sort_desc.gif); } -.grid tr.headings th a.sort-arrow-asc span.sort-title { background-image:url(../images/grid_sort_asc.gif); } - - -/* Grid - Mass Action */ -.massaction { width:100%; height:26px; border:1px solid #d1cfcf; border-bottom:none; background:url(../images/massaction_bg.gif) repeat-x 0 100% #ebebeb; font-size:.9em; } -.massaction td { width:50%; border-top:1px solid #fff; padding:1px 8px; vertical-align:middle; } -.massaction .entry-edit fieldset .select { width:auto; /*width:120px;*/ display:inline; } -.massaction .entry-edit fieldset select.validation-failed { border:1px dashed #eb340a !important; background:#faebe7 !important } -.massaction .entry-edit fieldset { margin:0; padding:0; background:none; border:none; } -.massaction .entry-edit fieldset .field-row { display:inline; } -.massaction .entry-edit .field-row label { float:none; width:auto; margin-left:13px; } -.massaction .entry-edit { margin:0 !important; padding:0; } -.massaction .entry-edit .validation-advice { display:none !important; } -.massaction a { text-decoration:none; } -.massaction .entry-edit fieldset span.form_row, -.massaction .entry-edit fieldset span.field-row { clear:none !important; display:inline; float:left !important; margin:0; padding:0 5px 0 0; } - -.massaction .entry-edit .outer-span { float:left; } - -/* Grid - Filter */ -.grid tr.filter { background:url(../images/filter_row_bg.gif) repeat-x #e3eff1; cursor:default; } -.grid tr.filter th { padding-top:5px; padding-bottom:5px; border:1px solid #bdbdbd; border-width:0 1px 1px 0; white-space:normal; } -.grid tr.filter th.last { border-right:0; } -.grid tr.filter input.input-text { width:85%; } -.grid tr.filter select { width:100%; } -.grid tr.filter .range .range-line { margin-bottom:3px; width:100px; } -.grid tr.filter .range div.date { min-width:121px; } -.grid tr.filter .range input { float:right; width:50px !important; margin-top:0; } -.grid tr.filter .range select { float:right; width:56px !important; margin-top:0; } -.grid tr.filter .range .label { display:block; width:36px; float:left; padding-left:2px; } -.grid tr.filter .date img { width:15px; height:15px; cursor:pointer; vertical-align:middle; } -.grid .head-massaction select { width:auto !important; max-width:90px; } -.grid select.select-export-filter, -.grid select.multiselect-export-filter { width:278px; } - -/* Grid Footer */ -.grid table tfoot tr { background:#D7E5EF; } -.grid table tfoot tr td { border-top:1px solid #9babb9; background:#e5ecf2; line-height:1.7em; } -.grid table.border tfoot tr td { background:#D7E5EF !important; } - - -/* Dynamic Grid */ /* Used in pages like Catalog -> Attributes */ -.dynamic-grid th { padding:2px;width:100px; } -.dynamic-grid td { padding:2px; } -.dynamic-grid td input { width:94px; } -tr.dynamic-grid td, -tr.dynamic-grid th { padding:2px 10px 2px 0; width:auto; } -tr.dynamic-grid input.input-text { width:154px; } -.available { color:#080; font-weight:bold; } -.not-available { color:#800; } - - -/* ACCORDION -*******************************************************************************/ -dl.accordion .grid { margin-bottom:0; } -dl.accordion dt, -.entry-edit .entry-edit-head { background:#6f8992; padding:2px 10px; } -dl.accordion dt, div.collapseable { margin-top:1px; } -dl.accordion dt a, div.collapseable a { background:url(../images/entry_edit_head_arrow_down.gif) 100% 50% no-repeat; color:#fff; display:block; font-weight:bold; text-decoration:none; } -div.disabled { background:#c6cbc9 !important; } -div.disabled a { background-image:url(../images/entry_edit_head_arrow_down2.gif) !important; color:#f6f6f6 !important; } - -.entry-edit fieldset.collapseable { margin-bottom:10px; } - -dl.accordion dt a:hover, div.collapseable a:hover { color:#fff; text-decoration:none; } -dl.accordion dt.open a, div.collapseable a.open { background:url(../images/entry_edit_head_arrow_up.gif) 100% 50% no-repeat; } -dl.accordion dd { display:none; } -dl.accordion dd.open { display:block; } -img.accordion-btn { float:right; margin-top:1px; margin-right:5px; } - -/* TABS -*******************************************************************************/ - -/* Vertical Tabs */ -ul.tabs { border-top:1px solid #bebebe; background-color:#e7efef; } -ul.tabs a, ul.tabs span { display:block; } -ul.tabs a, ul.tabs a:hover { text-decoration:none; } -/* ul.tabs a.notloaded { color:#999; } */ -ul.tabs a, ul.tabs a:hover { color:#000; } -ul.tabs, ul.tabs a { background:url(../images/tabs_link_bg.gif) repeat-y 100% #E7EFEF; } -ul.tabs a:hover { background-color:#D8E6E6; background-image:url(../images/tabs_link_over_bg.gif); } -ul.tabs a.active, -ul.tabs .ui-state-active a { padding:0; border-bottom:1px solid #bebebe; background:none; } -ul.tabs a:hover.active, -ul.tabs .ui-state-active a:hover { padding:0; } -ul.tabs span { background:url(../images/tabs_span_bg.gif) repeat-x 0 100%; padding:.3em 0.5em .28em 1.5em; cursor:pointer; } -ul.tabs span em { float:right; } -ul.tabs a.active span, -ul.tabs a:hover.active span, -ul.tabs .ui-state-active a span, -ul.tabs .ui-state-active a:hover span { background:#fff; font-weight:bold; } -ul.tabs a.subitem { padding-left:2.2em; } -ul.tabs span.changed, -ul.tabs span.error, -ul.tabs span.loading { float:right; background:0; padding:0; } -ul.tabs a.changed span.changed { background:url(../images/fam_bullet_disk.gif) 0 0 no-repeat !important; width:16px; height:16px; } -ul.tabs a.error span.error { background:url(../images/fam_bullet_error.gif) 0 0 no-repeat !important; width:16px; height:16px; } -ul.tabs a.ui-tabs-loading span.loading { background:url(../images/loader-small.gif) 0 0 no-repeat !important; width:16px; height:16px; } -ul.tabs a.changed { font-style:italic; } - -/* Horizontal Tabs */ -ul.tabs-horiz { margin:0 0 18px 0; background:url(../images/horiz_tabs_ul_bg.gif) repeat-x 0 100% #f8f8f8; padding:8px 0 0 5px; } -ul.tabs-horiz li { float:left; margin:0 4px; } -ul.tabs-horiz li a { display:block; background:#e2e2e2; border:1px solid #ccc; padding:2px 10px; color:#333 !important; text-decoration:none !important; } -ul.tabs-horiz li a.notloaded { /* not used for now */ } -ul.tabs-horiz li a.active, -ul.tabs-horiz .ui-state-active a { border-bottom:1px solid #fff; background:#fff; } - - -/* MESSAGES -*******************************************************************************/ -.notification-global { padding:5px 27px 5px 47px; background:#fff9e9 url(../images/error_msg_icon.gif) 27px 5px no-repeat; border-bottom:1px solid #eee2be; border-top:1px solid #eee2be; font-size:11px; line-height:16px; margin:0 0 -3px; color:#444; position:relative; } -.notification-global-notice { background-image:url(../images/note_msg_icon.gif); } -.notification-global .label { color:#eb5e00; } -.notification-global .clickable { cursor:pointer; } -.notification-global span.critical { color:#d20000; } -.notification-global a:hover { text-decoration:none; } - -.error, -a.error span, -.required, -.validation-advice, -label.mage-error { color:#D40707 !important; font-weight:bold !important; } -label.mage-error {width: auto !important; display: block;} -.notice { color:#ea7601} -.messages ul { border:0 !important; } -.messages li { min-height:23px !important; margin-bottom:11px !important; padding:8px 8px 2px 32px !important; font-size:.95em !important; font-weight:bold !important; } -.messages ul li { margin:0 0 3px 0 !important; border:0 !important; padding:0 !important; } -.error-msg { border:1px solid #f16048 !important; color:#df280a !important; background:#faebe7 url(../images/error_msg_icon.gif) no-repeat 10px 10px !important; } -.success-msg { border:1px solid #95a486 !important; color:#3d6611 !important; background:#eff5ea url(../images/success_msg_icon.gif) no-repeat 10px 10px !important; } -.notice-msg { border:1px solid #ffd967 !important; background:#fffbf0 url(../images/note_msg_icon.gif) no-repeat 10px 10px !important; color:#3d6611 !important; } -.warning-msg { border:1px solid #666e73 !important; background:#e6e6e6 url(../images/warning_msg_icon.gif) no-repeat 10px 10px !important; color:#000000 !important; } -.validation-advice, -label.mage-error { clear:both; min-height:15px; margin:3px 0 0 9px; background:url(../images/validation_advice_bg.gif) no-repeat 2px 1px; padding-left:16px; font-size:.95em; font-weight:bold; line-height:1.25em; } -input.validation-failed, textarea.validation-failed { background:#fef0ed; border:1px dashed #d6340e; } - -/* Noscript Notice */ -.noscript { border:1px solid #000; border-width:0 0 1px; background:#ffff90; font-size:12px; line-height:1.25; text-align:center; color:#2f2f2f; } -.noscript .noscript-inner { width:900px; margin:0 auto; padding:12px 0 12px; background:url(../images/i_notice.gif) 20px 50% no-repeat; } -.noscript p { margin:0; } - -/* For Demo store only */ -.demo-notice { margin:0; background:#d75f07; padding:5px 10px 6px 10px; color:#fff; line-height:1em; text-align:center; } - - -/* FORMS -*******************************************************************************/ -select.countries option { background-repeat:no-repeat; } -.entry-edit .fieldset .tree li, -.entry-edit .tree li { margin:0; } - - -/* Entry Edit */ /* Site-wide form fieldset */ -table.form-edit { width:100%; } -.box, -.entry-edit fieldset, -.entry-edit .fieldset { padding:10px 15px; margin-bottom:15px; } -.entry-edit .entry-edit-head h4 { float:left; padding:0; background:none; margin:0; color:#fff; font-size:1em; line-height:18px; min-height:0; } -.entry-edit .entry-edit-head .tools { float:right;} -.entry-edit .entry-edit-head strong, -.entry-edit .entry-edit-head a { color:#fff; font-size:1em; line-height:18px; min-height:0; font-weight:bold} -.entry-edit .entry-edit-head .entry-edit-head-link {height:41px; margin:-41px 0 0; position: absolute; visibility: hidden;} -.entry-edit .content { margin-left:0 !important; padding:10px 15px; } -.entry-edit fieldset li, -.entry-edit .fieldset li { margin:4px 0; } -.entry-edit fieldset span.form_row, -.entry-edit .fieldset span.form_row, -.entry-edit fieldset .field-row .hint, -.entry-edit .fieldset .field-row .hint { float:left; color:#999; padding-left:12em; } -.entry-edit .form-buttons { float:right; margin:2px -3px 2px 0pt; } -label.inline { float:none !important; width:auto !important; } -.nested-content .entry-edit { margin-left:2em; } -.nested-content .entry-edit .entry-edit { margin-left:0; } -#coupon_container .entry-edit { min-width:310px; } - -/* Form Elements */ -input.input-text,textarea,select { border-width:1px; border-style:solid; border-color:#aaa #c8c8c8 #c8c8c8 #aaa; background:#fff; font:12px arial, helvetica, sans-serif; } -select { min-height:17px; /* to set the height for empty selects */ } -input.input-text,textarea { padding:2px; } -input.qty { width:40px !important; } -input.item-qty { width:22px !important; } -input.price { width:50px !important; text-align:right; } -input[type=text].disabled { background:#eee; } -select optgroup { font-style:normal; } -select optgroup option { padding-left:10px; } -select optgroup option.even { background:#f6f6f6; } /* Zebra even-row */ -select.multiselect option { padding:3px 4px; border-bottom:1px solid #ddd; } -.checkboxes li { margin:0 0 5px !important; } -.field-100 { background-color:#fff; border-width:1px; border-style:solid; border-color:#aaa #c8c8c8 #c8c8c8 #aaa; padding:2px; } -.field-100 textarea, -.field-100 input.input-text { float:left; width:100% !important; border:0 !important; padding:0 !important; } -@media screen and (-webkit-min-device-pixel-ratio:0) { - select option:disabled, - select:disabled option { color:#c9c9c9!important;color:#cacaca!important; text-shadow:2px 2px 2px #000; } -} - -/* Form List */ /* Table for default form data */ -.form-list { width:auto; border:0 !important; } -.form-list td.label, -.form-list td.value, -.form-list td.value2, -.form-list td.note, -.form-list td.scope-label, -.form-list td.use-default { border:0 !important; padding-top:5px !important; padding-bottom:5px !important; padding-left:5px !important; background:0 !important; } -.form-list td.hidden { border:0 !important; padding:0 !important; background:0 !important; } -.form-list td.label { width:200px; } -.form-list td.label label { display:block; width:185px; padding-right:15px; } -.form-list td.value input.input-text, -.form-list td.value textarea { width:274px; } -.form-list td.value textarea { height:15em; } -.form-list td.value select { width:280px; } -.form-list td.value select.select-date { width:87px; } -.form-list td.note { background:url(../images/note_cell_bg.gif) 6px 10px no-repeat !important; padding-left:18px; } -.form-list td.scope-label { padding-left:5px; color:#6f8992; font-size:.9em; } -.form-list p.note { margin:0; padding:0 0 0 13px; background:url(../images/note_bg.gif) 1px 6px no-repeat; font-size:11px; } - -.columns .form-list { width:auto; } -.columns .form-list td.value { width:280px; padding-right:5px !important; } -.columns .form-list td.value .next-toinput { width:75px; display:inline; margin-right:5px; } -.columns .form-list td.value .next-toselect input.input-text { width:195px!important; display:inline; } - -.fieldset-wide .form-list { width:100% !important; } -.fieldset-wide .form-list td.value { width:auto !important; } -.fieldset-wide .form-list td.value input.input-text, -.fieldset-wide .form-list td.value textarea { width:98% !important; } -#weight {width: 110px !important; } -/*.fieldset-wide .form-list td.value select { display:block; }*/ -.fieldset-wide .form-list td.scope-label { white-space:nowrap; width:1px; } -.fieldset-wide .form-list td.note { width:120px; } - -.multi-input { margin-bottom:8px; } /* Example: Address fields with 2 input lines */ -.grid tr .form-list tr { background:#fff !important; } /* Follows grid row background-color */ -.grid tr.even .form-list tr { background:#f6f6f6 !important; } /* Follows grid row background-color */ -.grid tr.on-mouse .form-list tr { background:#fcf5dd !important; } /* Follows grid row background-color */ -.grid tr .form-list { margin:8px 0; } -.field-row { display:block; margin-bottom:5px; } -span.delete-image, -span.delete-file { display:block; white-space:nowrap; padding-left:25px; } -span.delete-file { padding:0; } - -/* Back compatibility with span forms */ -.entry-edit .field-row { display:block; } -.entry-edit .field-row label { float:left; width:150px; } - -/* Form Button */ -.content-buttons.form-buttons, -.content-header .form-buttons { text-align:right; margin-bottom:0; } -.content-header .content-buttons-placeholder { display:inline !important; } -.content-header .form-buttons { float:right; } -.content-header td.form-buttons { float:none; } -.content-header .form-buttons button { margin-bottom:3px; } -.sub-btn-set { border:1px solid #ddd; border-width:0 1px; background:url(../images/sub_button_bg.gif) repeat; padding:3px 10px; text-align:right; } -button, -.form-button { vertical-align:middle; border-width:1px; border-style:solid; border-color:#ed6502 #a04300 #a04300 #ed6502; padding:0 7px 1px 7px; background:#ffac47 url(../images/btn_bg.gif) repeat-x 0 100%; color:#fff; font:bold 12px arial, helvetica, sans-serif; cursor:pointer; text-align:center !important; white-space:nowrap; } -button:hover { background:#f77c16 url(../images/btn_over_bg.gif) repeat-x 0 0; } -button:active { background:#f77c16 url(../images/btn_on_bg.gif) repeat-x 0 0; } -button span { line-height:1.35em; background-repeat:no-repeat; background-position:0 50%; } -button span span { background:none !important; padding:0 !important; margin:0 !important; display:inline !important; } -button.delete, -button.save, -button.add { padding-left:6px; } -button.cancel span, -button.delete span, -button.save span, -button.add span, -button.back span, -button.add-image span, -button.add-widget span { padding-left:20px; } -/* Google Chrome specific fix for empty buttons */ -button.add span:after, -button.delete span:after { display:inline-block; clear:both; content:"."; font-size:0; line-height:0; height:0; overflow:hidden; } -button.back { border-color:#ccc #aaa #aaa #ccc; background-color:#fff; background-image:url(../images/btn_back_bg.gif); color:#555; } -button.back span { background-image:url(../images/icon_btn_back.gif); } -button.fail, -button.cancel, -button.delete { border-color:#d24403 #a92000 #a92000 #d24403; background-image:url(../images/cancel_btn_bg.gif); background-color:#fcaf81; color:#fff; } -button.fail:hover, -button.cancel:hover, -button.delete:hover { background-image:url(../images/cancel_btn_over_bg.gif); } -button.fail:active, -button.cancel:active, -button.delete:active { background-image:url(../images/cancel_btn_active_bg.gif); background-color:#e0612f; } -button.cancel span, -button.delete span { background-image:url(../images/cancel_btn_icon.gif); } -button.add span { background-image:url(../images/add_btn_icon.gif); } -button.save span { background-image:url(../images/save_btn_icon.gif); } -button.show-hide span { background-image:url(../images/btn_show-hide_icon.gif); padding-left:26px; } -button.add-image span { background-image:url(../images/btn_add-image_icon.gif); } -button.add-widget span { background-image:url(../images/btn_add-widget_icon2.gif); padding-left:24px; } -button.add-variable span { background-image:url(../images/btn_add-variable_icon.gif); padding-left:26px; } -button.go span { background-image:url(../images/btn_go.gif); padding-left:16px; } -button.btn-chooser { display:block; margin:0 0 10px; } -button.success { background-image:url(../images/btn_gr_bg.gif); border-color:#46745E; } -button.success:hover { background:url(../images/btn_gr_over.gif) #6cac46; } -button.success:active { background:url(../images/btn_gr_on.gif) repeat-x 0 0 #3fa05e; } - -button.disabled, -button.disabled:hover, -button.disabled:active { border-color:#777 #505050 #505050 #777; background:#919191 url(../images/btn_bg-disabled.gif) 0 0 repeat-x; color:#fff; cursor:default; opacity:.8; -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=20)"; } -button.add.disabled span { background-image:url(../images/add_btn_icon-disabled.gif); } - -button.loading > span { padding-left:20px; background-image: url(../images/btn_loading-icon.gif) !important;} - -button.icon-btn { width:32px !important; } -button.icon-btn span { text-indent:-999em; display:block; width:16px; padding:0; overflow:hidden; } - -.buttons-set { margin:0 0 10px; } -.buttons-set button { margin-right:5px; } - - -/* Buttons group */ - -.btn-add { padding-left:6px; } -.btn-add span { - background-image:url(../images/add_btn_icon.gif); - padding-left:20px; -} -div.button { - border-width:1px; - border-style:solid; - order-color:#ed6502 #a04300 #a04300 #ed6502; - padding:1px 7px 3px 7px; - background:#ffac47 url(../images/btn_bg.gif) repeat-x 0 100%; - color:#fff; - font:bold 12px arial, helvetica, sans-serif; - cursor:pointer; - text-align:center !important; - white-space:nowrap; -} -div.button:hover { - background:#f77c16 url(../images/btn_over_bg.gif) repeat-x 0 0; -} -div.button:active { - background:#f77c16 url(../images/btn_on_bg.gif) repeat-x 0 0; -} -div.button span { - line-height:1.25em; - background-repeat:no-repeat; - background-position:0 50%; -} -div.button { - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -.buttons-group { - position: relative; - display:inline-block; - vertical-align:middle; -} -.buttons-group:before, -.buttons-group:after { - display: table; - content: ""; -} -.buttons-group:after { - clear: both; -} -.buttons-group > .button { - position:relative; - float:left; - margin-left:-1px; - border-radius:0; -} -.buttons-group > .button:first-child { - margin-left:0; -} -.buttons-group > .button:last-child, -.buttons-group > [data-toggle="dropdown"] { -} - -/* Button toggle (with dropdown menu) */ -.dropdown-menu { - position:absolute; - display:none; - list-style:none; - margin:1px 0 0 0; - padding:0; - right:0; - top:100%; - min-width: 100%; - border-width:1px; border-style:solid; border-color:#ed6502 #a04300 #a04300 #ed6502; - box-shadow: 0 3px 6px rgba(0, 0, 0, 0.2); - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - -ms-box-sizing: border-box; - box-sizing: border-box; - white-space: nowrap; -} -.dropdown-menu li { - background:#ffac47; - background:rgba(255, 172, 71, .95); - text-align: left;color:#fff; font:bold 12px arial, helvetica, sans-serif; cursor:pointer; - padding:0; - position: relative; - z-index: 1; -} -.dropdown-menu li .item { - display: block; - padding:4px 25px 4px 8px; -} -.dropdown-menu li > .tooltip { - position: absolute; top:5px; right:3px; -} -.dropdown-menu li.selected { -} -.dropdown-menu li:hover { - background:#f77c16; - z-index: 2; -} -.dropdown-menu li:active { - background:#f77c16; -} -.dropdown-menu li:last-child { - -} -.dropdown-menu-top { - margin:0 0 3px 0; - top:auto; - bottom:100%; -} -.buttons-group.active { - z-index:20; -} -.buttons-group.active .dropdown-menu { - display:block; -} -.btn-toggle span { - width:6px; overflow: hidden; display: block; -} -.active .btn-toggle { - background:#f77c16 url(../images/btn_on_bg.gif) repeat-x 0 0; -} -.btn-toggle span:before { - display: inline-block; - content:''; - margin-left:100px; - /*position: absolute;*/ - text-indent: 0; - margin-left:0; - width: 0; - height: 0; - border-right:3px solid transparent; - border-left:3px solid transparent; - border-top: 6px solid #fff; -} - -/* ============================================================================= - Tooltip - ========================================================================== */ - -/* Styles for simple "css" tooltip */ -.tooltip { - display:inline-block; - vertical-align:middle; - line-height:1.1; -} -.tooltip > .help { - width:15px; - height: 15px; - line-height: 15px; - text-indent: -999em; - overflow: hidden; - display: block; - background: url(../images/icon-tooltip.png) no-repeat 0 0; - position: relative; z-index: 111; - cursor:help; -} -.tooltip-content { - display:none; - position:absolute; - max-width:200px; - margin-top:5px; - margin-left:-18px; - padding:8px; - border-radius:3px; - background:#000; - background:rgba(0,0,0,.8); - color:#fff; - text-shadow:none; - z-index:20; - font-weight: normal; - font-size: 11px; -} -.tooltip-content:before { - content:''; - position:absolute; - width:0; - height:0; - top:-5px; - left:20px; - border-left: 5px solid transparent; - border-right: 5px solid transparent; - border-bottom: 5px solid #000; - opacity:.8; -} -.tooltip:hover { - z-index:20; -} -.tooltip:hover > .help { - background-position: 0 -15px; -} -.tooltip > .help:hover + .tooltip-content { - display:block; -} - - -/* SWITCHER -*******************************************************************************/ -.switcher { margin-bottom:10px; border:1px solid #cddddd; background:#e7efef; padding:10px; } -.side-col .switcher { padding-right:26px; } -.side-col .switcher label { display:block; } -.side-col .switcher .link-store-scope { float:right; margin-right:-19px; margin-left:3px; } -.side-col .switcher select { width:100%; float:left; } -/*.side-col .switcher { margin-right:20px; margin-bottom:20px; }*/ -.catalog-categories .side-col .switcher { margin-right:0; margin-bottom:15px; } -.link-store-scope { display:inline-block; vertical-align:middle; margin:0 0 1px; width:16px; height:16px; background:url(../images/i_question-mark.png) 0 0 no-repeat; text-decoration:none !important; text-indent:-999em; overflow:hidden; } -.store-scope .link-store-scope { float:left; margin-right:10px; } -.store-scope .tree-store-scope { float:left; padding:7px 10px; border:1px dotted #dedede; } -.store-scope table.stores-tree { float:left; width:auto !important; } -.form-list td.value .store-scope { white-space:nowrap; } -.form-list td.value .link-store-scope { float:none; margin-right:0; vertical-align:top; margin-top:6px; } - - -/* SPACE -*******************************************************************************/ -.box-left, .box-right { width:48.5%; } -.box-left { float:left; } -.box-right { float:right; } -.box-left .content, -.box-right .content { padding:6px 14px; } -.separator, .pipe { padding:0 6px; font-size:.9em; } /* vertical pipe */ -.divider { display:block; height:1px; margin:8px 0; background:#ddd; overflow:hidden; } /* horizontal pipe */ -td.divider { font-size:1px; line-height:0; } -.box, -.entry-edit fieldset, -.entry-edit .fieldset { border:1px solid #d6d6d6; background:#fafafa; } - - -/* SCOLLER */ /* Used primarily in Sales -> Order -> Create Order */ /* -*******************************************************************************/ -.scroll-cont { - position:absolute; - top:-25px; - left:503px; - width:16px; - height:265px; - background:transparent url(../images/db-scroll-bg.gif) no-repeat top; - z-index:10000; - } -.auto-scroll { overflow:auto; height:11em; } -.root { position:relative; height:260px; margin:0; width:1px; } -.thumb { position:absolute; height:40px; width:16px; margin-top:-28px; z-index:11000; } -.up { margin-top:254px; height:16px; } -.dn { margin-top:0; padding:0; height:15px; } -.up a, .up a img, -.dn a, .dn a img, -.thumb a , -.thumb a img { border:0; } -.up a:active, .dn a:active { outline:none; } -.scrollContainer { - position:absolute; - left:0; - top:19px; - clip:rect(0 467px 200px 0); - overflow:auto; - border:0; - } -.scrollContent { position:absolute; left:0; top:0; } - -/* Horizontal scroll */ -.hor-scroll { width:100%; padding-bottom:4px; margin-bottom:-4px; } /* IE has personal style, see iestyles.css */ - - -/**/ -.note-list { width:100%; overflow:hidden; } -.note-list li { border-top:1px solid #e3e3e3; margin-top:9px !important; background:url(../images/icon_note_list.gif) no-repeat 0 4px; padding-bottom:9px; padding-left:18px; } - - - -/******************************************************************************/ -/********************************** STRUCTURE *********************************/ -/******************************************************************************/ - -/* LAYOUT -*******************************************************************************/ -.wrapper { min-width:960px; } -.wrapper-popup { min-width:750px; } -.header { background:url(../images/header_top_bg.gif) repeat-x #425e66; text-align:right; } -.middle { min-height:450px; background:url(../images/simple_container_bg.gif) repeat-x #fff; padding:23px 27px 0 27px; } -.middle-popup { border-bottom:3px solid #fff; background:url(../images/middle_bg.gif) repeat-x 0 100% #fff; padding:0 0 0 0; background:yellow; } -.container-collapsed { padding:1.8em 2.2em 1.8em 2em; padding-top:0; } -.columns {background:url(../images/side_col_bg.gif) repeat-y 217px 0; } - -div.side-col { float:left; width:220px; margin-right:-220px; padding-bottom:25px; } -div.main-col { margin-left:220px; min-height:450px; padding:0 0 25px 25px; } -div.main-col-inner { float:left; /* Fixes some inner clears in the liquid main-col */ width:100%; } - -.footer { clear:both; background:url(../images/footer_bg.gif) repeat-x #e6e6e6; padding:105px 2.8em 2.8em 2.8em; font-size:.95em; text-align:center; } -.simple-container-popup { min-height:50px !important; padding:1.8em 2.3em 6em 2.3em; background:url(../images/simple_container_bg.gif) repeat-x; } - -.page-popup { background:#fff; } - - -/******************************************************************************/ -/************************************* BOXES **********************************/ -/******************************************************************************/ - -/* HEADER & FOOTER -*******************************************************************************/ - -.logo { float:left; margin:5px 20px 5px 27px; height:43px; } -.header-top { border-bottom:1px solid #5F767F; } - -/* Header right */ -.header-right { padding:10px 25px 0 15px; font-size:.95em; color:#fff; } -.header-right a, .header-right a:hover { color:#fcce77; } -.header-right .separator { color:#999; } -.header-right fieldset { display:inline; padding-left:10px; } -.header-right fieldset input.input-text { width:18em; } -.header-right .super { - float:right; - line-height:1.8em; - margin-bottom:14px; - margin-left:1.3em; - } - -/* Search autocomplete */ -div.autocomplete { - z-index:10000; - position:absolute; - width:250px; - background-color:white; - border:1px solid #888; - margin:0; - padding:0; - } -div.autocomplete ul { margin:0; padding:0; } -div.autocomplete ul li.selected { background-color:#dcebf0; } -div.autocomplete ul li { padding:.5em .7em; min-height:32px; cursor:pointer; text-align:left; color:#2f2f2f; line-height:1.3em; } - -/* Mage suggest */ -/*.mage-suggest { position:relative; display: inline-block; background: #fff; border-radius: 5px; box-shadow: 1px 0 2px #ddd; } -.mage-suggest .input-text { border-radius: 5px; margin: 7px; border: 1px solid #ddd; height: 20px; padding: 3px 25px 3px 10px; line-height: 26px; background: url(../images/bkg_search-magnifier.png) 98% 50% no-repeat; } -.mage-suggest-dropdown { overflow-x: hidden; position: absolute; top: 100%; margin-top:-4px; left: 0; min-width: 100%; background: #fff; border: solid #ddd; border-width: 0 1px 1px; padding: 10px 0; box-sizing: border-box; border-radius: 0 0 5px 5px; box-shadow: 1px 1px 2px #ddd; } -.mage-suggest-dropdown.overflow-y { overflow-y: scroll; } -.mage-suggest-dropdown .ui-menu-item a { display:block; padding: 0 10px; text-decoration: none; font:normal 12px/26px Arial, sans-serif; text-align: left; border-bottom: 1px solid #f2f2f2; color:#2d2d2d; } -.mage-suggest-dropdown .ui-state-active, -.mage-suggest-dropdown .ui-state-focus { background: #f2f2f2; color:#000; }*/ -.mage-suggest-inner {padding: 5px 0;} -.mage-suggest {position: relative;} -.mage-suggest-inner {position: absolute; background: #fff; top:0px; left:0px; border: 1px solid #ddd; border-radius: 5px; box-shadow: 1px 1px 2px #ddd;} -.mage-suggest-inner > input { - height: 22px; - margin: 0 5px; -} -.mage-suggest-dropdown > h2 { - font-size:0.8em; - text-transform: uppercase; - font-family:Arial, Helvetica, sans-serif; - color: #555555; - font-weight: normal; - padding: 0 8px; -} -.mage-suggest-dropdown .ui-menu-item a { display:block; padding: 0 10px; text-decoration: none; font:normal 12px/26px Arial, sans-serif; text-align: left; border-bottom: 1px solid #f2f2f2; color:#2d2d2d; } -.mage-suggest-dropdown .ui-state-active, -.mage-suggest-dropdown .ui-state-focus { background: #f2f2f2; color:#000; } -.mage-suggest-dropdown .ui-corner-all { - border-radius: 0px; -} -.mage-suggest-dropdown .ui-widget-content, .mage-suggest-dropdown .ui-menu .ui-menu-item a, .mage-suggest-dropdown .ui-menu .ui-menu-item a.ui-state-focus { - background: #ffffff; - border: none; - color: #000000; -} -.mage-suggest-dropdown .ui-menu .ui-menu-item a, .mage-suggest-dropdown .ui-menu .ui-menu-item a.ui-state-focus { - border-top: 1px solid #efefef; - margin: 0; - padding: 3px 8px; -} -.mage-suggest-dropdown .ui-menu { - padding: 0px; - width: 100%; -} -.mage-suggest-dropdown .ui-menu .ui-menu-item a.ui-state-focus { - background: #ebebeb; -} -.mage-suggest-dropdown .show-all { - padding: 5px 8px; - color: #555555; - font-family:Arial, Helvetica, sans-serif; - font-size: 0.8em; -} -.mage-suggest-dropdown { - overflow: auto; - max-height: 500px; - z-index: 1; -} -.mage-suggest.category-select .mage-suggest-inner {background: transparent; position: static; border: none; border-radius: 0px; box-shadow: none;} -.mage-suggest.category-select .mage-suggest-choices {background: #fff; border: 1px solid #ddd; border-radius: 5px; box-shadow: none; overflow: hidden;} -.mage-suggest.category-select .mage-suggest-choices li {float: left; margin: 5px 0 5px 7px;} -.mage-suggest.category-select .mage-suggest-search-field input { - background: none repeat scroll 0 0 transparent !important; - border: 0 none; - box-shadow: none; - font-family: sans-serif; - font-size: 100%; - height: 22px; - margin: 1px 0; - outline: 0 none; - padding: 0 5; -} -.mage-suggest.category-select .mage-suggest-dropdown { - position: absolute; - width: 100%; - background: #fff; border: 1px solid #ddd; border-radius: 5px; - margin-top: 2px; -} -.mage-suggest-dropdown .jstree-default.jstree-focused { - background: #ffffff; -} -.mage-suggest-dropdown .jstree li { - margin-left: 18px; -} -.mage-suggest-dropdown .jstree > ul > li { - margin-left: 0px; -} -.mage-suggest-dropdown .jstree a { - padding: 2px 3px; -} -.mage-suggest-dropdown .jstree .jstree-hovered { - border: none; - background: #efefef; -} -.mage-suggest-dropdown .jstree .jstree-clicked { - border: none; - background: #e5e5e5; -} -.mage-suggest-dropdown .category-path { - color: #777777; - margin-left: 7px; - font-size: 11px; -} -.mage-suggest-dropdown .ui-menu { - float: none; -} -.mage-suggest-dropdown .ui-menu .ui-menu-item{ - margin: 0px; -} - -/* Footer */ -.footer .bug-report { float:left; width:35%; text-align:left; } -.footer .legality { float:right; width:35%; min-height:19px; padding-left:22px; text-align:right; } - -/* COLUMNS -********************************************************************************************/ - -.catalog-categories .side-col { width:25em; padding-right:25px; } /* Catalog/Categories */ -.catalog-categories .main-col { padding-left:25px; margin-left:25em; } /* Catalog/Categories */ -.order-summary .side-col { padding-right:25px; } /* Order/Create */ -.order-summary .main-col { padding-left:25px; } /* Order/Create */ - - -/* HEADINGS -********************************************************************************************/ - -/* Content Header */ -.content-header { margin-bottom:18px; -webkit-box-sizing:border-box; -moz-box-sizing:border-box; box-sizing:border-box; border-bottom:4px solid #dfdfdf; padding-bottom:.25em; padding-top: 6px; } -.content-header table { width:100%; } -.content-header h3 { float:left; margin:.3em .5em 0 0; color:#eb5e00; font-size:1.25em; line-height:1.2em; } -.content-header .head h3 { float:none; } -.content-header .button-set { white-space:nowrap; text-align:right; } -.content-header .content-buttons { white-space:nowrap!important; margin:0; } -.content-header td.content-buttons { width:13%;white-space:nowrap!important; margin:0; } -.content-buttons button, -.content-header button, -.filter-actions button { margin:0 0 0 5px; } -.side-col .content-header { border-bottom:0; margin-right:12px; margin-bottom:.6em; } -.catalog-categories .side-col .content-header { margin-right:0; } /* Catalog/Categories */ - -.left-col-block { width:200px; } - -.content-header.fixed { padding:6px 8px; margin-bottom:0; border:0; position:fixed; left:0; top:0; width:100%; border-bottom:solid 1px #988753; z-index:100; z-index:auto\9; background:#fdfaa4; -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=85)"; opacity:.85; z-index: 100; } -.content-header.fixed button { margin-top:3px; } -.content-header.fixed .content-buttons { float:right; } -.content-buttons { margin-bottom:5px; float:right; display:inline; white-space:nowrap; } -.content-header.fixed .form-buttons { padding-right:20px; } -.content-header.fixed h3 { margin: 0 0 0 20px; display:inline; } - - -/* Box Head */ -.box-head { margin-bottom:.6em; text-align:right; } -.box-head h4 { float:left; margin-bottom:0; } - - -/* Icon Head */ /* Headings with icon preceding text*/ -.icon-head { min-height:18px; background-repeat:no-repeat; background-position:0 0; padding-left:22px; } -.head-customer-address-list { background-image:url(../images/fam_house.gif); } -.head-edit-form { background-image:url(../images/fam_page_white.gif); } -.head-customer-view { background-image:url(../images/fam_status_online.gif); padding-left:18px; } -.head-customer, -.head-customer-groups { background-image:url(../images/fam_group.gif); } -.head-user { background-image:url(../images/fam_user.gif); } -.head-user-edit { background-image:url(../images/fam_user_edit.gif); } -.head-user-comment { background-image:url(../images/fam_user_comment.gif); } -.head-comment { background-image:url(../images/fam_comment.gif); } -.head-cart { background-image:url(../images/fam_cart.gif); } -.head-account { background-image:url(../images/fam_account.gif); } -.head-online-visitors { background-image:url(../images/fam_monitor.gif); } -.head-products { background-image:url(../images/fam_package.gif); } -.head-catalog-product { background-image:url(../images/fam_package.gif); } -.head-newsletter-queue { background-image:url(../images/fam_newspaper_go.gif); } -.head-newsletter-list { background-image:url(../images/fam_newspaper.gif); } -.head-newsletter-report { background-image:url(../images/fam_newspaper_error.gif); } -.head-tag, .head-tag-product { background-image:url(../images/fam_tag_orange.gif); } -.head-sales-order, -.head-sales-invoice { background-image:url(../images/fam_folder_table.gif); } -.head-categories { background-image:url(../images/fam_folder_database.gif); padding-left:20px; color:#253033 !important; } -.head-catalog-product-attribute { background-image:url(../images/fam_rainbow.gif); padding-left:24px; } -.head-product-attribute-sets { background-image:url(../images/fam_folder_palette.gif); padding-left:23px; } -.head-tax { background-image:url(../images/fam_money_add.gif); } -.head-cms-page, .head-cms-block { background-image:url(../images/application_view_tile.gif); } -.head-backups-control { background-image:url(../images/fam_server_database.gif); } -.head-money, .head-promo-quote { background-image:url(../images/fam_money.gif); } -.head-shipping-address, -.head-billing-address { background-image:url(../images/fam_house.gif); } -.head-shipping-method { background-image:url(../images/fam_lorry.gif); } -.head-payment-method { background-image:url(../images/fam_creditcards.gif); } -.head-order-date { background-image:url(../images/fam_calendar.gif); } -.head-customer-sales-statistics { background-image:url(../images/fam_money.gif); } -.head-notification { background-image:url(../images/fam_folder_table.gif); } -.head-compilation { background-image:url(../images/fam_package_go.gif); } - - - -/******************************************************************************/ -/********************************* PAGE SPECIFIC ******************************/ -/******************************************************************************/ - - -/* LOGIN -*******************************************************************************/ -#page-login { background:#f8f8f8; text-align:center; } -.login-container { width:581px; margin:170px auto; padding-left:32px; background:url(../images/login_logo.gif) no-repeat; } -.login-form { padding:27px 57px 35px 57px; background:url(../images/login_box_bg.jpg) no-repeat; text-align:left; } -.login-form .input-left { float:left; } -.login-form .input-right { float:right; } -.login-form .input-box input.input-text { width:224px; } -.login-form h2 { font-size:1.7em; font-weight:normal; } -.login-form label { font-weight:bold; } -.login-form .form-buttons { margin:12px 0 0 0; clear:both; text-align:right; } -.login-box .bottom { width:581px; height:5px; background:url(../images/login_box_bottom.jpg) no-repeat; overflow:hidden; } -.login-container .legal { margin:0; background:url(../images/login_box_legal_bg.gif) no-repeat; padding:8px 8px 5px 8px; font-size:.95em; } -.login-form .validation-advice, -.login-form label.mage-error { margin:3px 0 0 0; } -.login-form .forgot-link { margin:0 17px 0 0; text-align:right; } -.login-form .captcha { padding:10px 0 0; } -.login-form .captcha-image { border:1px solid #aaa; margin:1.5em 0 0; position:relative; } -.login-form .captcha-image img { vertical-align:bottom; } -.login-form .captcha-reload { cursor:pointer; position: absolute; top:2px; right:2px; } -.login-form .captcha-reload.refreshing { animation:rotate 1.5s infinite linear; -webkit-animation:rotate 1.5s infinite linear; -moz-animation:rotate 1.5s infinite linear; } - -@-webkit-keyframes rotate { - 0% { -webkit-transform:rotate(0); } - 0% { -webkit-transform:rotate(360deg); } -} -@-moz-keyframes rotate { - 0% { -moz-transform:rotate(0); } - 0% { -moz-transform:rotate(360deg); } -} -@keyframes rotate { - 0% { transform:rotate(0); } - 0% { transform:rotate(360deg); } -} - - -/* DASHBOARD -*******************************************************************************/ -.dashboard-container { border:1px solid #ccc; } -.dashboard-container .switcher { margin-bottom:0; border:0; } - -/* STORE MANAGEMENT -*******************************************************************************/ -.adminhtml-system-store-deletestore .content-footer .content-buttons, -.adminhtml-system-store-deletegroup .content-footer .content-buttons, -.adminhtml-system-store-deletewebsite .content-footer .content-buttons { float:left; } - - -/* SALES -*******************************************************************************/ - -/* Disabled block */ -.overlay span { display:block; width:100%; text-align:center; position:absolute; top:50%; margin:-5px 0 0; color:#000; } - -/* Prices */ -.price { white-space:nowrap !important; } - -/* Incl tax (for order tables) */ -.price-incl-tax { display:block; } -.price-incl-tax .label { display:block; white-space:nowrap; } -.price-incl-tax .price { /*display:block;*/ font-weight:bold; } - -/* Excl tax (for order tables) */ -.price-excl-tax { display:block; } -.price-excl-tax .label { display:block; white-space:nowrap; } -.price-excl-tax .price { /*display:block;*/ font-weight:bold; } - -/* Orders / Invoices / Shipments / Credit Memos Table */ -.order-tables td h5.title { font-size:1em; font-weight:bold; } -.order-tables td .option-label { font-weight:bold; font-style:italic; } -.order-tables td .option-value { padding-left:10px; } -.order-tables td .qty-table { border:0 !important; width:100% } -.order-tables td .qty-table td { border:0 !important; padding:0 4px !important; } - -dl.item-options dt { font-weight:bold; font-style:italic; } -dl.item-options dd { padding-left:10px; } - -ul.item-options li { padding-left:.7em; } - - -/* Create Order */ -.page-create-order .side-col { width:260px; background:none; padding:0; } -.page-create-order .main-col { padding-left:28px; } -.page-create-order .switcher { margin-bottom:25px; } -.create-order-sidebar-container { border:1px solid #d6d6d6; background:#fafafa; } -.create-order-sidebar-block .content { margin:0 !important; padding:4px 6px; } -.create-order-sidebar-block .head { border-top:1px solid #ddd; background:#ececec; padding:2px 6px 1px; font-size:.9em; text-align:right; } -.create-order-sidebar-block .head h5 { float:left; margin:0; color:#2c464f; text-align:left; } -.create-order-sidebar-block .content table td, -.create-order-sidebar-block table th { padding:0 3px 0 0; } -.create-order-sidebar-block select { width:170px; } -.create-order-sidebar-block ul { margin-left:20px; } -.order-choose-address { margin:0 0 10px 0;padding:8px 15px;background:#e7efef; } /*Address Selector */ -.order-save-in-address-book { margin:0 0 0 0;padding:8px 15px;background:#e7efef; } /* Save in Address Book Checkbox */ -.entry-edit .content .form-list { width:100%; } - -.entry-edit .order-address td.label label { width:100px; } -.entry-edit .order-address input.input-text, -.entry-edit .order-address .textarea { width:95% !important; } -.entry-edit .order-address .select { width:96.5%; } -.entry-edit .order-address .validate-vat { text-align:right; padding:10px 0 0; width:96%; } -.order-search-items .entry-edit .grid { height:610px; overflow:auto; } -.order-search-items .entry-edit .grid table { width:99.9%; } -/* .create-order-totals { background:url(../images/bg_create_order_totals.gif) repeat-y 50% 0 !important; } */ - -/* Product Configuration Popup */ -#popup-window-mask, -.popup-window-mask { background:url(../images/bg_window_mask.png) repeat 0 0; background:rgba(239, 239, 239, 0.5); position:absolute; top:0; right:0; bottom:0; left:0; width:100%; height:100%; z-index:399; } -.product-configure-popup { background:#fafafa; border:1px solid #d6d6d6; left:50%; margin:0 0 0 -271px; position:fixed; top:50%; width:540px; z-index:400; } -.product-configure-popup .validation-advice, -.product-configure-popup label.mage-error { margin-left:0; } -#product_composite_configure_messages { margin-left:0 !important; padding:10px 15px; } -.product-configure-popup .content { max-height:400px; overflow:auto; } -.product-configure-popup .content .grid { padding:0; } -.product-configure-popup .content .grid table { border-bottom:1px solid #CBD3D4; } -.product-configure-popup .product-options { border-bottom:1px solid #e7e7e7; margin:0 0 15px; padding:0 0 12px; } -.product-configure-popup .product-options .required { color:#333 !important; font-weight:normal !important; } -.product-configure-popup .product-options .required em { color:#d40707; } -.product-configure-popup .last-fieldset .product-options { border:0 none; margin-bottom:0; padding-bottom:0; } -.product-configure-popup .buttons-set { margin:0; padding:10px; } -.product-configure-popup .buttons-set button { margin:0 0 0 5px; } - -/* Gift Card Product */ -.giftcard-form .availability { font-weight:bold; margin-bottom:1em; } -.giftcard-form .in-stock { color:#1b6800; } -.giftcard-form .out-of-stock { color:#cf3a00; } -.giftcard-form .price-box { margin:1em 0; } -.giftcard-form label { float:left; width:25%; } - -.giftcard-amount-form { margin:0 0 10px; } -.giftcard-amount-form li { overflow:hidden; width:100%; } -.giftcard-amount-form .field { overflow:hidden; margin-bottom:10px; width:100%; } -.giftcard-amount-form .form-list .input-text { width:70px; } -.giftcard-amount-form .form-list select { width:150px; } -.giftcard-amount-form .form-list .input-box { float:left; width:75%; } -.giftcard-amount-form .form-list .input-box .v-fix { white-space:nowrap; } -.giftcard-amount-form .form-list .input-box p.notice { margin:5px 0 0; font-size:11px; white-space:nowrap; } -.giftcard-amount-form .form-list .input-box p.notice span { display:block; margin-right:5px; } - -.giftcard-send-form .field { overflow:hidden; margin-bottom:10px; width:100%; } -.giftcard-send-form .field .input-text { width:98%; } -.giftcard-send-form .form-list .input-box { float:left; width:75%; } -.giftcard-send-form .form-list textarea { height:100px; width:98%; } - -/* Product Options */ -.product-options { margin:10px 0 0; } -.product-options dt label { font-weight:bold; font-size:12px; } -.product-options dt .qty-holder { float:right; } -.product-options dt .qty-holder label { vertical-align:middle; } -.product-options dt .qty-disabled { background:none; border:0; padding:3px; color:#000; } -.product-options dd { margin:5px 0 15px; padding:0 0 12px; border-bottom:1px solid #e7e7e7; } -.product-options dd.last { border-bottom:0; margin-bottom:0; padding-bottom:0; } -.product-options dd .input-box { display:block; } -.product-options dd input.input-text { width:98%; } -.product-options dd input.datetime-picker { width:150px; } -.product-options dd .time-picker { display:-moz-inline-box; display:inline-block; padding:2px 0; vertical-align:middle; } -.product-options dd .time-picker select { vertical-align:middle; } -.product-options dd textarea { width:98%; height:8em; } -.product-options dd select { width:100%; } -.product-options .options-list {} -.product-options .options-list li { vertical-align:middle; margin:0; padding:2px 0; line-height:1.315; } -.product-options .options-list input.radio { float:left; margin:2px -18px 0 0; } -.product-options .options-list input.checkbox { float:left; margin:2px -20px 0 0; } -.product-options .options-list .label { display:block; margin-left:20px; } -.product-options li { margin:3px 0; } - -/* Wishlist Bundle Product Options */ -.bundle-product-options { padding:5px 0 0 13px; } -.bundle-product-options dl { padding:5px 0 0 15px; } -.bundle-product-options dt { color:#111; } -.bundle-product-options dd { color:#5b5b5b; margin-bottom:10px; } - -/* Order Totals */ -.order-totals { margin-left:auto; border:1px solid #d7c699 !important; padding:12px 0; background:#fcfac9; text-align:right; } -.order-totals table { border:none; background:none; margin-left:auto; } -.order-totals table td { padding:3px 20px 3px 10px; } -.order-totals table td.label { white-space:normal; padding:3px 10px 3px 20px; } -.order-totals table td.last { padding:2px 6px; } -.order-totals-bottom { padding:0 20px; } -.order-totals table .validation-advice, -.order-totals table label.mage-error { text-align:right; white-space:nowrap; background-position:100% 1px; padding-right:14px; padding-left:0; } -.grand-total, .grand_total { font-size:1.2em; font-weight:bold; color:#eb4d00 !important; } - -/* Shopping cart total summary row expandable to details */ -.summary-total { cursor:pointer; } -.summary-total td { padding-top:5px !important; padding-bottom:5px !important; } -.summary-total .summary-collapse { float:right; padding-left:20px; background:url(../images/bg_collapse.gif) 0 4px no-repeat; text-align:right; cursor:pointer; } -.show-details .summary-collapse { background-position:0 -52px; } -.show-details td { border-top:1px solid #eae1b2; } -.summary-details td { font-size:11px; background-color:#fdfcdf; } -.summary-details-first td { border-top:1px solid #eae1b2; } - -/* Order Constants */ -.payment-methods dt { margin-bottom:3px; } -.payment-methods dd { margin-left:20px; } -.payment-methods .validation-advice, -.payment-methods label.mage-error { margin-left:2px; } - -/* Cards List */ -.cards-list .offset { margin-left:10px; } -.cards-list .info-table td { padding:2px 7px 2px 0; text-align:left; vertical-align:top; } - -.release-amounts { margin:0.5em 0; } - -/* Centinel */ -.centinel .authentication { background:#fff; } -.centinel .authentication iframe { width:99%; height:400px; background:transparent !important; margin:0 0 7px !important; padding:0 !important; border:1px solid #ddd !important; } - -/* Gift Messages */ -.giftmessage-order-create .entire-order, -.giftmessage-order-create .each-order-item { background-color:#eee; padding:6px 14px; height:275px; } -.giftmessage-order-create .entire-order .entry-edit, -.giftmessage-order-create .each-order-item .scroll { height:250px; overflow:auto; } -.giftmessage-order-create .single { width:100%; float:left; padding:1.2em 1.5em; } -.giftmessage-order-create h5 { font-size:12px; font-weight:normal; line-height:1.5; margin-bottom:10px; } -.giftmessage-order-create h6 { font-size:11px; font-weight:normal; line-height:1.55; background-color:#cfcfcf; margin-bottom:10px; padding:2px 6px; width:95%; } -.giftmessage-order-create .fieldset { padding:0; } -.giftmessage-order-create .form-list { width:100%; } -.giftmessage-order-create .form-list td.label label { width:100px; } -.giftmessage-order-create .form-list td.value input.input-text, -.giftmessage-order-create .form-list td.value textarea { width:95%; } - -.giftmessage-single-item { padding:0 !important; } -.giftmessage-single-item .item-container { cursor:auto; } -.giftmessage-single-item .item-text { padding:2px 4px; } -.giftmessage-single-item .gift-form { margin-top:3px; background:#f7f6f4 url(../images/gift-message-grid-column-bg.gif) 0 0 repeat-x; } -.giftmessage-single-item .gift-form .entry-edit fieldset { border:none !important; margin-bottom:0; background:none !important; padding:15px; } -.giftmessage-single-item .gift-form .entry-edit fieldset .last { margin-bottom:0; } -.giftmessage-single-item .gift-form .entry-edit input.input-text { width:75% !important; } -.giftmessage-single-item .gift-form .entry-edit textarea { width:96% !important; } -.giftmessage-single-item .action-link-holder {} -.giftmessage-single-item .action-link { padding-right:10px; background:url(../images/gift-message-expand.gif) 100% 50% no-repeat; cursor:pointer; } -.giftmessage-single-item .open { background:url(../images/gift-message-collapse.gif) 100% 50% no-repeat; } - -.giftmessage-whole-order-container .entry-edit input.input-text { width:280px !important; } -.giftmessage-whole-order-container .entry-edit textarea { width:99% !important; padding:2px 3px; } -.giftmessage-whole-order-container .entry-edit label { width:121px; } - -/* PayPal */ -ul.tabs a.paypal-section, -ul.tabs a.paypal-section:hover { background:url(../images/tabs_span_bg.gif) repeat-x 0 100%; border-bottom:none; padding:0.5em 0.5em 0.28em 1.5em; } - -/* Packaging for Shipping Popup */ -#popup-window-mask, -.popup-window-mask { background:url(../images/bg_window_mask.png) repeat 0 0; background:rgba(239, 239, 239, 0.5); position:absolute; top:0; right:0; bottom:0; left:0; width:100%; height:100%; z-index:399; } -.packaging-window, -.packed-window { background:#fafafa; border:1px solid #d6d6d6; left:50%; margin:-200px 0 0 -471px; position:fixed; top:50%; width:1100px; z-index:400; -webkit-box-shadow: 0px 3px 5px #ccc; -moz-box-shadow:0px 3px 5px #ccc; box-shadow:0px 3px 5px #ccc; z-index:400; } -.packaging-window .entry-edit-head { padding:3px 5px; } -.packaging-window .entry-edit-head button { float:right; } -.packaging-window .messages { border:1px solid #f16048; color:#df280a; background:#faebe7 url(../images/error_msg_icon.gif) no-repeat 10px 10px; font-weight:bold; margin-bottom:10px; padding:10px 10px 10px 35px; } -.packaging-window .validation-failed { background:#fef0eD; border:1px dashed #D6340E; } -.packaging-window .packaging-content { overflow:auto; height:400px; height:auto !important; max-height:400px; margin:0 0 10px; padding:10px 10px 0; } -.packaging-window .package-block { background:#f6f6f6; border:2px solid #d4d4d4; margin:0 0 10px; padding:10px; } -.packaging-window .package-options { width:100%; border-top:1px solid #ccc; padding:10px 0 0; margin:3px 0 0; } -.packaging-window .package-options td { vertical-align:middle; } -.packaging-window .package-options select { width:130px; } -.packaging-window .package-options .input-text { width:50px; } -.packaging-window .package_prapare { margin-bottom:15px; } -.packaging-window .package-options .customs-value { width:80px; } -.packaging-window .package-options .options-weight { width:75px; } -.packaging-window .package-options .options-units-weight { width:45px; } -.packaging-window .package-options .options-units-dimensions { width:45px; } -.packaging-window .package-options .options-content-type { width:120px; } -.packaging-window .package-options input[type=text].disabled { background:#eee; } -.packaging-window .package-options select.disabled { background:#eee; } -.packaging-window .package-options-contents { border-top:0; } -.packaging-window .package-add-products { border-top:1px solid #ccc; padding:10px 0 0; margin:10px 0 0; } -.packaging-window .package-add-products .grid { padding:0; } -.packaging-window .package-add-products .grid button { vertical-align:middle; } -.packaging-window .package-number {font-weight: bold;} -.packaging-window .package-number span {margin-left: 5px;} - -.packed-window .entry-edit-head { padding:3px 5px; } -.packed-window .packed-content { padding:10px 10px 0; overflow:auto; max-height:400px; } -.packed-window .package { background:#fefefe; border:7px solid #d5d5d5; margin-bottom:10px; padding:10px; } -.packed-window .package h4 { background:#fefefe; border:solid #ccc; border-width:0 0 1px 1px; float:right; color:#222; font-size:12px; margin:-10px -10px 0 0; padding:5px 10px; position:relative; z-index:100; } -.packed-window .package strong{ display:block; padding:0 0 3px; } -.packed-window .package .grid { padding:0; } -.packed-window .package-info { background:#f3f3f3; border-bottom:1px solid #ccc; margin:-10px -10px 10px; padding:5px 10px; position:relative; } -.packed-window .package-options { width:60%; } -.packed-window .package-options td, -.packed-window .package-options th { padding:1px 0; } -.packed-window .buttons-set { padding-right:5px; } - - -/* CATALOG -*******************************************************************************/ - -/* Category */ -.categories-side-col .content-header { padding:0; } -.categories-side-col .content-header h3 { float:none; } -.categories-side-col .content-header button { margin:5px 0 0; } -.categories-side-col .switcher { margin:10px 20px 0 0; } -.categories-side-col .tree-actions { text-align:center; margin:10px 20px 10px 0; } -.categories-side-col .tree-holder { margin-right:20px; } - -.no-active-category a span { color:#aaa !important; } - -#tree-div { overflow:auto!important; padding-bottom:15px; width:200px; } - -.x-tree-node { margin:0 !important; } -.x-tree-node .leaf .x-tree-node-icon { background-image:url(../images/fam_leaf.png); } -.x-tree-node .system-leaf .x-tree-node-icon { background-image:url(../images/fam_application_form_delete.png); } -.x-tree-node-ct { overflow:hidden; } - -/* Product - Websites */ -.website-name .checkbox { vertical-align:top; margin-top:2px; } -.webiste-groups { padding:10px 20px; } -.group-stores { padding:2px 10px; } - -/* Products - Bundles */ -.bundle-option-row table tbody td { white-space:nowrap; } -.bundle-option-row table tbody td label { float:left; } -.bundle-option-row input.option-label { width:50% !important; } -.bundle-option-row input.option-position{ width:70px !important; } -.catalog-categories .side-col { width:240px; } - -/* Products - Tier Price */ -.tier-price-input { margin-bottom:8px; } -.tier-price-input input.price { width:80px; margin-right:10px; } -.tier-price-input input.qty { width:80px; } -.tier-price-input .tier-container { position:relative; clear:both; } -.tier-price-input .tier-container div { float:left; } -.tier-price-input .tier-container label { width:30px; margin:0; padding:0; } -.tier-price-input .validation-advice, -.tier-price-input label.mage-error { margin:0; height:25px; } -.tier-price-input .custgroup-div select { width:auto; padding:0; } -.tier-price-input .qty-div { padding-left:20px; } -.tier-price-input .price-div { padding-left:20px; } -.tier-price-input .price-div .validation-advice, -.tier-price-input .price-div label.mage-error { margin:0; } -.btn-remove-tier-group { float:right; right:24px; top:5px; } - -/* Product - Gallery */ -.image-preview { position:absolute; cursor:pointer; } - -/* Attributes */ -.edit-attribute-set .form-list td.label { width:105px; } -.edit-attribute-set .form-list td.label label { width:105px; } -.edit-attribute-set .entry-edit fieldset input.input-text { width:200px; } -/* Review & Ratings */ -.ratings { margin:0; } -.rating-box { - float:left; - position:relative; - width:69px; - height:16px; - margin:0 5px 3px 0; - background:url(../images/product_rating_blank_star.gif) repeat-x; - } -.rating-box .rating { - position:absolute; - top:0; - left:0; - height:16px; - background:url(../images/product_rating_full_star.gif) repeat-x; - } -.field-row .ratings { width:120px; float:left; clear:right; } -.field-row .ratings-container { width:250px; float:left; } -.product-review-box { width:450px; } -.product-review-box table { width:100%; } -.product-review-box td, -.product-review-box th { text-align:center; padding-right:5px; } -.product-review-box td.label { width:100px; text-align:left; } - - -/* Price Rules */ -.rule-tree ul { padding-left:16px !important; border-left:dotted 1px #888; } -.rule-tree .x-tree ul { padding-left:0 !important; border-left:none !important; } -.rule-param .label { font-weight:bold; color:black; } -.rule-param .label:hover { font-weight:bold; color:blue; } -.rule-param .label-disabled { color:black; cursor:default; text-decoration:none; } -.rule-param .label-disabled:hover { color:black;} -.rule-param .element { display:none; } -.rule-param input, -.rule-param select { width:auto !important; min-width:170px; } -.rule-param select.multiselect { vertical-align:top; } -.rule-param-edit .label { display:none; } -.rule-param-edit .element { display:inline; } -.rule-param-add { font-weight:normal; color:green; text-decoration:none; } -.rule-param-add:hover { font-weight:normal; color:blue; text-decoration:none; } -.rule-param-apply { font-weight:normal; color:green; text-decoration:none; } -.rule-param-apply:hover { font-weight:normal; color:blue; text-decoration:none; } -.rule-param-remove { font-weight:normal; color:red; text-decoration:none; } -.rule-param-remove:hover { font-weight:normal; color:blue; text-decoration:none; } -.rule-chooser { border:solid 1px #CCC; margin:5px; padding:5px; display:none; } -.rule-param-wait { padding-left:20px; background-image:url(../images/rule-ajax-loader.gif); background-repeat:no-repeat; background-position:0 50%; } - -/* Product Customer Defined options */ -.custom-options .box {padding:0 1.5em; } -.custom-options .option-box {border:1px solid #cddddd; padding:1em; background:#e7efef; margin:1.5em 0; } - -.custom-options .option-header {border:0; width:100%; background:#e7efef; border-bottom:1em solid #e7efef; } -.custom-options .option-header .input-text, -.custom-options .option-header .select {width:95%; } -.custom-options .option-header th {padding:2px; } -.custom-options .option-header td {padding:5px 2px; } - -.custom-options .opt-title {width:175px; } -.custom-options .opt-type {width:150px; } -.custom-options .opt-req {width:80px; } -.custom-options .opt-order {width:60px; } - -.custom-options .option-box .border {width:615px; } - -.custom-options th {white-space:nowrap; } -.custom-options .type-title {width:auto; } -.custom-options .type-price {width:60px; } -.custom-options .type-type {width:80px; } -.custom-options .type-uqty {width:100px; } -.custom-options .type-sku {width:150px; } -.custom-options .type-order {width:60px; } -.custom-options .type-butt {width:33px; } -.custom-options .type-last {width:auto; } - -.custom-options .option-box .border input.input-text, -.custom-options .option-box .border select.select { width:90% !important; } - -.custom-options .option-box .border .type-last input.input-text { width:60px !important; } -.custom-options .option-box .border input.type-sku {width:150px !important; } - -/* Bundle product */ -.bundle .option-box {padding-bottom:2em; } -.bundle .option-box .border {width:100%; border-bottom:0; } -.bundle .option-box .border td {border-bottom:1px solid #dce5e6!important; } -.bundle .option-title {padding:0 0 10px; border-bottom:1px solid #cddddd; } -.bundle .option-title button {float:right; } -.bundle .option-title label {font-weight:bold; line-height:21px; padding-right:1em; float:left; } -.bundle .option-title .input-text {float:left; width:260px; vertical-align:middle; } -.bundle .option-header {clear:both; margin-top:5px; } - -.bundle .border .last {width:33px; } - -/* Downloadable Product */ -.files { width:195px; } -.files input.input-text { float:left; width:134px !important; } -.files-wide { width:355px; } -.files-wide input.input-text { float:left; width:294px !important; } -.files label, -.files-wide label { float:left; width:55px; } -.files .row, -.files-wide .row { margin-bottom:5px; } -/* Files Uploader */ -.files .flex, -.files-wide .flex { float:right !important; position:static !important; } -.files .uploader, -.files-wide .uploader { float:left; overflow:hidden; } -.files .uploader { width:100px; } -.files-wide .uploader { width:260px; } -.files .uploader .file-row-info, -.files-wide .uploader .file-row-info, -.files .uploader .file-row-narrow, -.files-wide .uploader .file-row-narrow { margin:0 !important; } -.progressbar { height: 20px; } -.upload-progress { background-color: #fcffac; } -.upload-success { background-color: #E4FFB1; } -.upload-failure { background-color: #FF7E77; } - -td.input-price { white-space:nowrap; } -td.input-price .validation-advice, -td.input-price label.mage-error { white-space:normal; } -td.input-price input.input-text { width:4em !important; } - -input.sort { width:4em !important; } -input.downloads { width:6.5em !important; } - -/* CUSTOMER -*******************************************************************************/ - -/* Addresses */ -.address-list { width:28em; padding-right:22px; } -.address-list address { width:100%; overflow:hidden; } -.address-list .btn-edit-address, -.address-list .btn-remove-address { position:absolute; top:8px; } -.address-list .btn-edit-address { right:8px; } -.address-list .btn-remove-address { right:27px; } -.address-list li { position:relative; padding:12px 14px; cursor:pointer; border-top:1px solid #e6e6e6; background:url(../images/address_list_li.gif) repeat; } -.address-list li.on { background:#e7efef; } -.address-list li.over { background-color:#fcf5dd; } -.address-list li table { width:100%; } -.delete-address { float:right; margin:0 0 10px 10px; } -.address-type .address-type-line { display:block; margin:2px 0; } -.address-type .address-type-line input { margin-right:3px; } - - - -/* NEWSLETTER -*******************************************************************************/ -.template-preview { width:100%; height:200px; background-color:#fff; } - - -/* SYSTEM -*******************************************************************************/ -.stores-tree td { padding-top:3px !important; padding-bottom:3px !important; } -.stores-tree td.label label { display:inline; width:auto; padding-right:10px; } -.stores-tree td.website-label label { font-weight:bold; } -.stores-tree td.store-group-label label { font-weight:bold; padding-left:15px; } -.stores-tree td.store-label label { padding-left:30px; } -.stores-tree .buttons-set { margin:10px 0; } - -.log-details { border:1px solid #d6d6d6; padding:15px; background:#fafafa; margin:0 0 15px; } -.log-details table { width:100%; } -.log-details table th, -.log-details table td { padding-top:4px; padding-bottom:4px; vertical-align:middle; } -.log-details table th { font-weight:bold; padding-right:30px; white-space:nowrap; } - -.sync-indicator { margin-left:5px; margin-right:5px; position:absolute; white-space:nowrap; } -.sync-indicator img, -.sync-indicator span { vertical-align:middle; } - -/* Configuration */ -/*fieldset.config td { padding-top:5px; padding-bottom:5px; } -fieldset.config input.input-text { width:250px; } -fieldset.config select.select { width:256px; }*/ -div.tree_item, -div.tree_item_last { background-position:left; background-repeat:no-repeat; padding-left:20px; } -div.tree_item { background-image:url(../images/tree_icons/join.gif); } -div.tree_item_last { background-image:url(../images/tree_icons/joinbottom.gif); } -div.tree_line { position:absolute; left:0; background-image:url(../images/tree_icons/line.gif); } -img.attribute-global { width:16px; height:16px; vertical-align:middle; } - -ul.config-tabs { border-top:none; } -ul.config-tabs dt { - border-top:1px solid #849ba3; - background:#d1dedf url(../images/config_tab_dt_bg.gif) no-repeat 0 50%; - padding:2px 0 2px 1.5em; - font-weight:bold; - text-transform:uppercase; - color:#306375; - } -ul.config-tabs dl { margin-bottom:16px; } -ul.config-tabs a.last span { background-image:none; } - -.inline-table { border:0 !important; } -.inline-table td { border:0 !important; padding:0 5px 5px !important; } - -.system-fieldset-sub-head td { padding:20px 5px 5px 5px; } -.system-fieldset-sub-head h4 { border-bottom:1px solid #ccc; margin:0; } - -.system-tooltip-wrap { float:left; } -.system-tooltip-box { border-left:1px solid #ccc; float:left; line-height:16px; margin-left:5px; padding-left:5px; width:180px; } -.system-tooltip-small { clear:both; border:none; margin:0; padding:5px; width:100%; } - -.comment { padding:5px; } - -/* Import/export */ - -#profile-generator select { width:207px; } -#profile-generator input.input-text { width:200px; } -.field-row .with-tip {display:block; margin-left:150px; } -.field-row .with-tip input {float:none; } -.field-row .with-tip small {display:block;padding-top:2px; } - -#profile-generator .field-row button.delete {vertical-align:middle; } -#profile-generator fieldset button.add {display:inline; margin:0; } - -/** Product mass attribute update **/ - -.attribute-change-checkbox { white-space:nowrap; clear:none; margin-left:5px; } - -.attribute-change-checkbox label{ margin-left:5px; float:none !important; } - -/* PopUp Calendar */ -.calendar { z-index:105; } - -/** Order view **/ -.order-history { width:70%; margin-right:27px; } - -ul.super-product-attributes { padding-left:15px; } - -/** Media Library **/ -.uploader .file-row { width:600px; padding:0.5em 0.6em; margin:0.5em 0.6em; border:1px solid #ccc; background-color:#f9f9f9; /*vertical-align:middle;*/ } -.uploader .file-row-narrow { width: auto; margin: 0 0 2px 40px; } -.uploader .file-row .file-info { float:left; } -/*.uploader .file-row .file-info-name { with: 80%; overflow: hidden; } -.uploader .file-row .file-info-size { width: 20%; }*/ -.uploader .file-row-info { margin: 0 0 0 10px; } -.uploader .file-row-info .file-info-name { font-weight:bold; } -.uploader .file-row .progress-text { float:right; font-weight:bold; } -.uploader .file-row .delete-button { float:right; } -.uploader .buttons { float:left; } -.uploader .flex { float:right; } -.uploader .progress { border:1px solid #f0e6b7; background-color:#feffcc; } -.uploader .error { border:1px solid #aa1717; background-color:#ffe6de; } -.uploader .error .progress-text { padding-right:10px; } -.uploader .complete { border:1px solid #90c898; background-color:#e5ffed; } - -.grid tr.read { background:#fff !important; } -.grid tr.unread { background:#fcf6f5 !important; } -.grid-row-title { color:#444; font-weight:bold; } - -.grid-severity-critical, -.grid-severity-critical span, -.grid-severity-major, -.grid-severity-major span, -.grid-severity-minor, -.grid-severity-minor span, -.grid-severity-notice, -.grid-severity-notice span { display:block; height:16px; background-image:url(../images/bg_notifications.gif); background-repeat:no-repeat; font:bold 10px/16px Arial, Helvetica, sans-serif; text-transform:uppercase; text-align:center; padding:0 0 0 7px; margin:1px 0; white-space:nowrap; color:#fff; } -.grid-severity-critical { background-position:0 0; } -.grid-severity-critical span { background-position:100% 0; padding:0 7px 0 0; } -.grid-severity-major { background-position:0 -16px; } -.grid-severity-major span { background-position:100% -16px; padding:0 7px 0 0; } -.grid-severity-minor { background-position:0 -32px; } -.grid-severity-minor span { background-position:100% -32px; padding:0 7px 0 0; } -.grid-severity-notice { background-position:0 -48px; } -.grid-severity-notice span { background-position:100% -48px; padding:0 7px 0 0; } - -.super-attributes { margin:0; padding:0; } -.super-attributes li.attribute { border:1px solid #dfdfdf; background-color:#ededed; margin:1px 0; } -.super-attributes li.attribute ul.attribute-values { margin:0; padding:0; } -.super-attributes li.attribute div.values-container { width:80%; margin-top:2px; margin-bottom:2px; } -.super-attributes li.attribute-value { display:block; margin:1px 0; } -.super-attributes li.attribute-value .validation-advice, -.super-attributes li.attribute-value label.mage-error { margin:0; white-space:normal; } -.super-attributes li.attribute-value .attribute-value-label-container { width:200px; } - -.super-attributes div.attribute-name-container, -.super-attributes li.attribute div.values-container, -.configurable-simple-product div.values-container, -.super-attributes li.attribute-value .attribute-values-container, -.configurable-simple-product .attribute-values-container, -.super-attributes li.attribute-value .attribute-values-container-main, -.configurable-simple-product .attribute-values-container-main, -.super-attributes li.attribute-value .attribute-value-label-container { display:block; } - -.super-attributes li.attribute-value .attribute-price, -.configurable-simple-product .attribute-price { width:70px !important; } - -.super-attributes li.attribute-value .attribute-price-type, -.configurable-simple-product .attribute-price-type { width:70px !important; } - -.super-attributes div.attribute-name-container { - cursor:move; - background-image:url(../images/arrow_sort_move.gif); - background-repeat:no-repeat; - background-position:4px 50%; - font-weight:bold; - padding-left:15px; - margin-top:2px; - margin-bottom:2px; - } - - -/** Product Gallery Image Previews **/ -.preview .cell-image .place-holder { border:1px solid #AEAEAE; width:100px; height:100px; text-align:center; } -.preview .cell-image .place-holder span { margin-top:30px;display:block; } -.preview .cell-position input.input-text { width:90% !important; } -.fieldset-wide .data .preview .cell-position input.input-text { width:90% !important; } - -.tier .data { width:465px; } -.tier .data select { width:99%; } -.tier .data input.qty { width:20px !important; } - -.weee .data { width:465px; } -.weee .data select { width:99%; } - -.giftcard-amounts .data { width:465px; } -.giftcard-amounts .data select { width:99%; } - -/* Links */ -.link-feed { background:url(../images/icon_feed.gif) no-repeat left 2px; padding-left:18px; } - -#page-help-link { - line-height:26px; - padding-left:20px; - color:#ebebff; - background:url(../images/fam_help.gif) no-repeat 0 50%; - } -#page-help-link:link, #page-help-link:visited { text-decoration:none; } -#page-help-link:hover { color:white; } - -/* Magento Connect Package Extensions */ -.table-editable { border:solid 1px #ccc; background:#fafafa; padding:5px; margin-bottom:5px; } -.table-editable th { border-bottom:solid 1px #ccc; text-align:center; } -.table-editable th, .table-editable td { padding:1px 3px; vertical-align:middle; } -.table-editable select { height:19px; } - - -/* CMS -*******************************************************************************/ -.breadcrumbs { margin: 0 0 10px; } -.breadcrumbs li { display:inline; } -.breadcrumbs li span { margin:0 2px; } - -/*table.mceLayout { width:100% !important; }*/ - -.cms-revision-preview { height:100%; } -.cms-revision-preview iframe { width:100%; height:91%; border:0; } - -/* CMS Widgets Instance */ -.options-box .option-box { border:1px solid #cddddd; padding:1em; background:#e7efef; margin:1.5em 0; } -.options-box .option-title { padding:0 0 10px; border-bottom:1px solid #cddddd; } -.options-box .option-title button { float:right; } -.options-box .option-title label {font-weight:bold; line-height:21px; padding-right:1em; float:left; } -.options-box .option-title select { float:left; width:260px; vertical-align:middle; } -.options-box .option-header { margin:5px 0 0; width:100%; border:0; background:#e7efef; border-bottom:1em solid #e7efef; } -.options-box .option-header .input-text, -.options-box .option-header select { width:95%; } -.options-box .option-header th { padding:2px; } -.options-box .option-header td { padding:5px 2px; } -.options-box .option-header .tree { margin:5px 0 0; } - -/* CMS Popup Window */ -.popup-window .magento_message { padding:0 18px; } -.popup-window .content-header { font-family:Arial, Helvetica, sans-serif; padding-top:9px; } -.popup-window .content-header h3 { color:#eb5e00; padding:0; } -.popup-window { height:auto !important; } -.popup-window .grid { position:static; } -.popup-window .table_window td.value2 .grid td, -.popup-window .table_window td.value2 .grid th { padding:2px 4px !important; } -.popup-window .table_window td.value2 .grid tr.headings th { padding:1px 4px 2px !important; } -.popup-window .columns { background-image:none; } -.popup-window .middle { background:none; padding:10px 0; } - -.popup-window .uploader .file-row { margin:16px 0; width:auto; } -.popup-window #contents-uploader { margin-bottom:10px; background:#d7e5ef; padding:5px 10px; } -.popup-window #contents-uploader .flex { font-size:0; line-height:0; height:20px; } -.popup-window #contents { margin-left:-3px; height:400px; overflow:auto; position:relative; } -.popup-window #contents .filecnt { float:left; border:1px solid #ccc; cursor:pointer; padding:3px; display:inline; margin:0 0 15px 4px; overflow:hidden; position:relative; width:100px; } -.popup-window #contents .selected { border:1px solid #f1af73; background:#f0f0f0; cursor:default; } -.popup-window #contents .nm { text-align:center; } -.popup-window #contents .nm img { vertical-align:bottom; } - -/* Widget Insert */ -#widget_window .magento_content { height:auto !important; min-height:450px; } - -/* CMS Widget Chooser */ -#widget-chooser .columns { background-image:none; } -#widget-chooser .magento_message { padding:10px 18px; } -#widget-chooser .grid th, -#widget-chooser .grid td { padding:2px 4px 2px 4px; } -#widget-chooser .grid tr.filter th { padding-top:5px; padding-bottom:5px; } -#widget-chooser .side-col { padding-top:0.5em; } -#widget-chooser .main-col { padding-right:4px; } - -/* CMS Variables Popup */ -#variables-chooser .magento_message { padding:10px 18px; } - -/* Product description WYSIWYG editor */ -#catalog-wysiwyg-editor .buttons-set { margin-top:10px; } -#catalog-wysiwyg-editor .magento_content { height:auto !important; overflow:hidden; } -#catalog-wysiwyg-editor .textarea { width:930px !important; } -#catalog-wysiwyg-editor .magento_message { padding:0 7px; } -#catalog-wysiwyg-editor .magento_buttons { padding-left:7px; padding-right:7px; } - -/* Backups */ -.backup-dialog { background-color:#6f8992; background:rgba(111, 137, 146, 0.5); cursor:default; left:50%; margin:0 0 0 -271px; position:fixed; top:50%; width:470px; padding:8px; z-index:400; -moz-box-shadow:0 0 100px #ccc; -webkit-box-shadow:0 0 100px #ccc; box-shadow:0 0 100px #ccc; } -.backup-dialog .entry-edit { border:1px solid #6f8992; } -.backup-dialog .content { background:#fff; border-bottom:1px solid #ccc; max-height:400px; overflow:auto; } -.backup-dialog .question {margin-top: 15px;} -.backup-dialog .buttons-set { border-top:1px solid #ddd; background:#eee; margin:0; overflow:hidden; padding:7px 10px 8px; width:448px; } -.backup-dialog .buttons-set button { margin:0 0 0 5px; } -.backup-dialog #ftp-credentials-container {margin-top: 25px;} -.backup-dialog .password-box-container {margin-top: 15px;} -.backup-dialog #ftp-credentials-container fieldset {margin-bottom: 0;} -.backup-dialog input[type=text], .backup-dialog input[type=password] {width: 180px} -.backup-dialog .exclude-media-checkbox-container {margin-top: 15px;} -.backup-dialog td.maintenance-checkbox-container {margin-top: 0; padding-top: 4px;} - -/*****************************************/ -/******** ALIGNMENTS AND CLEARS **********/ -/*****************************************/ - -/* Directional and spacial */ -.f-left, .left { float:left; } -.f-right, .right { float:right; } -.v-top { vertical-align:top; } -.v-middle { vertical-align:middle !important; } -.v-bottom { vertical-align:bottom; } -.a-left { text-align:left !important; } -.a-center { text-align:center !important; } -.a-right { text-align:right !important; } -.nm { margin:0 !important; } -.np { padding:0 !important; } -.no-display { display:none; } -.no-show { display:none; } -.nowrap, .nobr { white-space:nowrap; } -.wrap { white-space:normal !important; } -.no-float { float:none !important; } -.pointer { cursor:pointer; } - -/* Color */ -.emph, .accent { color:#eb5e00 !important; } -.subdue { color:#306375; } - -/* Font */ -.bold { font-weight:bold !important; } -.normal { font-weight:normal !important; } - -/* Clear */ /* This keeps our HTML free of buncha clearing elements */ -.side-col .switcher:after, -.message-popup .message-popup-head:after, -.message-popup .message-popup-content .message:after, -.login-form .form-buttons:after, -.wrapper:after, -.option-title:after, -.columns:after, -.main-col:after, -.content-header-floating:after, -.entry-edit .entry-edit-head:after, -.content-header:after, -.login-box .button-set:after, -ul.tabs-horiz:after, -.header-top:after, -dl.accordion dt:after, -.field-100:after, -.entry-edit fieldset li:after, -.entry-edit fieldset span.field-row:after, -.content:after, -#topnav:after, -.main:after, -.container:after, -.footer:after, -.middle:after, -.header:after, -.box-head:after, -div.actions:after, -.tier-container:after, -.clear:after, -.notification-global:after, -.files .row:after, -.files-wide .row:after, -.grid tr.filter .range .range-line:after, -.store-scope:after { display:block; clear:both; content:"."; font-size:0; line-height:0; height:0; overflow:hidden; } diff --git a/app/code/Magento/Webhook/view/adminhtml/css/modal.css b/app/code/Magento/Webhook/view/adminhtml/css/modal.css deleted file mode 100644 index a8912c8fb6271..0000000000000 --- a/app/code/Magento/Webhook/view/adminhtml/css/modal.css +++ /dev/null @@ -1,110 +0,0 @@ -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License (AFL 3.0) - * that is bundled with this package in the file LICENSE_AFL.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/afl-3.0.php - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@magentocommerce.com so we can send you a copy immediately. - * - * DISCLAIMER - * - * Do not edit or add to this file if you wish to upgrade Magento to newer - * versions in the future. If you wish to customize Magento for your - * needs please refer to http://www.magentocommerce.com for more information. - * - * @category Magento - * @package Magento_Webhook - * @copyright Copyright (c) 2013 X.commerce, Inc. (http://www.magentocommerce.com) - * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) - */ - -@font-face { - font-family: 'Lucidia Sans Unicode'; - font-weight: normal; - font-style: normal; -} - -.inline { - display: inline-block; - vertical-align: middle; -} - -html, body { - height: 100%; -} - -.hide { - display: none !important; -} - -#activate-subscription>.sh { - background: transparent url("../images/ghost-dark.png") repeat 0% 0%; - padding: 10px; - border-radius: 15px; - -webkit-border-radius: 15px; - -moz-border-radius: 15px; - margin: 0 auto; - width: 450px; - height: 500px; - position: absolute; - z-index: 1000; -} - -#activate-subscription>.sh>.b { - height: 100%; - border-radius: 7px; - -webkit-border-radius: 7px; - -moz-border-radius: 7px; - /*position: relative;*/ -} - -#activate-subscription>.sh>.b>.top { - position: relative; - -webkit-border-top-left-radius: 7px; - -webkit-border-top-right-radius: 7px; - -moz-border-radius-topleft: 7px; - -moz-border-radius-topright: 7px; - border-top-left-radius: 7px; - border-top-right-radius: 7px; - height: 20px; - background: #425e66; - background: -moz-linear-gradient(top, #092023 0%, #425e66 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #092023), color-stop(100%, #425e66)); - background: -webkit-linear-gradient(top, #092023 0%, #425e66 100%); - background: -o-linear-gradient(top, #092023 0%, #425e66 100%); - background: -ms-linear-gradient(top, #092023 0%, #425e66 100%); - filter: progid:DXImageTransform.Microsoft.gradient(GradientType = 0, startColorstr = '#092023', endColorstr = '#425e66'); - background: linear-gradient(top, #092023 0%, #425e66 100%); -} - -#activate-subscription>.sh>.b>.top>.close { - display: block; - position: absolute; - top: 4px; - right: 10px; - font-family: Arial, Helvetica, Verdana, sans-serif; - font-size: 0.8em; - color: #f7f7f7; - text-decoration: none; -} - -#activate-subscription>.sh>.b>.top>.close:hover { - color: #fff; - text-decoration: underline; -} - -#activate-subscription>.sh>.b>iframe { - border-radius: 0px 0px 7px 7px; - -webkit-border-radius: 0px 0px 7px 7px; - -moz-border-radius: 0px 0px 7px 7px; - background: #FFF; - width: 450px; - height: 480px; - display: block; -} - diff --git a/app/code/Magento/Webhook/view/adminhtml/css/webhook.css b/app/code/Magento/Webhook/view/adminhtml/css/webhook.css deleted file mode 100644 index a6c209656c228..0000000000000 --- a/app/code/Magento/Webhook/view/adminhtml/css/webhook.css +++ /dev/null @@ -1,118 +0,0 @@ -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License (AFL 3.0) - * that is bundled with this package in the file LICENSE_AFL.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/afl-3.0.php - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@magentocommerce.com so we can send you a copy immediately. - * - * DISCLAIMER - * - * Do not edit or add to this file if you wish to upgrade Magento to newer - * versions in the future. If you wish to customize Magento for your - * needs please refer to http://www.magentocommerce.com for more information. - * - * @category Magento - * @package Magento_Webhook - * @copyright Copyright (c) 2013 X.commerce, Inc. (http://www.magentocommerce.com) - * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) - */ - -html { - height: 100%; - overflow: hidden; -} - -body { - height: 100%; -} - -body>div:first-child { - height: 100%; -} - -div.outer { - height: 100%; -} - -.section.main { - padding: 1em; -} - -li { - margin-left: 1em; -} - -ul { - padding-left: 1em; -} - -em { - color: #EB5E00; -} - -.red { - color: #EB5E00; -} - -.section { - margin-top: 1em; -} - -div.center { - overflow: auto; - height: 90%; -} - -div.bottom { - border-top: 1px solid #2D444F; - background: #666E73; - width: 100%; - height: 10%; - position: absolute; - bottom: 0px; -} - -div.buttons { - width: 70%; - - margin: 1em auto; -} - -.buttons button { - margin-right: 2em; - margin-left: 2em; -} - -/*.buttons button:last-child,*/ -.buttons button.last-child { - margin-right: 25%; - float: right; -} - -.buttons button:first-child { - margin-left: 25%; - margin-right: 0px; - float: left; -} - -/* Using monospace to make it easier to see how long our keys/secrets really are */ -input.monospace { - font-family: Courier New, monospace; -} - -/* Need this so the form inputs look good in our modal window */ -.api_form input.input-text{ - width: 20em; -} - -.entry-edit .field-row label.error { - float: none; - width: auto; - margin-left: 2em; -} diff --git a/app/code/Magento/Webhook/view/adminhtml/images/accordion_close.gif b/app/code/Magento/Webhook/view/adminhtml/images/accordion_close.gif deleted file mode 100644 index 7463cfd06c6b55c8d4e5735ed22f75beb1e00012..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 394 zcmV;50d@XINk%w1VGsZj0M$GIaBXY93#EEV|A`R) ze-ZzK5dXi2|Imj2g%baw5MW(g|Dh27iV^>v5dV@9|DO>5j}h*H0ssI1d3JOF00000 z00000A^8LW002AyEC2ui01yBX000K3K;EjND;kfL70+@Bm0-{)v=q8nRFgwP#_e(& zhlxse^3cxcwC7ap;NI}~yHh0C?)dzjP}G<(EG~kBEEpylMHw3bJB^Nw0UH@b2nhp^ zj{^w^MJXdW3N50e3OOSwMI<+?tgWjgMIt$~w6(J$MJNk3yuH2)C^``w9}qFe$j1;L o91#x;1r#sS)YB9N3=aST4oBWP4gvrM03Z@G=;`PZAmc#*JE+aFNn??KRvjm__+=Ch(h}YYf>kal^WoLS! zST%MJAz%aUSG+V~VhRi6$2y!&^IR~7vROO^f2skaF5o%w2AU3$%EK(4V$yAv1!u_d zVH@bb0D<>^@>6FPD>YIpW`~|j^q>we)DS|0faqg21Xy4&A&#PT5!Q&QXq`7;WI!Cy z{=|;I`N9Gi)743}VfSFCn?iKsG@mrq!A-Z{SCVtHA$jz!Eedn%W@E z;=TkemI#R`7qT;Q!eIo2sq;_X_+!)0UQ;^na@0-z#hW*9-oi zDY(4I_bN@fr_Wxq{|6}d{TLk`}X#ah6@&D89 zf3K|l-y`rpU+{mM=>I|>DfoY>_`)o$|D6I?>m~nRo%nyD!2d46|NGnjUugS3SKxoE z(EmjO|0fClpD&OQ8}q+k@LeP0|Ns9h%SsrA8c_Vn!pOkj!k`0kI4DjS*e^7=NSZpe zwzZo|y0GwTnORMkIKfPdpG8Gf!N_*b+&M-HqAE^mLgverSXq^pn+vJ6s@iY1*L8N* z-D0oWDrmjmT4TG$0c*ilHfA{!UW4rhye4wYY^~bdvfFRnlI7NJl@~X>ecMo6zEzRK zk%>!hyB-&lBZp$Errl3F#_f#1>@>ONayS`uG)MDsu~`OoG_lGEu(EI{FeveHi?ld+ zEO^M;->+c5@4^HIreGM zKrAd&P(Bn7xI1Urjc}(To4o8~cHZ0Bof#I5Mp0g`r2wP}%b09k6V4V+A_exGWqY1P zGV5DfgNi!Pdmm4A2hfLx&P^VArMRy$hIAmg3FS5iw5x!jj~8%xpa$azBzMrQ7SpQ2 z5K~%Zpm7ga#xRiUw4@y(c%{T$F0;Y7@8pdHe&&^Q*=B5U5 z*&B&m*wuvXCGoEZkyb@qTKaZhU&f#43p`ly^OZkkS zdRwVizB}yiS#ZPD68I>cgL4^;^K4a273q+X>i!x=8XAHyFz mCu^Ym!#CxaJ@S725?}xzxR#yg^0+7f0000UR^wE)|=O_U%z^F z=J@floSd82u5DPk^7x@cEtQq8Uc8vv-MwV?>{CaNo;ZBCGC#kjuy9&W&*aX|>sPK! z@9kwk0*XIb7#SF37<52lAUhdY(-qXkniKh2SFoL6+`}%kW-1d$FN4O_7=?-AjgA$r z0xD;@H*CF-7ZNB~Pz}GCh#1) diff --git a/app/code/Magento/Webhook/view/adminhtml/images/add_btn_icon.gif b/app/code/Magento/Webhook/view/adminhtml/images/add_btn_icon.gif deleted file mode 100644 index 0c7645a983d3a86c2c625aa65fc58573c07180dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 344 zcmZ?wbhEHb48ZC#$1x_5(|SEg(l8Zn&5OYQ^aGYe_KdKf!AElhdUW_=CK5%vs6yf>h6j*>Eh6t z-r)Y2Ge(DrSx7~mfkTR4ii1I3MTEJ$vbwguQQ6PGpeR6DmW@3n&7Yl3R+W#3Ga^cb WlZP+Fw^$+GOV!0q(ZkD;!5RRDUv~=t diff --git a/app/code/Magento/Webhook/view/adminhtml/images/address_list_li.gif b/app/code/Magento/Webhook/view/adminhtml/images/address_list_li.gif deleted file mode 100644 index 58776764860191f435315f9873db3a2389285102..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 72 zcmZ?wbhEHbf^`1|Ni~>_3O)zA8$W@{`Ke2=kMRY|N8ae>(_t({{8*? z_w}bw|NsC0_y7Ounl H6&b7n$VOK5 diff --git a/app/code/Magento/Webhook/view/adminhtml/images/address_list_over_bg.gif b/app/code/Magento/Webhook/view/adminhtml/images/address_list_over_bg.gif deleted file mode 100644 index d72815959aa3ade84e8c15a9f10931b36a4e27c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 236 zcmZ?wbhEHbWM)WbIKsg2@8_3)-#`BU_vioLKmWeH`S<(B|G&Tf{rLF*&#(VL_MadB zzP_&Sng0LJ&wsza|NHgr|KH#LzJK`l{r$fmpZ@>*_wU!&e?LF}|Nrm*zrX*!z5Dm= z?Z2;Y{{R2a00W9YS-?yk5DBuAfi+V>y)PxRFMQQHou~UYbe}EBz3jA(zlQ&>!-7N) z7YXSTDMklFEVwVMNcLK4w=NvAob+a&pS-1NuHBCNjXP|FI&QqL=&U<` jJ^f!pV^gzKYg>CqCrfvabYK63iIXNz;o;_1WUvMRKL?9c diff --git a/app/code/Magento/Webhook/view/adminhtml/images/ajax-loader-tr.gif b/app/code/Magento/Webhook/view/adminhtml/images/ajax-loader-tr.gif deleted file mode 100644 index efb7ba77049448a34cd45c8509e5c63f8ac5fb5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2608 zcmdVcdr(tX9tZGCZgP`cW8N3Y4Ud39S(V3HrLnpl$mN+82tsYxXqRwF2v8-`s36-F zL=g~M%41PbM_w(UWrZpQl|l*z1g!+3hLREZ-g)cDWR~cg^xw=BL_ZlmfA@IW{ni3&aqNpn zwmX$c(|Ms!4DBywXQmH?TlTC4{%_0UA1IcgRA`k+f;}l(wLp=o$b2_lk>s1QLzNDA zJSPIM{cMkyOQJ&JVzD4;$QoaN(80d7df`e72mtglFh>*4rBO&=PNGie*4L=b3>3D! z9jLr$6TKPRv_Hout#fPfij72FwHq zPCQh7ga!vEk3NILygWq`5UTUyj0!8QSOCfR{f*{sZp z3TJmQIX6X{QddV8Z;`V&TFlM$Q^W-zs7{{8piYDV;(zVI_-JP`&bSiH>vSgJ%?7}! z(-Fdtj9u#FPK`~-C&!rhrdu``kGyVU;8FdyQhD?jV{DZ)QE{x|U2&riC90vhLSO9U zQ8l5R=fX?}&-{smn7#p)@O_k*z!@PAJC~KASC1u<>5|pi# zny)R>HKMKl3g?X=`#imxE5iQkm9Fh^^aw}3(RPO*k$Z$@|DR!9Z z7L2V5#pxX}AIZaTMt3j+56A2EFdl&y>%~l5GCB$wOy`h^2`*{K>|~j6tdw0g@opo| zV3&!HKA@h*KktSfAeWnEvKMp1I#;p>IkZzUdcCqlduZ*>Ibx4XJ_CchbfxN;x-eZ^ zCOG9GaSz0$5?D8R*j2Q$^itp z9l2@u`AQzyXC9D8b(wXt==RYIxU^Yzru!`Z89=UUam#sI>d^5xbhL6Q^hO-OO%1Pk zUB>pQ-Q|&&4?8=(Q^Rdw1V-?%MDF9ubQi!A%Rkk7J4sS3aPEL-Af<%%^3QMa@Yj}+ z8D#ekUQq3U{UjQ-sOhJ7M*P(q<+`t!qvlU9WrOQs0iuoB_6 z1tXwPfDzDTcYj|{;vKeQtS;YyQZ9IFhfBR4gpMLfwa=gE91bzcpA)07d>!GSSLDgz zpNvSqY$Gl*J}x!gkVB5eH&swW*epY@Eu4V}(M@5gGdQlc%8}wf*4N+{@_TlzKauXoPzMmu89!X+% z=YoPi{1Dl4B1W&S1}b0Wl1n4v>ZZjwwf10Qv>_6Euc-*sHk7XmE|Y^*jl4m7I1wG& zoJKGhCvn@PUw?@AOb=K{XL0X9I4#fwb%dfRe%Dd@APDtL+J%&Hfx?XA{5-x-R%HYVf$4aRm$gn3Pdv zfHO!?2GbyBWw;OAed%uAvjI&bUcSd_zc&n&FzYY{+OgW!#;7J8rnKG@ k_fPd9W!XmI2LH25hWxC1*NwN^D{h0m;x;V&k6x{R0vTGcQUCw| diff --git a/app/code/Magento/Webhook/view/adminhtml/images/ajax-loader.gif b/app/code/Magento/Webhook/view/adminhtml/images/ajax-loader.gif deleted file mode 100644 index b525a23bdbb3fecbfac17c7d498decfa5b45f18b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 505 zcmZ?wbhEHb6krfw_{abP|Ns9#apDA!q4=NM&ow02*)hP?NY8+o5hV0a)~Pfzr$nJV zvm`^o-P29MH@_@1Rlz+qu}Hy0&j6@E)Hg9DRUxTT!7(eb!Y4m5MK3ciEuTU0CkrPR z&;%VI23jS+z`&&2(w}+g?LG(V;B{J(dz)Ty7saJ_%5>I6wy#UxGD)xJ>dWj?-=@Ec z`p==&*1?3w1Tkygj)rFMZ$s{Tp)#haf99CqNB2k~w*;)?(I~ zS#_0nu5~_Z?-M-Mr1@l4n0eaQ(A&@dPCK6;%)yA&0B9)O$P7M`m3*$@)!M|nmpmUv z%z9a}E?jfooas&PxGvpWw)zkA6OFb8tf2sP!mWwgT_+2UTo21HO?uYJP&!F@W|{hp ZEKT?Q1}Tdttz7-^a{$N>)}ROg0{|uTw+8?K diff --git a/app/code/Magento/Webhook/view/adminhtml/images/application_view_tile.gif b/app/code/Magento/Webhook/view/adminhtml/images/application_view_tile.gif deleted file mode 100644 index 8965c0e108e084cdf2b8e69d7fc854acb9368317..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 377 zcmV-<0fzoZNk%w1VGsZi0M$JJ{{H^_{QPE%z*>B=d7{{Lp44`r)r_IWw!_H>>zh_~t^51? zTz<7!da!ex(R!rXRCTOTajE~Rb69(^lC<7>rrdL#(rl8*fS$);g}YO8s&JXkpVF69 zb*p)!*<60KZ<(X9jFQ@h1x- t0|N(x4oDJY1_O(4*>uG0%VMjsmtvT zqnxzbi?iOm`wxcVNS5Y_rs~SJ?hD8AOxN~}=lag~{tpZaXMm#dh)gP%%%<}RjY_A~ vs`ZM^YPa03_X`e-$K-YS={|^`_R{#JzeWXfW diff --git a/app/code/Magento/Webhook/view/adminhtml/images/bg_notifications.gif b/app/code/Magento/Webhook/view/adminhtml/images/bg_notifications.gif deleted file mode 100644 index fb47f6ea7a71bdba54e06b1f26cc5cf688d32cd6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1962 zcmeH``8(Tr0)W49RA^M{OuH?irqYx)C^}nhQcOkJGGkV?8{Oz`XB30ZSUQGz1XD*f zLm9o4xQ0rmj=GPIxEdNqW9w)tB}jy*5b+f`KKsl+u|LiG54_LwKF{mxcj5G>;h{Pt z2+o2)G3416t_Xn^_apu>oD6<*g5#YeXHMK0$xv%G=X!3e_?-n>HPEPmS`A)!E*&s} zfAmyP3_+=(N~^A0`WIU$_efa#zW^R-IlvKvmjC8te3Ru)keRi!{St(oV6_f_${JWye}bjWxo z=aQZ&w3IpeGDYa#t3HZO7OHHdVzg zZ(ANz@u!zvKareso>Pdxt{i;iX+DgBGSsa%bm`T=ck+3`))J_-59iV}vs^_@`F5l= zkdCEIJ`usIppKyGE(Q(m+v=U*R|#+`arZ4xaSf%F2*4_LcZ_?XFA8*A`WSIdQBlm7 z3!B7!VEt{gxL?7n0_om3sOzdQ%`n^;&{dW7h=}wkEXd;4lrC_F5WP{c$O@E9E zSI-IH1cGMaZG(s{y&SMjH39tcsm%}2pZs46*edl95R?Tu{$cy$2?z?#BWH)3nNxK>RXK(Y$< zO9I+m1_vLyMhUv&5q_^3-glpK+nXd4HN@-pJUg0Kr^13?m;CLCvy|WVT_S6wvvs|p zBYm%pK-RjkzzOzBRTs6%#cc)trSxRPoM`+-RBJ$YCp=>x`d`3)+1;h=_%Oj7>+;gK zJLT3`QW^+WcU3zIUVC~T_kM{&A4d&UT0}6uJi_`VPxmC+r8gCQf%ArD9zvc#1oyLp zbpL72re$F7oX&^riz0;CxL<38IgTyM!n=e)+(PcD$%ut}r$rGJh!fa`JR6@voG{M^ zU%8M^KKg9&et^4Vv4B7i-{TcTre4nv-DkK|L`je=J)qvXLN>~xqB+@DemxfcFuFw| zdJ>m*;JhxDQ6qY)Gx$tglDsVuXIo>a4kZ~Su(&MiXl=y({gt816?`YWq_QyNV)-xW zUbV+=6(y`ls(*~Z*Tyl5B3GVK=(YHmnwFIn=81~{i+jwRe0Px5CfbeE`wuU2wXR5l zm)4ggVKXgX>M&X1{qC!d<%g)LNXr|Pc4>3QS>{?xtk4$e<&3elZ&~CGthF!4C=rhg z-Kf6SHigGyDU!*kSo)snI9+d)%vsM!zDH^S=~+d~*hmMKtQX}WmGz;09XI;TFGp_- zV7`vNh495RqES?HM;Yhp&FIY`Ts3QR*s)dW(w_v;#x2b-0h=Q}-7NX2CoGkZkyf!f zc9yqq5k|?n`dhpJkF~7{BC#jc5b5xZn{Uw9zbPgui79bN{V!7#(^lVqvpo}0eQ#6O zuwc#ov&dIY@cVc(%8Th(@mkPqG7Q!dr;-dt$3J9P#q5lxInc-Fb3Hz`^_gX)Gzqhb zG0G)6k)&8GG@vWR4ES)G*||8u_kyzO=eskw&{WQW&!>|+1k9l%12^Q3lX@j*o-Zo`xW^%kg#H{7rZr00_l^49Gn? zP9LzvCVTXUn`CB^`|S=oL#U>3bZkQZ(Z6nFJ5%gN8RP-{Rp+!X{w=g<h1N? z+&2`Ks6UMI{FUi@pGkp<$;F|8gF}FkQHic>2NtNkJMVEAFnsV~5&gW(^cT>{44$rj JF6*2UngB`LJqG{) diff --git a/app/code/Magento/Webhook/view/adminhtml/images/bkg_btn-close.gif b/app/code/Magento/Webhook/view/adminhtml/images/bkg_btn-close.gif deleted file mode 100644 index 11299fabad2143ea57c17ee0c9669245681ddaac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 146 zcmZ?wbhEHbWMmLzIKseice2fm0*PDIDmNfFc|yICfCx8Lk`xAE0DRt8dl;!hT^avcx}vXg<8U!lN)f1|{q3oJZ~L^ws57_0#^ Ck|5py diff --git a/app/code/Magento/Webhook/view/adminhtml/images/bkg_btn-close2.gif b/app/code/Magento/Webhook/view/adminhtml/images/bkg_btn-close2.gif deleted file mode 100644 index 24f6252a98ecae743f826b0eb6ddc9b800c909a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 356 zcmV-q0h|6uNk%w1VGRHc0M!Nn`||1g^XmKY==<{O`}6Dj@aWx-Hq~Sb?AXTb-OI#W z3CC<2?cB@i*2L3e3d(&z)MgIYw2{+n71@U{p;s2zi89KAM$d#W(1$afT^!ApTFYV$ z>e0W*aUq*f5!Qh#&X8T#s)p5R5zt`@&5~95?&Z#UCC{L4+lw>UxRlRbxIJv z-^58Z`H&cav^u~beN2&bMm-NiOr6GHPaE|24IMQl0EGZNh5#is3p0ik0FZ?<3oa`H z0v?!|m@6(476_Z82o@3sFCZ-itgI~{FG3I-4gFe45^K>#~| CRG1t9 diff --git a/app/code/Magento/Webhook/view/adminhtml/images/bkg_search-magnifier.png b/app/code/Magento/Webhook/view/adminhtml/images/bkg_search-magnifier.png deleted file mode 100644 index cc7a26f8b8f7bf643a8ae437686ca8e96ded9f25..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1352 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1SGfcUswyIBuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFso#SM3hAM`dB6B=jtVb)aX^@765fKFxc2v6eK2Rr0UTq__OB&@Hb09I0xZL0)vRD^GUf^&XRs)DJWv2L<~p`n7AnVzAE zshOFfj)IYap^?4;5Si&3npl~dSs9rtK!Fm_wxX0Ys~{IQs9ivwtx`rwNr9EVetCJh zUb(Seeo?xx^|#0uTKVr7^KE~&-IMVSR9nfZANAQKal@=Hr> zm4GgVcp$o0y!L2NKW( z>+top^2{qPNz6-5^>ndS0-B+hnVDi`>}YOaVdQ3M;$q-vXy|HWX=r5ZVr=Z<>SAQ- zWb9@M)9aF-T$-DjR|38Iua(|ZvxVNY(bmt$aH+~w)w7*cVo zWm0(ep#Xta-=4jTl32CNTt58&&n@VI%!*@bmuGHegFOPOB1PHwaJ|2AKB&gr+1%! z?yVx!>U8jB$t**z(A#gn<(P4^FaZ@y@SNJjzI>yX41y}HWEA~vFk&$Jf8QdD7$wiZLF}H|NQe$ z_BJWLc4Zm9ZtM5YO0=dPQruFLpy1fENMljymD!gwK3CYRS|!KVZthmiDpt&>f1u6j ztLUPW=4$iLe|9j8V@wFxBf)k3wW-AZ`~5BEYIFUP-xXNQ@mv0*ugdQu`;*5XXXqR@ ztzO&Wq{zm;?DES1q4f=ojWe}M{O#XxX*%C4_6^`~n{@o~L|cZ#oIdreHZ`5cAD?MH zHc#T?)X6LL#kje+nTvMH?B0C)twM@R$&9mU-b;mY{N+yHZ#??9ZhlclGw;)gTe~DWM4fX8qw` diff --git a/app/code/Magento/Webhook/view/adminhtml/images/blank.gif b/app/code/Magento/Webhook/view/adminhtml/images/blank.gif deleted file mode 100644 index d6e9b014cef6741099e49b0427b487030f3d224a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43 mcmZ?wbhEHbWMp7uXkdT>#h)yUAf^t80LeHoF}W}@SOWla!2~=2 diff --git a/app/code/Magento/Webhook/view/adminhtml/images/box_bg.gif b/app/code/Magento/Webhook/view/adminhtml/images/box_bg.gif deleted file mode 100644 index 8b51ee0882f8cb89a38f9b5493d4ae64ba61b185..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 217 zcmZ?wbhEHbWMXJ%IKsg2?eE_ofB*gX@#E94KVSa*`SknGw?BWs{Q3Lg=kFi?{(bxV z@5}E$?|=UK^b5%S|MTDfuYdl2{{83s-+v!|{`&aqHv=J{_>%>!L||gKQ&8?x zv7DQ+YMs`jeR`_rOLFh~u6ti&%+tESz)44{|HO%;lR0{vEzKobtr6>QtPx9kQMJ3l pz`;>(_Q^?Gs?O$ZX8z!iC}dv^Zcy9Ymewg2p?|NryzuYS$H z2b+Iyul{%c;J;H7|9^k?_uTBC9V)+fwftI>{j*E$N2kW$M`wRbb^rhG&!0uk|29Va z=rsKQ=jYFvzCS0L{h4p`@AC4$2U@;WOZ}MX`|s5KLj)-PWMO1r zU}Vq%xfc{C4D6K+j7^LVY;9W2os4n}y{=u&3cU>Wo%#m+{PL3}g@v6oZ6_~YENwbj z)X>pVbh51ZWC=kjL5ay40(QM39D7B2odviQZ5a5(xy1Px#8kMNI2kx)^xQ96t2VhU kS!~gy%+t$bHQ7w5SzAqqmr>V5>`kYOakIKnb0dQ_0L3N2asU7T diff --git a/app/code/Magento/Webhook/view/adminhtml/images/btn_add-widget_icon2.gif b/app/code/Magento/Webhook/view/adminhtml/images/btn_add-widget_icon2.gif deleted file mode 100644 index 75055bb71450923311468f9384d57385c2a6e778..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 547 zcmZ?wbhEHb6ky{$1wqt(5=QRQ(O>HvDLjJALZ(pV_9L zKYxDv_ALVg!>?bzUc7j*VBUfyiV8vTqJcCaIRVFr6|y>ZEnTRr^~luvKjIt3gFFUsh z_wnP>f`+`}#+D51JSsd_ueu8|IBGPr^WVR(Wac2&WzYVCUBc8;z+wu6Ca>Oy4h3H4 Nug%s@-u;aX)&SkDv|a!J diff --git a/app/code/Magento/Webhook/view/adminhtml/images/btn_back_bg.gif b/app/code/Magento/Webhook/view/adminhtml/images/btn_back_bg.gif deleted file mode 100644 index 0824ca688214ff331a7bee26a4e9694b81de487a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 147 zcmZ?wbhEHbWMmL#IKsg2{rmUl&!6AAb?eEKC;$Had-v|$@87@g-Mjbo>(?7MZajMQ z=*^oqKY#wbbLY;>moGnm{`}#?hrfUSK6vnefjFS}lLf3$2SkGGWMCCg5R~L;unE{` Oad3f$yRwQRgEatojy*sC diff --git a/app/code/Magento/Webhook/view/adminhtml/images/btn_bare_bg.gif b/app/code/Magento/Webhook/view/adminhtml/images/btn_bare_bg.gif deleted file mode 100644 index 24fc5ba5a63031e8feba479d1dc9d8fc5c48e699..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1454 zcmd6k=Tp-M06?Qe;6wyl4jjcpK@3B{>M^7PPKpSKaOD(FPpNXss-t-7wc4YS0wNX! zWN6r$O*X%55(p4RLU0g}kp##dBoIiz5Yzf!^nHAv-rYNOIx#xtm)b25kTL^A#$%A3 zEqc9vU|@jQg|JvGYinz4CY{4(PzV?j4#j5DXaH$=pm(UBYqeT8H#coIo84~5W8m-( z*z)o+pU-b@svY2Qap*U_Y&s5$YHx00(Yh511)&Q~2gpn+iN|3sEX)f=_#`4uBogs@ zd(39DP$>NHZhU%rn!{qOtgO(fWQjz==W+VEEF1>j25V%{0h7rzCKU8@nMR`#jp*dE zXiBA0EEdb85`)1oJ3Bi*K1QPusboBbfF*XJaA-IIi|9hVrUN7fK*k_C0MdW19oASg zGT6tYQc!PN9S#TRf5U+d@D>m#0~GqD=*tt3i=#LrL@JwKSd=T2Dz!$d(;H+*)4aaV*tHv+wzTodwrT(D z06A@!tDvA#SC1?RH;T~CEA#YEh9w=nSOPx2-z$qi=-^lRovipK$aK)vX`fHvg<;a0 z(T0d?Be2tCxbRhUk#=^Nj1aZPm2CG-&Q$&642d}r-$y~cN2GTqHz#+aCooy${JD{C z%p^XWSK*ri=*69og1a%rJQ0XxBaPE;nQ_#P{?Hg zjkw6K_D^X^rIQq+jmHWk0yV0HI2x#nINYoF2Pv-K>*}IF5(Q31En<80?)Z`^z;DDSNylQY|a-OoYrsz0T#%|GoP< z@&I&aK(W`=L?~pTJfJ>z;RyteT&M^I)C*4|1|f@;$Hlpe&!Uw`|4QFKk(s;VoP*@m z3Ep|~=ShJmxuYgEQX{WTPYhDjWuD7ZyvVw~kyDiybEm%{yEI7Im{XspY|4eBlrIYb zjq=s)!5|gvt~gKC{D3ih=xXw+M%7yE9IS4GdgrU#%LCEsj><@_y0bblSo6B>Tz*jJ zAHf6taM(Sq2GLd;tVO=A&)1@maI_YU1+-cWVK7*SrJxyyw_4-cbvTwqtHX1hL-d4x z?*ct>C=jD32_kiR@_1s1fimoU7nDpp5pMuy@97LwS!u`;P5yhq5rAHgSz_n`-4fF@ zXw%WR<%Ag7>q?BVXR{^+&$c^L#x3mEp`c8mqE>sc;J`^p7CA~Z2DH0j)brcdENP&8;Zso zIJ*2;A@`))o zHZJh<$dr|U1X0FK^Z2Q7`|5}Dx9n?EH}H1L?0uu%Dk}^B?6xj%sCwkSEy*v*4;1?^ DVowtu diff --git a/app/code/Magento/Webhook/view/adminhtml/images/btn_bg-disabled.gif b/app/code/Magento/Webhook/view/adminhtml/images/btn_bg-disabled.gif deleted file mode 100644 index 3ec0b3154e91aa06087ec36eecd180e03af0d54d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 148 zcmZ?wbhEHbWMmLwIKsft)zvj?)~p2!7EGHqt*NPL-n@BJrc9YQabinL%ZwQ_Iy*b- z>+2gD8hU$s=ggVY*4EbF-(Oo>yLj>9g$oxl5CIf_vVc|TfJl&?46K3+OgLMGRhkPO Pco*1k9MlQqV6X-N!gwnD diff --git a/app/code/Magento/Webhook/view/adminhtml/images/btn_bg.gif b/app/code/Magento/Webhook/view/adminhtml/images/btn_bg.gif deleted file mode 100644 index 32d6ca84f3f541bf3a7bf29d9eb67b7f0b403d27..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 148 zcmZ?wbhEHbWMmLwIKsg2y+Y{kBAc%{Y~M=xe>6yauMzvV!s%-f_wUKNKid_*=5zj; zZThQU^GCDnzg4b(=2`xpZuqlX_5T|8e@pEdhyaQ|S-`4vKqSac23ElZPb7jr=m;Eg P@pKkBP@v(&!C(ylupKNW diff --git a/app/code/Magento/Webhook/view/adminhtml/images/btn_bg.png b/app/code/Magento/Webhook/view/adminhtml/images/btn_bg.png deleted file mode 100644 index 09448f4ab3b0cb2f2b87d0c31fd883a99fa0c490..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1887 zcmV-l2cY34{>;0HSyqgb;3ti4md+8VxZ(FvbKNauFdA zg+yQhG|JE!8A9R+j7uCra6;L-$#BDst=n4GUAnHPmvj8S_Efs=)M&QK$oW0Vo3^LP zw!CN0-tX-6`>|%TnTdgJ>dtSM@QKF7KP{WFlmS44=v0pJlRy3{Ul=}e8>bg0phWVgO?&nKW20H_PX1$x~*I*vs*08kOc?`>~up?bg(0Qw8!?y0Z2E|VvE4!1!7h!&)~ z`Q*_Ozo%EE69h{w0HOpD9X4z0#nWX>aEh>y1b_%Ze54v1zTR`#dE43$mP8;0O#lR8 z7<&2PBz3)d*ZSREbu~8n22TV@)Nw&s0MN1^j50+U{I1Tj8wG2&x0RPx%6?yfzJcWy z&@#NyXbeB6LUb{bGZBTJvfe39;vZ* zyL}T{1+<9To^+8^GpTk`e~=o6HUZ5FLZ(B%gBcka{K~=~7YYXBVos-joE&-*tpb{# zAXJQH`-}5eefRS=UO=J=0J;b{gq4R*ZZ>6PBGCkZNI|F^D-N6}AaWql1b_%Qx~$6I zesD?hh*3y10U%nC)JJks)3e7T(F6cBL1wL5yHrR@MxqG-YJ!+Xj6$Lb0I>uyq$1G- zfS7{lk!S)yY(Y4k4v8iJ#1h2k?&;xKe54%!RY6>i))wjqwtWDgB8a`#dR>+o22%t8 z6+tSB4wd*kZjmE`KoS6=1nF*Vwp!1Wl+lgpbbBo%0U$yUQjO(b>^y9%sSGBX=#4Nw0)6ow+9nVJY5}S->+Z2y{7DRWx($X zuwhXUM+!6yE6Xz74?=w~FrlD^r!#UV&VFj)iaBGZ&CE$kHyb{jk&QV5v@1v$B1*qR zljMxdtUBw>H_AmCA$?O@@(W*cG%2Xi|^`B~|iZeKE=Fsp9lP9>a3@ zd{>-6j|YzI_tnb*e^Ws8l#2G|!s;z+n#mB5<1PpQ51lNM;vkX44?zG> zA>ekM>8`b`uHCb-F>;#Vf4BfJG^E-zKV{PNv)Rkv%2KYwAqW7Ga6)2U`po%9n9wZ` z2m(Mf`joV}kG`|@Wg3SCK>$#}ICcWfh)aSX0H{roVQJG$xld$45CBwQIbLs`^Wtm> z0zeFSLsAX|0U+iS;Zh+80MTM7cR+j{_goMJfGBi|AzjrKH4p@V2W82rsQjCGZ?0$qeKC^}+@6@*V^MK#@b>Ln^rKw)VTl2ac1cj^L6D?EzYb<}L_) z=(@uv_WJG|{j^Z>idOQnbI=8$Yd8rXo{#%F89g5O#GpZmk*PfakK0#!WLHt=&0kKD zmkr^)A-V*f8`P6W!3m77An5VH`xlAZ_NVjrLpzGPZ&`jIFDps8!td$gk$Z(Ktp{_W z!M{iH`=su=>Nfk8bC%{a#iiuXRZ?_m<&4}g#ZH*_O7UQQ)1JmUN79(w;S3|=^u-DE zco5_eMX{s0f+mT!kh-l@6P+B98z2Y(3PMuy{H!U@o}IO7 zEmBPYP(zoHn3wn53rIBqAQpzy^tsP}unVas0K~$aI}xcS0Q|!gnKp9b$-xF6J6oIEuO9t8 zm}){l0*_P^pz&oD`?nlkPp|LNzO9A+c%_;E@UTn_mWV;qemEs+RP1&8&hOh+)L3!3 zZ>ouY2<`r-KddBU{}%cbM>$xQiT;gu-o4{IySJdoR`r`&stG&fPCh`N;!VKkm0E9E z+iEYBS}Z4vVyBusvtUv25Yk&_WTbVVPw~Ysdc?byYY!yVWWZuGNb5kK;>&+ZHTg?` Z0RSsWU4rIy2-pAs002ovPDHLkV1n@ITSNc= diff --git a/app/code/Magento/Webhook/view/adminhtml/images/btn_cancel_bg.gif b/app/code/Magento/Webhook/view/adminhtml/images/btn_cancel_bg.gif deleted file mode 100644 index a3d92e461f740967cc32aab47fb157ad0b0a5756..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 147 zcmZ?wbhEHbWMmL#IKsg2Da7o(iSX~`y+2wqKF8UAEe!cy758V|ls8&zAH8+{ZkheT zS^1qV&+qvyzou3H>@E6|?)h)m!VlKc48#G&pDbX7Iv^5cCj+ZM!V(#$$2QG@4lEON Lf(|GsGFSruXAUZ) diff --git a/app/code/Magento/Webhook/view/adminhtml/images/btn_delete_bg.gif b/app/code/Magento/Webhook/view/adminhtml/images/btn_delete_bg.gif deleted file mode 100644 index b0cbd8337dba2f9d4f77169872ee13800895a8f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 173 zcmZ?wbhEHbWMYtHIKsei=FFLsCr|F$wd>fiV-qG!m^pLi;>C;CtXb33({ts@mF3Hq zZ``Ru`R4`xzia%Mv z!a5)lWG4fwR>CBgiK&bZ0zAyFhCK=%mo~|?FOq0`EYfe~M9-utw6{_frSuyX$E+Wo+S{JDGlws`%;hx)E? z{JVblcoO}-fB*mhA^8LV00000EC2ui01E&N000F^U?7fU0BAs(KCJ4#5+Tp>B~e4J z=N@%5jf3#l;2ai;r;k&EAd3B1@%H)te zrFQdUUDl;}?8ph+UF@(V!EH;X>&6TQ;(+2$7O+Ac5DBuAfmQIqCzg(fA``EubTJ5? LVPJ6QV6X-NlQ<+x diff --git a/app/code/Magento/Webhook/view/adminhtml/images/btn_gr_on.gif b/app/code/Magento/Webhook/view/adminhtml/images/btn_gr_on.gif deleted file mode 100644 index b9f7bdeedbf052964092bed39af7ceca9ed05e05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 137 zcmZ?wbhEHbWMp7tIKseS))i>KAkJz^xN)z&!VDof9B*;z%R<;B~ K1}4E425SIopbOOi diff --git a/app/code/Magento/Webhook/view/adminhtml/images/btn_gr_over.gif b/app/code/Magento/Webhook/view/adminhtml/images/btn_gr_over.gif deleted file mode 100644 index 73afeb6200c4dd4752393730b631114da01382a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 147 zcmZ?wbhEHbWMmL#IKse?ailHwK&{iN=XPIOlys=kduN`@ zy0rewOWihSR-c*bzCAntcz59L;__3I7>EOkKUu&EbwDJ@P6k$i1%?JE94&-cR2&60 L{Wo(cGFSruG2ket diff --git a/app/code/Magento/Webhook/view/adminhtml/images/btn_loading-icon.gif b/app/code/Magento/Webhook/view/adminhtml/images/btn_loading-icon.gif deleted file mode 100644 index 7735ef6e5798b95dff4bb9620eaf72c326b5037b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 847 zcmZ?wbhEHb6krfw_`<-jc=6)@|Nk#ty7cACm*>u%`~Ca(hYue%ZrphA;K6U-zFoe2 z`R2`=Yu2nee*F0M?c1L`d2;{$eFjp1;(u;G*N|Xm#{gF&Jp*P&pkBp)QqD!Gi6yBi z3gww4848J6i4{5di79%Sd1?6!ia%L6xqzy4K(>G!$-o+*pwO3+Id7?fNRFabOTwzP zGenL}lrnAjz;?5vA-b2vhAFc(V4^@PV`uB4zBQUU4W3ay7O5nC*yS;4fdgv-pu5*<>|Hn(-{gjt4u>v0=H?uP};XReTu;fv2}|U_B&<^oL6>a z;I;`cH(Wp`0?>!bpC@SC67kUDIuanlsk@}z@V#*(mzDEr zL+>pfElm&EJoIL$+}v2nz#*{j;u+Q(S=@S!;Vuq$_#zn=8F+Atwdxr3IbGrE%NFo@ z_Le8q-n5*VrA8&2H%616ryHxKL6Bf=P?*AGD00+cMYFRU+Zyp>+1*WZ7!{qKB-k@F zZfDvzLD{v*qRJ^Sq9J*A?xHeoA*F>1FAptFXiRA14Ru>4S#(E|Z)w46&ChB78?agf z@*6PrRygpu8VVdbDUlm1aeSwQN6&?}8yf5aT`VR{3ePokB$l};CVDVL1kd1T%r#xI zl`+Z1V+$L@s-1~RI$V9K4F$$x$w!nosQ=)7qr`4vW*(rX6`|jt(bKDf)zWyVr5-?! zaV&E%VK}tun4^;CM2-!!7AA1m<+ZYU8mM$g^vZdgZ{qdPVL#ZZThgr6)a)uHBCzDJ t?!|-^9SH}RehL_Na!72L?$FQYY@WfPZ^)9y8l&0Wqo&AU4N9J1002xz6F~p~ diff --git a/app/code/Magento/Webhook/view/adminhtml/images/btn_login.gif b/app/code/Magento/Webhook/view/adminhtml/images/btn_login.gif deleted file mode 100644 index 93ed65b587745368989f298dc3720f56b2cfee97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1518 zcmeH`*;7+@7=}*(Ay~j5?q$mfV8o+9MMYs+hzpC<@#B6SByLeZiQy0X!@ z61`GEN2a0dE9lIEsxVEGljb@H#ya5M3HY-E&8pGUQW$O5kWREBoo-EqnlFG#fa-9= zgJh`q22@!vkORsLxaAE`bKyxQ-I4-|pO%`FL4HLe;y`cKLSqurs-Y)qIsr%BCGap6 z`m_I*-+-=6q#K9MjQRUX(4G!`+0d3TlZZoG8az&e{wk+;9d}5qdj>7IZ+x81jRm>GDhh4!8Hyb(heHluq}A znur-8j^@VEnet-BNQUL0~aSPSfcaV-!djs!y?U~*}>zHHFd?}Ncx7v7raI^=dh~IG~JXou`?6yL- z#Y$-ZX`?=N-v>e6$30zIZJ4Yc;la4wtwsZ8U4$s|W&MY})@$MAqa%UE^v%&1@)A?6F530|yVIdRxmxax5+ zb^Y_Gh0*Khh?U06@RMAQ!1q)!)7n%m8B6xrAQc*Whe?@M-eEOD#t}l7!1&s$rv+cj z9EoRGVQ-wQ{Qr`Cm%MlQ%XlmzVbese5g~5LwTxo9*ptI-%$!VRm9xnF$X1-kEN;mQ zA^Ir%l<9`k);lIrsS=^f-7`ky07aErI8hXC>qD8^kUpu{I!jNAGPW=*QpV(7CBrOn zL&&hW62BQ|BND3kRHbb2>}Dgucw>9zQT1>9wX(ihzhAb;^ZDz^bxSQ~_wd-6^Nj z!*VBAw}(wMOzBkaZNyxs=TN6^#U=;wT$j)M)Lgf(*%p0|&rnGK9&hf#OdVFs%b3L24P8St6L7 ICNfw900meLI{*Lx diff --git a/app/code/Magento/Webhook/view/adminhtml/images/btn_over_bg.gif b/app/code/Magento/Webhook/view/adminhtml/images/btn_over_bg.gif deleted file mode 100644 index 294ff2bfcff1af226e139fb01eb5116b34e620fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 147 zcmZ?wbhEHbWMmL#IKsg2YklGG#W8>C6o1~@{_Did-*bX~-rfE4?4qBSR{dU?_Isk; zpCLT MsOi6%Ly^H60AA-XEdT%j diff --git a/app/code/Magento/Webhook/view/adminhtml/images/btn_show-hide_icon.gif b/app/code/Magento/Webhook/view/adminhtml/images/btn_show-hide_icon.gif deleted file mode 100644 index 6670833a4102376c32b151e2eccff5a32903e1b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1014 zcmZ?wbhEHb6lUOM_|C}i|NsBLi)_A?^8cA<`MpBu&ur80HDZU_V-`3w+)3klH_7Pt zbi?pqiXhQ5ITAk_r2c+;|Kro!YilQN4`lt`B>Syi@=B%Zxn#bh-AO0X zME1uBUMiLUHO=75OtY`E%+IIt|C*$;FN**1g4B0M=HJfb-&^aqr^@?wrNaGMrNfEh zZ+dioPu9J&Ytioo)~B+>uhnWVbY*^2CATYt{pHrSO=$+Nt{(d_%lyRToGWDtzrTGx zS7v-NfoEfi?jm=#!yU2jk1e^~Vf$cS*4;fz?xu4;uUELeWB$LtzwXaUcu+3=YWLKW zQ}dVj@*IxmzgQ&mW>?SIWd38xLhlRtE-i2WUN7~ofbY%CGgoW%_BV#SEZ{$xF7kb* z*}3^O51KTNXUM<(o=5W{yWhV$o_4|k^oUQOj) z6D5DALhk*8t2atyzSW3*Ym~WMp?;(*;qijRM@KilKRWMDkK_Gf@k6aqFLz9SS|Rys zzSX6A``_=L{Qds%W?#^SYRk(da&K;(y`RDT{=~|!)uMaCIUl!bzCASWXe7tJNbWzs zejJV$U>F6|4gtlVEQ|~cj0`#;gF$(Mf#Wg*Gl$F%rk18=`CmLS76R@{vJx#<4hk=B z7T4op-6Ubc-o?V8z3j>I(16UrQ$0xT}H@p-UiEIPp%pvt_+p@AXb=S7Cbd9ogD2CoVe6J&(b!`?7H rcyNk^foI=^gkp{4nI@ucA3i8|IJde+8R^Xl(rA3E6lTQ6!e9*mIK4sD diff --git a/app/code/Magento/Webhook/view/adminhtml/images/btn_task_bg.gif b/app/code/Magento/Webhook/view/adminhtml/images/btn_task_bg.gif deleted file mode 100644 index 87280126cb087ad7bb2bd3a0c3d88bc86a49b78d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1735 zcmV;&1~~agNk%w1VVwae0OolB`i30)l_mY8F8-`D_!^7j< z)$fH0{Kb{;h6?<|mHfk$>FMe7^YiBB=IZL|@9*#Z%9#DmoBq?D{?(tv#KiyCoBr3F z`@f9b+}!Pp8UE3n@bK{SoHG8`p#8^}{Kl64xJ>=gk^Rh>|JkAJg9y*h&(^t?XtS0nJxUlkN&ei?9Qw0phoPlY50O8`@4ke%A@bh zr1O|H+S=OMo>}pbBk1Sm{?(cO*O~Z!8}5Px_pD*_oiyySZt{~U{K1mnkTvhlr~JT< z?STW=v4r}*Z_TrnXItQ$H(oWN#~9x`?r7XgbC||3iyE_)YR1e zu{ze)*7vJl`Ll8Q!FBkpW&FaF|Jk7Xk0JSg82Ee@`GXq#pDX;DDE+80`F$4oe;4|T zAOG5-<>lr1ei!b60sgNw`G6Sp_4NP%00000000000000000000A^8LW004OaEC2ui z0G$CS000O7fO&#WS{`41ejE#eV`)YaD4*xB0K+}+;a z;NjxqR^e!A`!5AVZ2ANwOrwISs7P@o2K8%a<@?nnbB! z+qZE4(BTJr4xw7TUm@{kM z%(=7Y&!9t#9!C*x*D7JH0+o_zM{=bwNED(Iku7Ha6Bh$gD&qHK`hCIfgxD(R$@R%+>`m}aW!rkr-_ z>8GHED(a}DmTKy$sHUpws(3K)D66o>D(kGY)@tjmxaK;mt7$>1>#x8DE9|hu7He## zysqTyvCKB>?6c5D`)jgxEGzA`*k-Hkw$D;)Ew|u?EAF`De(G(x=%%agy4OF!J(MTt)bR8|P^zzbBM=kZ#R99{F)mUdOb<=h{0LRy0hb{KlWS4FB*=VP&_S$T> z?e^Pn$1V5Vbk}Y7-FW8>#{+IYK)~OC2QK*Fgcol3;fN=$_~MK=?)c-7M=tr~lvi%~ z<(Owq0N-gnu*T=0hc5c)q?c~`>8Pi!`s%E=?)vMn$1eNqwAXI??YQT@2Iq97V8ay# z1TXyX#20V;@yI8y{PN5<@BH)7M=$;K)K_o)_1I^xz4k^h0R;;ZP+`XZ83mMY{`u&q zum1Y%x9|S@@W(Iz{Pfpv|NZ#qumAr1_wT>|Tp+_1=m3EgEP)3H*Z~3-$iN0V@PQDF zpadsK!3tXNf*8!81~tzyW4R!y4M~ zhB(Zj4tL1I9{TWyKn$V~he*UC8u5roOrjE($V4PQ0SPe(0uU&WhY5&b3Qh1rD7MJO zE_(5cU<{)e$4Evprl1Nh00RV?5rGNJKm}RIKmz7S$2!{aj(E(Y9{0${KKk*GfDEJ{ z2T9068uE~cOr#{0(8ivCO65+PI~erlb{TxC`U=kQkwFV ds7$3QSINp&y7HBw3T6%d%u!@H}strfu7@EPp9z+crs( zrfInEq^fEZMVh947L4N<$MG->+|N=J<#M^;9sx;F6hw=n$a0hd$nzY50Do0g(Qz1t zXhvO;QqAM>04&sXO)i&Zxn8fn?^rd7@J5;bH=k>k_~^|(pK4fjHgEU!SKDj+*6Tn1wx_QC*ysNZ zjX`xyt!?cbEgjuGrCq%fCe}JmnmR3W%Jf;YBm3vfU*JA(;gSW5m#&z;eC3)6tJiL5 zU%zon!{)6!D!1?4Q?z^Ufr6O_kL)^p^u)g7C(j%@dp>9Xh06h#u3RraedBh>wLABn i?mf8k=<$uG&#t_9dExb&v+v%Y{P^kUm#+r}8LR>E9h21n diff --git a/app/code/Magento/Webhook/view/adminhtml/images/cancel_btn_bg.gif b/app/code/Magento/Webhook/view/adminhtml/images/cancel_btn_bg.gif deleted file mode 100644 index d52fb2562c179f483538b59f0433a257946b48ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 147 zcmZ?wbhEHbWMmL#IKsg2Hd6YPE6ex(=y&l-pR1fc6vKN!xTfJ%8|ijX`Q6muQ5X8CeeI%!_`Iy}jbZnwf%eS3;8-N_pM~v$RQ0HY z_t?zof?e~CTldz<U&r0fKm9qulm)@_N9{Xwx9a2i}|5*?tDn#T`TyT zYv58C;b1QLo^SfEiu${+`l58&Jpljz|N5eH000000000000000A^8LW004UcEC2ui z01yBW000N&fO~>_c!Pt5hJ<@{F+u_cMO|Tvf`w8vURGavP-bErlm#3XZF;7sB2;h% zdlzyGB6&z+r*QotH3O>`2pMkewtyhJcwcfejh~ iPTVB&aHb3y0|pShc;X?EpaLO2M2PSq1gk-T0029M^Fm+% diff --git a/app/code/Magento/Webhook/view/adminhtml/images/cancel_btn_over_bg.gif b/app/code/Magento/Webhook/view/adminhtml/images/cancel_btn_over_bg.gif deleted file mode 100644 index d24eb118385de13c4b91f7c0f362b6b01e7267eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 149 zcmZ?wbhEHbWMmLyIKsg2V_xa+HEnZmz$%n* X)uQ_VPrw8T20_JBB{ow+S{SSWVpBMC diff --git a/app/code/Magento/Webhook/view/adminhtml/images/cancel_icon.gif b/app/code/Magento/Webhook/view/adminhtml/images/cancel_icon.gif deleted file mode 100644 index 1fd7cfd6a23b77660711f95400ae18e9495bf9d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 600 zcmZ?wbhEHbN< zyZ#clJ^BB=e)#A7vCl^~{y4kq=f(ZsE*}22bkfheSH7;E{`c+EkJIaZzj*Zb-Se-D z`u@Ip@Ns_Yzh6JUo!R@QC;RJ;We*}$-Y#l=oN0O2SM=A_Gk@Pc`*~sC{Ycf1+vfk+ zxBlmyORuIBJ*^44AEEO7#+e_dwmwYIdtM&!D9z+Sw8ochvtLz*Kdbb8J)`19eejE# zfWL1Z-;Y#z*%bTl^`p<*=RHW&|FXF6`?Zrl_N@7JaqsVkH$U%M_#j;A=e?^hY6D-E z1-z&W{(f}(?`QWP#A<)pG4K1Cov)@8|313w-`kgeAK&}6d;Kk2hW}u|Kn>89IzIP>@L%UGt*nJaJWkRi({pDx8R zheawqh*6t6k;ht^RYHPQI)cYYELx8}HZIN1C(TiVU4?;9AURpUA}!4&^jtD8pJ_@8 z2iGMoj@v1`kp_a|%xQ+JR&x4cYC;hKi)-Km`VC0D%b;SpWb4 diff --git a/app/code/Magento/Webhook/view/adminhtml/images/config_tab_dt_bg.gif b/app/code/Magento/Webhook/view/adminhtml/images/config_tab_dt_bg.gif deleted file mode 100644 index 376d898333859ae80ed830551245c8ffb64ccd65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 383 zcmV-_0f7ETNk%w1VaEW-0J8u9cbTMoou`bcvd`V#z|qvHzr>ofyUW?zhNZ5y%FejU z&V!?@$=KS_-roQK00000A^8LV00000EC2ui0LK8x000F4u*pfQy*TU5yZ>M)j$~<` zXsWJk>%MR-&vb3yc&_h!@BhG{a7Zi~kI1BQ$!t2G(5Q4uty-_xtai)odcWYXcuX#v z&*-#z&2GEj@VIs;jK6uCK7Mva__cwzs&sy1Tr+zQ4f1!o$SH#>dFX%FE2n&d<=% z(#-+{(-Hsx1_#sG009L9(cakz3ee;L3km4i;NtBD4Aa%u_V@Vt`uqI-{{H|23LHqV zpuvL(6DnNDu%W|;5F<*QNU@^Dix@L%+{m$`$B!T^Ly8 doJq5$&6_xL>fFh*r_Y~2g9;r=v}m#j06VTc)kXjS diff --git a/app/code/Magento/Webhook/view/adminhtml/images/dashboard-close.gif b/app/code/Magento/Webhook/view/adminhtml/images/dashboard-close.gif deleted file mode 100644 index c4b6bbc9f7fa4fda2c9fd2c98799fce3c5011a66..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 373 zcmZ?wbhEHb;d`SbJV&zCJ*cKPzojV&gY?wcP{>P6WZ{NOs^XAP97cQJRb7uGM-B+$$S+Qcp`t|GAtXZ>m?b`S6 z-+%k|?Zbx;Cr+F=eE9IMU%!qYKmPCEzk>%4zJ2@l_3PLB_wV1gZ{M3YZw?$d@aom8 z|Ns9pU;xFREMPGm5DD@V1KT8rODbv{SD3cUXcOr6iQ~NKlQ`Qlr-Mz~?PO%p24)rW z$vhe6(OsWU?i5tL`oQA!Lm%$&M@pL)v*#HB^_QlYnpz}SD#%J0Sn^nynpjL=WfNiJ zo@i#?X*omN(o93z(#Vv>!h%6^!V+~+ep7P}OHoS!_B_sgexndGK2AASC4E7C Rb0%fO3=<|6b45o6YXHc&y^jC@ diff --git a/app/code/Magento/Webhook/view/adminhtml/images/db-graph-bg.gif b/app/code/Magento/Webhook/view/adminhtml/images/db-graph-bg.gif deleted file mode 100644 index 5781f67e63c0fb4991fe8df7349e22e8a7fd1847..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 820 zcmV-41IzqJNk%w1VF3U#0QUd@z`(%w_xAz<0s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= y{r&#_{{R2~A^8LV00000EC2ui0096p000OP0PhJLNU-3*aRw7A90<%{Kma><6^=y! diff --git a/app/code/Magento/Webhook/view/adminhtml/images/db-graph-bottom-bg.gif b/app/code/Magento/Webhook/view/adminhtml/images/db-graph-bottom-bg.gif deleted file mode 100644 index fca47802095681aacb2dbbeb9dec5f9b914bea8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 823 zcmV-71IYYGNk%w1VF3UU0QUd@@$vEQ?(XaB>*(m{_4W1d@9*sF?CI(0_V)Jk^Yird z^vul6_xJY=4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LV00000EC2ui0096I000OS0PhJDXs;f6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= t{r&#_{{R2~A^8LV00000EC2ui0096C000OK01F5l7=XY40RRF506S9NjfVgL diff --git a/app/code/Magento/Webhook/view/adminhtml/images/db-graph-line2-bg.gif b/app/code/Magento/Webhook/view/adminhtml/images/db-graph-line2-bg.gif deleted file mode 100644 index c10bde98dba48117836d15a93b08e165930d6e37..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 815 zcmV+~1JL|ONk%w1VF3UO0QUd@ZiIkyiiUB7fOn6Jdz6rTm5~Mp1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= t{r&#_{{R2~A^8LV00000EC2ui0096C000OK01F5lNMJw!00II606QchjSK() diff --git a/app/code/Magento/Webhook/view/adminhtml/images/db-graph-x-bg.png b/app/code/Magento/Webhook/view/adminhtml/images/db-graph-x-bg.png deleted file mode 100644 index 1f983cd9f0786ba2b296ee512be51cd7fb8478a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrB!3-o#&#{0gmUKs7M+S!VC(K#9UIO`&C9V-A z!TD(=<%vb942~)JNvR5+xryniL8*x;m4zo$Z9paj_=LFbK64ky)ZJ+J97yqbx;TbZ g+)7GtU}#_fn#;q$m?F|%4U}Q00004XF*Lt006JZ zHwB960000PbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU#08mU+MSiL1 z{##Z%ecArCvj4!o|CNop)Ad%4-w`dro4oEuh1>p}nxVq(k+tk~qvol{@M@jqioA+) zq2>O*yk?o>{%~w*lfq(};)bv45;ewsHGQST@Eb#Q4kpKnvh0Jb>Hm*@dZy=5dWc_^ z;{Ix8TanGWs=fcusInZ=U2~mEmHR;rnW6V1lszb#ecyp|8sGl8U{hn8Oh^&S#Cj|F^FR zJI;Bg=CEgvbfoD2l8;V`-A{_&kbk#sp5tYid!9t1Vj)MX zfUD?<&uspXi-#_8DNoBTRn2Owa2q|EFjmg~hJ!MA+WkH}bhd6(o$-G`g{{`75n0zC zSlf_vvJ+w1d8g_cZ{GiTZ7y;ldcJfyd@?zM;wWt2rp568qm}-loi2Xh^+ripk>Z%h zo_D)&_DxU{JIymyp?J4{vDUa#pG&aYqEU_BVVC5bmc#z1r2n6ilehA4uXcE>c}9*u zwp)DtfP54}&ij#({hyty*qatf(TcI^`-q79jE&XM<87bk3P8{dOw_N=++mmFW0&HA ztmvK1nqq^uGIcHeb#fzj;QnuG|F5ByxbBv@?U04K|CorOn#P&Sm3ye?CQ@`|h`V>K zZ&ZDY|G29UGRnv3xP3f{K3*E)v!sroA3Ossl&OCADiUu z7#+{GYpv=>H<&olBsExkn7@{F z@IDgyAiw-9s^qiN%>U-Ue78OOg8(1Hj{B&Rq8d(mdb>{Tk>Go1YuIWu$#;!)v?ENi z;Hss4(V67ubDLB}gw{=)xAnlvsADk6+1$HDUl^BeQq*Qw&IuFye$>EJFbO8Y-29bQhZ>Zi7kgy;;Y|sIWdFzn+PUz5L09bFLxhpTZNrkfj00006ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= v{r&#_{{R2~A^8LV00000EC2ui0096T000OM00I0PNU)&6g9Wp-3kU!^f9jJE diff --git a/app/code/Magento/Webhook/view/adminhtml/images/db-menu-bg-up.gif b/app/code/Magento/Webhook/view/adminhtml/images/db-menu-bg-up.gif deleted file mode 100644 index 59ca66db0b856aebb294a0a075616c75185efd50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 821 zcmV-51IqkINk%w1VF3Uf0QUd@+1c5<(9^HU&F$^&vc$*#|Np6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LV00000EC2ui0096T000OQ00|fvNU)&6f&l~&_{T6?yMO>Ypo5zZ diff --git a/app/code/Magento/Webhook/view/adminhtml/images/db-menu-bg.gif b/app/code/Magento/Webhook/view/adminhtml/images/db-menu-bg.gif deleted file mode 100644 index 5bba621a810b9c03e7d66acf5a082ffb786a1882..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 824 zcmV-81IPSFNk%w1VF3Ul0QUd@*yrib-r&^a=h@lW$JW^G?d`+R(*OVe*5>F52?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LV00000EC2ui0096Z000OT00AHvNU)&6g9HTxAYkC1!))yW0suRh CpP`Ka diff --git a/app/code/Magento/Webhook/view/adminhtml/images/db-menu-sep-last.gif b/app/code/Magento/Webhook/view/adminhtml/images/db-menu-sep-last.gif deleted file mode 100644 index 998916da9c8c4cea36fee440cecd5253103e842d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 826 zcmV-A1I7GDNk%w1VF3Ul0QUd@*yriZ-r%*z%Guf3?d|Qp&Cj&P$=2rR|NsB8#K#H> z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LV00000EC2ui0096Z000OV00A5rI52>K1PBut<8 diff --git a/app/code/Magento/Webhook/view/adminhtml/images/db-menu-sep.gif b/app/code/Magento/Webhook/view/adminhtml/images/db-menu-sep.gif deleted file mode 100644 index c8974d8ca4db39e972f0ec5e788090ecbcc6f893..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 879 zcmV-#1CabjNk%w1VFdsp0QUd@wa3cO-r&d9*wp0b&EDX&#>v6a)4t8m!_d;$=jqwm z+3oG^|NsB8#K+d==noGM5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LV00000EC2ui00jUd000O~022rl=%Ap%g9sBIBw&yL0D}M;7;GT1 zAjOFl9bB}SaihkLATf&MIPzmjj}!-}q!^$jfC2(y8aRNUCW3!BbL!lgt!K}6K!FAX F06Uzx#A^Tm diff --git a/app/code/Magento/Webhook/view/adminhtml/images/db-menu-start.gif b/app/code/Magento/Webhook/view/adminhtml/images/db-menu-start.gif deleted file mode 100644 index 11ef78430b8197e0d5307a42870b86b6f6cd22f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 890 zcmV-=1BLuYNk%w1VF&;s0QUd@&*0*}(bUi0;MC;j$JW@x(9+oF>Dk%Y?d|Qn&e8w> z|JLT{3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LV00000EC2ui00;mg000PA01XHnC~$$ng9sBUT*$DYK>!N_EKD%5 zqC$!nEhfacQ6oZ*A3YufIZ~uSk|zhKTsa_tfR``@Bp^VuCV>P6a_TIQ;GfT*K!XbX QnXRbNqV19@O&SmYJ2id5DF6Tf diff --git a/app/code/Magento/Webhook/view/adminhtml/images/db-scroll-bg.gif b/app/code/Magento/Webhook/view/adminhtml/images/db-scroll-bg.gif deleted file mode 100644 index 2208140ec50f887a585949f72bea0755ed7a4687..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1551 zcmW-gc{tQ*9Ka_!HkDjkyV?pVL|eHYX}1cy}fMC*cc9n zlS!q*mDSWR8&z> z!RnxObaYB2vZaLuDwVb&k!5CPW@Tk@g~Ha>wvv+4(NRu(d_r+aNnv5(`1r(!4;}K& z&4GczExDWlL2}vVm$^BOJRse#vHL*mpA(oIEn>;)`JUuTOXzJ2@d z-8(oO9vT{oKp?`x!jMR0cz8Gpg^GxXh>VPkii(Pkjz*)=F)=Z*v9WP+aq-}z2?>db ziAhOG$;rtnDJiL`scC6x>FMbifZDgcvaXBJOJ7TtTNj{3M|$KfD)kZ>;(3^fVOU6rl%Lw^R0}2 zP#d5;I5;#kGz=OV0qRCM98lKSIM6ULF*!L2bWedCKZEW-Q=rh34`nnWs<0*RZOn{v5)YikQM z0}|4f?uLCGqp#1`n}B_{19R)@!^7#yF8XQL@LFLuVY{xW=?Y;`%oP&_YWUw%Q!$w) zhl1C2;PCLHO26(!TERlmS1-5(t?1a#6~Po0TQw}ywcykY6R$jS<}k{* z4r3c(Y$h|s+86#6Z{2J;XwZlG6CFIEY0h&vq^X~F5l?SZ+;tg}hZzJwN(#83R+6*L zKPcl}`YDNAZN-F}|K7oQp0-t2-s5yOl5(Nk7N_~2xpz>~)OFm2q>wrp+e=aXRNs*l zyo$Es_iAeF2kwxO_5O2b_vue*Sy@M_xKq8Ow7TFn7Zog#9!`6X{(R6NLp4G8TPR#f zS*3CTLzjjlAD%e4qmpo(@#F42mQM6uop93whi_>3JE0WNB859;aDod{Rrl6GD@Bd- zrinHx4j9$(BM;qGQ9qc4Lg7bcIaVkH!%X6YRKFYa8KG(IjzVhOkJJuRj=oVCp@(8U ziaPluV;XIQu$YNFp5;D+vS5r%#~Lo`pNh9)M(QM9(&ReFn<-0Qn(qD9;B>kh>XmDb$29p&RtRUmUj9o3 zS!sSC^`3sNua2c#HoD_pNs;GXTld14D_NzOh`X9x4C=NLHZSP~XQ4Pbj#FBemRIgx zUQpHOQIhYxv}k}Wqgqy!XCXSU6^#sA!)js{$Fm9|HX0I&HF<_rgfm_h_;zzguj&S6 z!*lrV+Xwi>q3!6U+O{hd-gWHY5Pri5BHM?=iEBDX9#8A6B(HUQ`89|;(92ZW#<69Z zaIaiI7aTDXKzyB#0tU~#QqaP^9wTU-zx&`k4W?d+Z&7p1@ni1QGcs;bad=IjDMZ{1 zXx9s)JpFLuan5R|(Ys$nte>*IYnT=-<{9 diff --git a/app/code/Magento/Webhook/view/adminhtml/images/db-scroll-but-bot-roll.png b/app/code/Magento/Webhook/view/adminhtml/images/db-scroll-but-bot-roll.png deleted file mode 100644 index b52d7868e4b375b1f5ae7cec5559a0306ca3b1db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 565 zcmV-50?Pe~P)gwa<+SCF@$&xu{!mX(@9*%tyS&uY)y~h))6>+qxVYNe+rGZPRaI89 zv$E;x>)+qsxw^am|Nm4}RJFFY>g(<0=H}<<=-1cSuCK4Ht*vWpZ0_&xWoBklQc_M& zPL-CIv9PgGQBmUKZ9%F4^p(b9T(dbzr}U0z<$(9y%g#8OdG;Nam_4fC@y}kYX{Jgxp`S|$v z`1tns`1<+z{QCR)`uaOe=qdmJ0NP1JK~#9!9M4sD!$1&3(H66roy1{gPNX4?hkE}D zij@CX_nd;Zt%O3R13xw{aTGkSAgG)Q)}i5vZD7Bzg+nxf4}x(Sc13Np<|dd%N=gQO zq4mdjeD-{L?iScU+tvi*lVzGd_GTj*X4$?e6I6>gVX_zP`WZ=H|D!xVyW&@9*&Y z`ugAB-;$D&wYIj}+uOOiyONTVva_=P|NrXi?a0Z=?(Xl`*Vyjw@9FC5t*x!PyS&iQ z(Zj>Uwzjv7jf{+oi}&~V%F4@`nwrng(2tLg*xA{wtgZO@`H+v0@A2``(bABRkmBRx zj*gDs;NZf-!m+Tixw^Tap`oOurT6&xv9htq$jIQ};nLF5^z`-Z?(X&W_w)4h{QLX< z{rvg(_`SWo{rvpAyuA1L`1bes`uX|%`uqC&`m@^VJOBUy-AP12RCwAP&()TMFcd`5 zn?@RFcOQ3m7l@Kha`XRxGcfO`_F4sH88GFA30qBzF%oDrlEN!g;fh)rI}Y1z&d_@s zwtxw#X;tLb+{&-L&AroFKwTK~I-j51Js#lFb12Ka@cd((rWaH$9f3|K0XMuHUp=qS zP*#(E|Bx9mygB{cD2zq3G9C(a{v{2-N{#<0_r~ir9axl})F?Mv;HXUtr`-T%v&cH< zi>GeJ6`Eb>^#X3a%BJ-h#a1wxM5Lgj>*;SdBaF0RvDhz<-@e})M?X=r6P*7EFaUxE VEdDjy(ait=002ovPDHLkV1ne?QU(A3 diff --git a/app/code/Magento/Webhook/view/adminhtml/images/db-scroll-but-top-roll.png b/app/code/Magento/Webhook/view/adminhtml/images/db-scroll-but-top-roll.png deleted file mode 100644 index f3e5f229b82f9cf69f4a670dfb2782ea1dfca596..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 610 zcmV-o0-gPdP)J3@bU8P?(Y8n{g%eisNLz5V?Byu7^m`1tqu`1bes`uX|%`uqC&`lf7H=Kufz>`6pH zRCwAHkJXZdFcbwZ?u@&yySvQ_1QIgQ|NobT*HeAEs-fRMtqw-xwRyOgq~Fm#wA)F6 z+}3sHc5WA>Sc30IxzNn+ScW4QnZah02q`tXn%g;3{0OQl%Q-DoYw03MWeB@nmTRu* zs}Tx?bx{wWNJ;$`KZF8P1rP)ugqQOD__xcHS2{4ArXXdoI{zCIg-d9pNIN&HINlm~ zAsa`=`PpRh@_hND7CHyh%mn9HSY4Y@T3>2{D6NHM04XtbYa&IODQ3-Ffjybm(ugo! w@+L)js(`^@e6qe94ZnIl|LOkm;$MIP00Yo5<2w8LTmS$707*qoM6N<$f{A}oD*ylh diff --git a/app/code/Magento/Webhook/view/adminhtml/images/db-scroll-but-top.png b/app/code/Magento/Webhook/view/adminhtml/images/db-scroll-but-top.png deleted file mode 100644 index 51a1bcabcc0baeb84616ecae61b53e0d9a451c6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 631 zcmV--0*L*IP)+SCT{{GI-&*;P(b3Yw!^F?e(BI(Tq@|_0yS&@m+}GFG@A2`+$HyQ!nVOomwztsG(Tt0W!ok7H%FDB}v+nQjqM@R#t*!U?`H+y1>FVm@ z`S|#~y}kYX{Jgxp_xSks_xSqx z`TY9(`uh4Iy_3=a008evL_t(|+7ypfa>GCr1fR$vGc$#mnK_ZPr1jGMFB188s;8?O z8jbh-zSmva+qZFW=srWO7DJkiHWwSM5D*N&^IR+q3l~ngBpGVMY!*wUO#0mlG1KA| z@;t$U6FnMasp4t^t5t%HFnpR#q^1UnVJp?j?E0=HDc2T^#}7!5`T65so#}{_U^omc zHQ(u6-Aw;9CDvM+8hqCA{kx1-)!LB=anWr4o_y}>s=;8}i4>Rg>*fwVEw zDO-q8o)tup8m5`k&LoW#E~GAEhKO~Fjx<1}(tTRK^iJRUeed|^`ru!H0RU(?H7_t9 R_y7O^002ovPDHLkV1mLmZ`S|- diff --git a/app/code/Magento/Webhook/view/adminhtml/images/db-scroll-roller.png b/app/code/Magento/Webhook/view/adminhtml/images/db-scroll-roller.png deleted file mode 100644 index 55d53b9225b76eb64508979a85e19630635f22cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1258 zcmVwUr zwYIpjv$UAc@I6qV+}_^3y}6ak?pKDyV2;UZV_~V=cIdX%u2p|E+c-fV}gh_Kx`T&8}5 zi9~g|w7bAtk<4$0g-Le0f1=dU%*H)yvT~%>m7SzjgQ|nF-q+IHVREmnt*vN_zh{`x zP>9Bv*!Gvr?|H1;YN6G=xViE2_jah*JZiB%YqCjtyfIOraHG~xjLEI7tKRD3d!f{1 zl+9yfV_c5Omd@~7h{a%ckd@Z-X@Iy+cB{g{!CRQo!otQfhVfeW26! z_xM$d$Z(v|yS%q?Z+7eP^JFnXx*|M{;gss~_S)@f??CN znKH=8?AyMA${(k=T@As!Ke?|ppARsHN(a$#ZaLuYK)2*|zHCY(c)c9iA^jsB$ z_Idy7G_Pi1kdu4ALDzMcjmw+)23_au>={&5`F5Y?c&XKr%gVU=)+RFsMaAn+W?r`S zHFV()PCmMD34@f>Aq%(JTnEaSTvnCVUp&R2qGJ5&QSZHoVl7_Vwncqw7}VAC0>Vmo z<~)wkX*!>Fu!2EbdxmG^@@Y@g11FsDncKaYK~S*yFMd&+1c~+^RltA?Ck6X1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= q{r&#_{{R2~A^8LV00000EC2ui00IC5000OH0MiX%mu()qfB-u|{gXui diff --git a/app/code/Magento/Webhook/view/adminhtml/images/db-tab-bottom-mid-bg.gif b/app/code/Magento/Webhook/view/adminhtml/images/db-tab-bottom-mid-bg.gif deleted file mode 100644 index 8464f9a18272673469b17dac2827319751f2d931..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 809 zcmV+^1J?XUNk%w1VF3UG0QUd@&d$#1>FKhuu>%7G1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= n{r&#_{{R2~A^8LV00000EC2ui00964000OE00lTp7Z3nD9-NA) diff --git a/app/code/Magento/Webhook/view/adminhtml/images/db-tab-bottom-right-bg.gif b/app/code/Magento/Webhook/view/adminhtml/images/db-tab-bottom-right-bg.gif deleted file mode 100644 index d4cca0057dd7a01f3b31a6541098dbd22ef98431..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 812 zcmV+{1JnFRNk%w1VFCaH0QUd@>FMd&+1c~+^RltA?Ck6X1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= q{r&#_{{R2~A^8LV00000EC2ui00IC5000OH00*SY#*W>*fB-v4dX$R* diff --git a/app/code/Magento/Webhook/view/adminhtml/images/db-tab-footer.gif b/app/code/Magento/Webhook/view/adminhtml/images/db-tab-footer.gif deleted file mode 100644 index 615cb2ca21bd9197364cb534d9f91ec6c3a2ad86..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 809 zcmV+^1J?XUNk%w1VF3UG0QUd@x4gf*&fV1G?*jt^1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= n{r&#_{{R2~A^8LV00000EC2ui00964000OE009IL5D)-6DA|fM diff --git a/app/code/Magento/Webhook/view/adminhtml/images/db-tab-header-sep.gif b/app/code/Magento/Webhook/view/adminhtml/images/db-tab-header-sep.gif deleted file mode 100644 index 038f92c4a48190fd8cb039cf442ebd4ef22b325b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 832 zcmV-G1Hb%7Nk%w1VFCad0QUd@ZgO*MadMrWo^^F~Z*+8Vbak1TnQ(M6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LV00000EC2ui00ICR000Ob06!HFNN}LRf(Q?MQpj+j!-fzS3LuaP KK%D>q0RTJJ_?Z3x diff --git a/app/code/Magento/Webhook/view/adminhtml/images/db-tab-header.gif b/app/code/Magento/Webhook/view/adminhtml/images/db-tab-header.gif deleted file mode 100644 index 572aa19741ad550b3a0fbaf432a8dae9a3959d7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 809 zcmV+^1J?XUNk%w1VF3UG0QUd@o12?;b#;P*f&&8s1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= n{r&#_{{R2~A^8LV00000EC2ui00964000OE00nKT6A%D9Tf>O9 diff --git a/app/code/Magento/Webhook/view/adminhtml/images/db-tab-left.gif b/app/code/Magento/Webhook/view/adminhtml/images/db-tab-left.gif deleted file mode 100644 index cf39fda5a86ffb37bae798266e924fcb892ef2a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 808 zcmV+@1K0dVNk%w1VFCaF0QUd@>FMdRv9SUI0s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= m{r&#_{{R2~A^8LV00000EC2ui00IC3000OD0Mi8s2mm`bBZzwd diff --git a/app/code/Magento/Webhook/view/adminhtml/images/db-tab-right.gif b/app/code/Magento/Webhook/view/adminhtml/images/db-tab-right.gif deleted file mode 100644 index 435a9e572b4783114932a72de12d309062d7fbd9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 808 zcmV+@1K0dVNk%w1VFCaF0QUd@?Ck8av9SUI0s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= m{r&#_{{R2~A^8LV00000EC2ui00IC3000OD00XcK2mm`#kceUc diff --git a/app/code/Magento/Webhook/view/adminhtml/images/dotted_divider_dark.gif b/app/code/Magento/Webhook/view/adminhtml/images/dotted_divider_dark.gif deleted file mode 100644 index b4f6c700caf1bc98066c5dc1cbdb4839c0e1a9ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43 tcmZ?wbhEHbWM*JwXkcXU_4Q?7U{L(Y!pHy=&;ha;Kr#$WOfEqT)&PyM1v&r# diff --git a/app/code/Magento/Webhook/view/adminhtml/images/dotted_divider_light.gif b/app/code/Magento/Webhook/view/adminhtml/images/dotted_divider_light.gif deleted file mode 100644 index 538a9262ae8dd234af9e6f086985fe6a110c1f8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43 ucmZ?wbhEHbWM*JwXkcX6y?ZwU1B2pE7Dfi3fDVw&0Fq%~VsZ&$um%9L69$9; diff --git a/app/code/Magento/Webhook/view/adminhtml/images/edit_icon.gif b/app/code/Magento/Webhook/view/adminhtml/images/edit_icon.gif deleted file mode 100644 index 8b277aa621877b1cd10e1dddb8d57244334f60f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 561 zcmZ?wbhEHbZ+GU0SC;e*1p^)!P`U&=v zmY#d?)N|#2r|D~Ky5?$UR$P4XE_voMw?#V)OIl;5E}FUbsNIAmPBYiJ&fjWK+~T%i zt9{cX{ep&7C(e7VI^fgU%Rm$e(0cbM1pAG>vb z`tBq4lb4&-^y*|)`EERM>+Q#zFW+8&_Da97$!pa?=h+*KE4!_`=KcTwpJC7g#h)yU z3=EzOIv|&V;)H>{ufem4%ZA^MUCD^2sfSHSPG8hmmYcz}$57J5Va{A_c|K28DP`AX z%a>{DFbhlbDmrf5;9bjVeICc8WDLWQMMj7WTSDhKf z8H73A@7}x5DagvM&#orM J$;HB84FDx;uA%?{ diff --git a/app/code/Magento/Webhook/view/adminhtml/images/entry_edit_head_arrow_down.gif b/app/code/Magento/Webhook/view/adminhtml/images/entry_edit_head_arrow_down.gif deleted file mode 100644 index ea3aba2a2c61869a2b69f2cae7c8c01fe210a9fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 677 zcmV;W0$Tk?Nk%w1VG{rn0Oof9!qV8i%g%e0oZjZ??(y@4oTK9E?0J%!f0v(pm7Rf^ zp^KrYhMlE}pQe?nuzHi5h@Pg2pQnSHqm84gf|{apjh2I&qK2KMeU_eon4oo!n6Jah znXI#fo1>eqw1S$Uy~)mwq^pITqg;1_maDS2$Ih3lvWK3gu)oBnx4gQ@%%!!vXn~8R zy1=@}%yNvCoUpf*tFqhU<$su;vBk=GlA4U7seqZFo3OX4y1;#voqLj-p0m1{t+S-I zyT{Ymrn$h1p{Sg%wJS|qb&r?H*4>Jssodk{ag3FTpr^jj*3jMIjG?J?j+T9Dub;BIhn}U1qN=F4zN56dlBck$ zyu;Ps;=Rkzlc%nhs<3j6mY1uskfyA5keE4IXOgF`+T`ca-QvvJ-__vb>hJNz)Y^cU zpvl+VCrVi7?e2b;pM92|000000000000000000000000000000A^8LW004IYEC2ui z022Tb000O7fOmp}b^-^733h{vga=4pARsPO6#@v1f(RNpPXwNxM=LcmjB;rxaH*=Q zDGwQg2pB$fw6(T%OgD;m7ENLX1_8puP{1kza(8wT4Fk?BbkWgX&N5~NcXAyhY~4Ro z(j(p70t|NwA|`L^Z#&ULW9)Aj5OxX;Ms50SQfhQr``Rpd5yXz12^EUCS?C7L6)Ozg zl&BIxSrQ6c=4jLiWTQqc3oZyMutr0eI4D!5grNh?2SIWcI3a=qfX$mqVmxqgV%MDy zAvj>^(qaRR4Lq3jSdfem1sfd5SV$ls0faIRA~Y?&Q;| diff --git a/app/code/Magento/Webhook/view/adminhtml/images/entry_edit_head_arrow_down2.gif b/app/code/Magento/Webhook/view/adminhtml/images/entry_edit_head_arrow_down2.gif deleted file mode 100644 index 47ff52de0c6bb3025d972fe99ba16be82bca7a43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 670 zcmZ?wbhEHb6lM@&c*ekR?DWYq7tXzY`{wM$3tzu|UAbZH%QvszzJGuE!nyB1eti7& z>CL;hXD?lN|MA0xE0>=>fBxe2s~8 zuU@!(>E_+r8@6pZe&*DLE0^v(xOe{Yr6kpqe_Uy&; z+xPD6JAClfo7eXq-hcn${gdas4-qcorRS##D47aY%WnTjzm8z^wyaW=YW zb>|KT9|Mn=2Jb6g*$ZYCuX*M9799)v`We;1VX&ZuosnBeZ^eN_4To6m z1bP?*5?Go=nT*nE78)kEa%!{CAtT0g0T+GN9w7??qkxQ$P*qWqO=?5FRMGe?K Kh=_17SOWm04gy^O diff --git a/app/code/Magento/Webhook/view/adminhtml/images/entry_edit_head_arrow_up.gif b/app/code/Magento/Webhook/view/adminhtml/images/entry_edit_head_arrow_up.gif deleted file mode 100644 index 4f0f11cf45bd67e43b595c1f1a1a2114e06f6e20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 637 zcmV-@0)qWVNk%w1VG#fk0Oof9eV(Vp*W2y!^S;v9ny$5em!Eu^smX)fpa*ULZrL1j+j&+Wfbc~dVqpOOcsehTFgPEa+o~C}6o`s#H zhMlF!*V~Anrf!IkoVLD#nV?>SkJaGhYlV$~nW1-)nS+|4d6S!`y~L)ryq2)Itj5iF zkeGChm4lk1ldH0!v9};mVv(n=Z-|hHr?8Hwub;5BJ!yBJvA1o8kB_CRl(4yRij#Vi zn|6;6?b-2XIo3y*EyTE^*r_kHq zY=w@hz{Y@=p4;N(>+kWGth0})uy&7_maDOwueN=ZoQa^Pe3YD!rL4Qp)zRGGgqos< zpr~+(k<;Mgf0mwmlA6ic-FcFlZikS#%g~>?!J@OcbCjO0$?TN zt7`~@6FGFVvtP8cKxcwzPjJ3)9ZDm=a7He7J|S_-%OZ7b%yDB9cU(Jf*l#Iybuww$ zZwv-x5pL#YINWtb=H@>dFDC)>PU_qs^FvSv96DYD18M*mIFJXxC@l&UkOISw!-o*< zgz+FKf*2-pGHTRlg@^?~2aeFN(WazH78NKwV3dJCnF}ivs8J9E1sDP)8Xc(8MT-Ll X4lq2JQ6Q6`Em#O-A&_K4qd)*VV;(o5 diff --git a/app/code/Magento/Webhook/view/adminhtml/images/entry_edit_head_bg.gif b/app/code/Magento/Webhook/view/adminhtml/images/entry_edit_head_bg.gif deleted file mode 100644 index 1f6d083278fbfe22c9c885eb7f20685fe41e6486..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43 rcmZ?wbhEHbWMp7sXkcK7ENe(_>Q?;8!TXUVAHWZ3h#H^a(U_P(FoB?-l4v5t#H8U% z&_rXZG4(?uny6p2p#ciSw$h4eR4j$Tw$lggOy_Z*$Frw*+L`v=7U3o?3sFJ2Q2fPWZ1>|6CrJHe%1Thdo^r*8XoZx9NvHK zdH(GxY5TqiC%dyY>Okj&cC+hEw*2g2#fZ}%oU2I43E?Ac-u)Dvi>?P@Q2GtSIYl@3 zPo(wmqeRx4xqAKssbOy<_d;CX=;2Evvb*_M5PzF9v0AF6bR#<0EcbWBRD=FFozc&R zyyEx+N5+!N%_v6PxP4=dIUS=5k$OR_+RW>N-5lsTN4&)zzBuBSHtmjh_n+S4+tGX^ z=oNopzD;Ppq8JKAk2M@DUc2E7Qe5Fydw(f#;#b##{!brJRVjp~a>Ck%uxsa`I`l;j zJ3*2!^!L%NyF4N}F4i_xNZa;_YJVpbiq!!%O`w^yEl407KwsoQuEm1$V%Oi;RKChB zye~JrSi^Cm%mEKH83(n$V6_sMYI1zkLI8Hg-S`J6wIkn z&<3wAe9E$FFeZi}-_8!mg`CJeFNRT71?0Vaa9ue~rMM+do)Dy6|#gGd* zkvkU@_8IRM$PSKpiYVq{adXQhpxx>NeW)LV>P-wAS&9gxP6Sf0Z$}s&8!$t zxJpn>ndR0Zb!d%#J7<<(5;V%$}z!JwfS$6f@ek`Wwwk%UoAaYEd+s>1o6UlMyatSaZ?TO8 zmlK=c@BGBY5U$e9=8uj`C2fChOKPaZP3VMIP-2UL@Y@Gn3uX=~m>-kDbd+SL}?$N-VnEvT=W1 zFnEGBatYg_|Nkjv;*`!z{xLp&=DD_kuNQx4p|AuX$&A{+f2nq?u`+Q&^i@|AcX?>} zZl5a#Gd&X1W}`!w?j+8<@aUmcn)tZ zi@aVRe0H^8+9vUw-z)OfXqVKCAvRIP@5a@h_M78ZKJ6Wgve$U#Wvqzkk^{wQ^u~J* zCparo*;)&EH?L`tVonq*5-nGGwx`z$bAC>gw?s%@{-{N4T1{)NR6hR+FaX$ypz3#N RFuec(002ovPDHLkV1i*3rpN#Q diff --git a/app/code/Magento/Webhook/view/adminhtml/images/error_msg_icon.gif b/app/code/Magento/Webhook/view/adminhtml/images/error_msg_icon.gif deleted file mode 100644 index 9db2351303341d36bef063d1ca7a926be5981aac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1013 zcmZ?wbhEHb6krfw_};+qrXc!NPUO4dn9nr{uk)gQ?_K#kJ^VvO{QI)luT9C1;)7pg zMtrP_|6G^&W6OePsbSwbv!5n~e!F?;*U5dKR?h#tY~ruG*S<6)J?(40Gri+(ZT=xI z!>5~9e7bV(>xRWwQi2Zq7{8fR|E;U&Q&-WsSf4L5TRyIs|Ejn8O?Um{meP-tn_kvt zT#a{oRT}eh>9lWKmYhxWei$3{Yv;-j)0^MyTK}Lp;n&T}Z)S9UIlSZ9mX$wlU-`9X z#moHo$7#`z6GPtAr+=I~;pfg}PYWZSPi+0MsPkfCz~`&yzBXrmTsrehPsx+?n7esl zXW~6SUOw}#Iq!RG_EA66*PXR*Cv|>Vv+(2emWM@AZ|6^a)=}~4;I^L=E8ne}eKFDV zOsMs-DCg%nv3Cn%zi(c0EY$Aa%^fZ|UUMh1ok1|5(SKzV|J;}QcSr;Nvj1V?V8O*WR3 zp0x5cH>fQsbUNPH%%xrTK*Qo8&s3%~1qX#q$}Ivq%(@*j0u>ya?CYg?IEof^u{2h{ z+cKw^QLUMo<3dfLVu4Gmp?Jz67X^lfF6j!EYZD)*AMl^Sz`^n$ae40nvD$kKq6v@v z8(7))C_GfUz&lgOmy;nf`GI4LhI0bPl_2JxYpe#!KLQ*Uc1Sb|O^f*$5bh<%YN(OH zaXC>zUQBb@f`CiTy`2`)MIuW!K5dq>2s4 z@7}#f4{!MX{d>yp|JxdTH*DCDu=K&_6LWWNUG)C_`Y=*2{WUucY-zdJL^dl3I%>;ad8o^ z7>UT-aEZGeIS2v;T;fmM9XBTt$%UH}0?1h*2qK@)Ge19v#5w^G0dO}Gk-On;h*g0V zg0c5w{A6?(dp$&D`V;BhwH(@f3^+wpiDS%+&U-Vg>20eaQ79BhObrh(SA506v+ZnZ z$g})zgzWPtJU(945y>2Pr{~-rKqTCq^~N9e(A;`~%*Utj>?T{b@1P-B=d7{{Lp44`r)r_IWw!_H>>zh_~t^51? zTz<7!da!ex(R!rXRCTOTajE~Rb69(^lC<7>rrdL#(rl8*fS$);g}YO8s&JXkpVF69 zb*p)!*<60KZrYZ~0EQ2FGHWYSOuLwaf~93yCTW)$frpEk8k%j@hs>6?`p~*;u2r*E4bw`~ z)ChE%mVu=rs0cPRyDD9_O189%l1l3FBq!i-IOkXX1N{ZPpWnUP^K7qJDvH~jxe!_i zxvC(_iPAs&K%2<<2qCoyZQlR8m|?FJO)7cB4~wT6A)6CO_1clUV!~ztoqODk2r#7s zy%6XGu8$hpyw6z^Nuq$6-$*`=o34(futBd@0F1Ja zrJumLiM%?Iqb8bAZ>5bgyf%i$2FFw)(2@N5Xb5N%1HFK56@s2D zhZ^x{qKB?59+q>QB@ED$Nx4w0D}SVrO||dDRh)?%OlRGuu_7*bag27McEdGCufo<+ zKo6)Lt=U8qf)+E~rfjlVKy{>gbqHP-=%|jiT?qoFG_pnNX%ynMyy<#mxPa@d2y`l! zVij!nCknyYfQhP*FSjJl&nDW9QpPmekWAtz-I;-wuj((95LS)7f(P0q zWaD=C3{EoW|En$*w2Ns&sz)nERXhLy^gsVJz$Rb@1XV$iGp(6VKz>$e``l1T6Klu( zbux2+-%~RbFni;q^-_MGS$HHqNRd!9`{t|zC)1a#2%lBDIci>5Cd(II&QVB|8xCV7 zp;3!64qLO>3%Vc%9Nq2n>iz94mCyZ>zUA?2)?f5ZH3(N0aN(5FNc%hfMHTP55|e7B zg1Y$f;Ny~&KHdJT3mx7r7Qc6H;vDE9zgEs#7NZpT$=NX9l9Cj6TE=`P;so)|_vP|? zb}>VluXPcUoOh*5&q9%&LxRNo6>x;^W!B|FGmC9LXxNPj{MUrRKa22@_vSok>mNxN Blg0o5 diff --git a/app/code/Magento/Webhook/view/adminhtml/images/fam_bin.gif b/app/code/Magento/Webhook/view/adminhtml/images/fam_bin.gif deleted file mode 100644 index 3cf0aaf9be82f283fef99812ef18ac6ecb6555e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 288 zcmZ?wbhEHb6krfwIKse?mX>z)>ea1Vx6Yh7^ZonxM~)n+t*w3b?AiMD>%V>bR#a5f z)6;YB-o0hZmhIiU_sp3yEiEno|NjT-0;&fx7zhEypDe5*3?d9VAcY`18Cd5ksP;WR zD3Ic1=u|Awcwog9W=lsQ*}jh}nh(94pdcf_9on3bq9)O^WJN`d!TOfADIXk6q?($N zb@UuuS{XiHsM^8J)Yw?0VKQ@VL$$(k3m--veRhE=#u_dWCL4Z6Mi(~LUT%&~qa0p- z9!@U4yeSMKhMZ~vEL?f~+)N8aIGC2O=WuW0VdU*pir>b_z{SOIkc(4=pN*TF)kH** G!5RR`>0Xfl diff --git a/app/code/Magento/Webhook/view/adminhtml/images/fam_bullet_disk.gif b/app/code/Magento/Webhook/view/adminhtml/images/fam_bullet_disk.gif deleted file mode 100644 index d72c413e8ef9454af8bb2fbf526bc9a8161979db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 542 zcmZ?wbhEHb6krfwcoxG@G5<#6@<-1;ynpubeeukTzyAEKTYC4;-+zTOF3dQYA6$R1 zWq;tzlZAQHujF>$YS|xh{mY_^zO&Wyt|WGyvdUbQ*nQHaU_(OZ$-K#D7VdvlIsbM> z_vPd7+I!YNamiiXuOQgI z?C02y6MFH>rf+-o^2?JKpI^nc?EnA&!KAIve*OMiz3|S${qHLm-2DCL-}P^c-hTa@ z*mXQ}!r5mZ-|jm1zIO4wS=-)MEw~w8x4WSKpB&V%4r@9jzKYD_T;# z&B7pBVwQ%staqD@8>@#oyNh82SDU&fo4kIYJA;v9o2WBmxWB8EvQ|)=j-8?}Gn0as vsaTsyfCD!t55K*NNSm>rl8k_7l#^vhn{cFbupXbTnVfCcx9>k%8yTztP~Pd# diff --git a/app/code/Magento/Webhook/view/adminhtml/images/fam_bullet_error.gif b/app/code/Magento/Webhook/view/adminhtml/images/fam_bullet_error.gif deleted file mode 100644 index 0d3b48ab3d34d2633bf465d109c7c111402a4809..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 524 zcmZ?wbhEHb6krfwc;?CQNi>beUa0RC@Nv)I;rtCuVpYKD+n)JeQv@rvLtY z5Y9k`)0)d{&MHr^NokrHSg{5K5+ij-YU%#^MZc9+k0k3 z!rR-c-``$+?r`6!GpnDRSaNnp?T^PzKVGfbSEuvi*@V~EmmEE|djHXF2U`sHU%JFF z=z-!-7DfgJPX-;3OF?nMz@FLQ+0@+9+ScCD*=Z-t*VV*rU~Sv)DdK9Rq1h!at*WP_ z%-F%{!0)J{BcayeCda`f%EfMB*2ZXM!^6z1=pt{@CZH?H#G=k3Ypm_wDkf;@#BiBS a%HFV*S4dyWLq@@w)!cOI(`Qo~8LR<(dbb;t8>zP($!FMZ~Pp4%Vp-FS0%)~WWqBZ(!4Q(_L=+RdsiHR(6B zZLzLAm=e6%G;3!-{-MN`59Yr8{(AN0*^Ud0OHX8MxwUNC={DyD##dk7*?MPl{?^FC zozXel!n*hNcAu!2d#*e4kjLWd)5=a|)$hpk*r2Xask-(4n$#m6C5Ix_id0mal{em9 ze)G+htRr66-d!r%8U5_bYujTz?Ray^_UPI@Y1dxdU4LiU z%(GpcN6J3_{ILDuhAnqjm7UDod~<2{_TG%+o(r!}EjXAw?QBQN2A_r3rsi*rSbb^s z{>MAo4;9V6J~97Tib=iU*4ry)UFj{^9@BfYciEkp(Oc}UKEE^n(!^QE+yDRn|LNCn zhEYIV2q^w!VPs&K!=M9F4$2b@9CsNkIb}RHBsek#rsXUUKE}e@JcmofOPP&zWeFU1tc{muX0qLb}QUCw| diff --git a/app/code/Magento/Webhook/view/adminhtml/images/fam_calendar.gif b/app/code/Magento/Webhook/view/adminhtml/images/fam_calendar.gif deleted file mode 100644 index 3721980f9effac8fab7d947f5f324324776bfa6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1036 zcmeH`=}VJw0LLGl!VI)0BCtzThDr6p62s6)ja&wy$tp9?Qka^z;sKV5Z8GN^smmjE zUZv(Sk6~(FsoS$Q%?oeM=CM7`FQa#)qZwA8<4DCaZ zN~7OZ>xezQN~0T{-%|h5R}JnWGnjM^U)oSFt`n*~{jNs$h#`8+6hC80{8%D?)<_^* z6#i}^s(328bUL+qA+2^Pv*AZp<0`ZHXLgI6-L}qdUCZm(;0ibMI~BZcw4hT_@&zyI zMoW9~ih=F&{;je;ymD~o!w_0OtZWoxjUu#3j5Uc-fdmsE%H9cFGKV zRPXH{xFz*?XARL9!%taA07n{_Ck@O+Uc4O($seQhCgRFx68N);m9wce^RMcb)9aTT zL};T}*(|}DC1^9E6iCoEDb_B-+NG#)6cfsnonu({INmdkcYnwFCh`6$d|(P++#psI zYB{#IxvkyN=(g3r)!GA0wT~0~YOS8o>LZ)zQ7z%oEfKMTmkDjrajj8_?J@DK(a9b0 zDZ+$QVPfGVr*ygi2!cU79ej=iU9q4i5%i{jk2LVf7nJ#da(_?}2>3yuG8j}n2h|~< z<|v_n`v4SpgF+hM(Lm7?Q0xOrd_fKsq&b1tw?LK~_zU!(f46{@&d30QxX{&O+gp;#e&s>SQF6FkRGYk!2qjS2z(=+UK1m)^T~ueZ1N{rmS@wrr`cuD*8d+W-ImXU?2i zTwHwS%$dD=_pVv9=Gn7nEiElyzI*|S17#VA0E$0ZSVb6w8FWBuL3T2*);&<^OUazq zv_Qe}_8zx4OB_FOlrDL{J3xWUjo~8)Pfu?nIKIiy#06W`QLpP9_LIw@csMu#d~jbuQ~VnLrd0)&LW-b8!Fw diff --git a/app/code/Magento/Webhook/view/adminhtml/images/fam_creditcards.gif b/app/code/Magento/Webhook/view/adminhtml/images/fam_creditcards.gif deleted file mode 100644 index 86996b7b20425c48c7bff5feb24c25c85ad8cd30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 599 zcmZ?wbhEHb6krfwc*el+v8=3c_T|{#vv=;?`F<8y24_bb^) zjvV>@?M3ChW8V`K*ByKI|6cLeJ!`H#`t<+*|L;LTRSS=w-P8K>?b}avbzR#Y_pH6w zyx_$5YenC$CAX}-Rx)MZ_ghW%^Dm#<+VcJSsb9}meYxHM)W|S&fZ|UURuKj_1|5)- zL2<&szNLZNRJTQ{P0GI0+O0=dwO>_y(j*NHf9PI`YhrGZryYTc*aVZ)_~L z&{&C4O@Ff*lhK-W5=utwMw|6TcJwSVX60Z#aq@&V2Qwc(KZnreD_5Dd%`UJCscTwD zI?D?Sih2_ws3l2ry)@rAXGSu+`F5UtJfksO8#g@^wkta;pVH(p<3_} z-}b3wL4F%IU81R9Zo@6qa1YT591h3(KB-2dfgp%-zjyQ&V;JUDZ@~=5X#X#Un)f?j zGn5BSaUW=lh&TY zu=ad=dplvhgX#owx!fr$9v&X1DcI$5*(XW^h-!Lznpq@Z7$z*0l&c$h%b)#_2}x6p z4|ueHo}7D%nWQ-4K&EPF3PER@oVtsXlas{v3Y|_jFfcIlO#!`0wfCGf&!|U6MivpJ zOePC5w83ETfn`2(3;gXWqN~7WMV9g7N~O~DQb5@2X!0l2wp*c4==FMXVI2Cn+bTVR zg3p394nbgW(TAHZ%=Tn-c6N%zV%*x@*4E~ByQik6f(%2!X821IX>ULf#MsCKTXqKj z0{rKn3&i+CmH|L3kho+lJpr)2z^<_9!7iC_1)HmlY7uVAOg{{VUR`|N|{CD?PHvlQUcgwRfo-AW?czcY6`<4syZU9BX z%#4TY6YlW%AeOT~WR-w>gS~hB>sX|?>U?QosD`_vKz#ayI(e<+;He~uu&iDY9-V88 zyCRA&$l3(WV8O2}1Hn4v0`*9$p^cd3OC9`~C-?AHL)wQVy|f zBd`$&D}kkPnuV7eakQdn0>jX-osmF%!)1g|$9*#-yIL^7JdJn; zUddZR^zw(2mdH!+Xs0MJcO7{>6sY>NrqUWeo>!5UU{9*v-paDnH!&`!8VS6rop8-qwlG;{E=q? z4-A8~7>WkxPCB1yBTKBIMkPQ)JbiL?Lk7N} zqI#!xoS?_;UpwMQ zU8jN8NDpr-O08L+PGPYL*(Zc))P1x~*FWAe#!saX2!h?k2Po2a&rWufe#lB&6(3qB zA&o(X+099~=1<hi{yq@irt8b_nxzB+d49Jfy;y`Tf&g{AVYQc z@F{n=6kDe3Z$5$h_U4Wx2H5=7P7@OV>2FZ6S7lt@3=tpeTB)=k$+UDm;oS~wNO z&_c}%P8*t;d0U!_lDEpdByt3~21h|U2RP@5a_I64`T;$k-#s7R?V+8D2&B?C1DgSy z4+uZ$)q{x+2Z<}0#wD#p^%LR+wG8V^#@Hxk!<*3@F{{z4sKR8o2u*=yHbE$c zt#S^zhONNWmiZEuh)%BI#E(*_A;>4^(=>zM_9Wt{)n0 zGMjV`(q8$|V3t0A*n6K?9Js52^@WHFe2#D6Yu7S~zAi2r+q@-G=sv z>RyZC=8;9PKeN53(mX|L8G#dW2A4-`&?y?B$#;lE z%#wn5mI!Q=C6#<>5Syfh)HQS%ouJ;}eZvi7%rpMQH`*UEY)0N?|M{>=Y00Z62#HBg_GG3O)yEt-cYBiMlIRt~V~l>NODTBa?vyqF zcDaI4TOuUhp0WE}*z2SB{+4S&kKMiz*Fe91rYr4q=IhJmutK)~Rxv-4(}szfZlG&TUTl5fZO^!tBN|HSaW^!$GoBLd!wfI> zbK}y#g1g;)Qp@Aj{`=QmKX`XLsEK3ke~>iZ!U**i?94r80BfB+%1_e!EU$LOM&(A9 Q75koD7M!6lot%K6UwJdh2><{9 diff --git a/app/code/Magento/Webhook/view/adminhtml/images/fam_group.gif b/app/code/Magento/Webhook/view/adminhtml/images/fam_group.gif deleted file mode 100644 index bef3d22b9c7909ec88fd9b1b339dcff38481763a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1014 zcmZ?wbhEHb6krfw_&%B8=`zU)(T>j#O!|0q+V2YspRX{(Sey*DD)7U0gFG-KBoQ_9siFug^1_c&;p}KPtTA-t=?j zX}kU(c=7-0nWMgw|2|u5eRM%pXLHD|P5W2YB_>WwxW7a>V@0H6&Bf^D|BBZ?f4a^j zWpP;Cf&bHzTuUb{m~`}iYV(QZRgSgumM<+1?L1q0^ZemO^EXecDQMl_RNqrNd(+)B zYbHNkF1z~1-0!dMUT!tpbp7xA3pMTYPH*qa{{8D$-?{SADNiQPYyIR*`lbb^Ha`OhA;nbUv)NRNsLLs z>8yzvN4KvzyKhC}_W#$G)oi@Fq_pe6(bdhfvwXrPhlFkUU%jq8cGLg1@ zJG%DT$(x)b*osvKEX9>3vVU2%K-j{m8r{_BL6lx)eikKeLtQf~N60vCy?)KI1o;my?xw`iv*B^i>G6pW#s#ZpugqTG}pR&(!{h)6&RI zO3L$@iDKh}lv7igoMJSUo;xY=@Ud|1OcYjE(p8gNtD($vNJTcx!er9Jq)tJJYza3e zmX?c(Vrd)pBse!d?3dN#5p*g%-p4MT%K0czDC4lWMaHWX4Uy>!`0bLm*)*0YbuTij K<78uDum%9SkYVWn diff --git a/app/code/Magento/Webhook/view/adminhtml/images/fam_help.gif b/app/code/Magento/Webhook/view/adminhtml/images/fam_help.gif deleted file mode 100644 index b57481ff1bb85202f9653fb6a454471d34ea43de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1024 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 B(rEwy diff --git a/app/code/Magento/Webhook/view/adminhtml/images/fam_link.gif b/app/code/Magento/Webhook/view/adminhtml/images/fam_link.gif deleted file mode 100644 index 42467ac442ae26f1401e423e8e033c04b5b65dbe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 220 zcmZ?wbhEHb6krfwIKsf->gu|7?b^1swlinWq=CWAnKSq9-Fx@$T_B^ny86Y77lDC+ zy}i9RZrnI>{8yDq+pjEr1YW+0(I|Ns9J^Gn>D z4_@C?V_m%EaCazB<%7dhj^22i-hVpOSufB|W8?9MSLWnyuXnw&uG*{P#P!Y1t_}On z%uIW7X4!>h*(WB%I9BaEdhh-ItMBgao8(-5_&`VC`)~gr9+|D1xO7K@+qp%lw^!C{ zS_K9|c@K09!%zTt VpOBfv7lT7CE)vFBXCycntO16wue$&M diff --git a/app/code/Magento/Webhook/view/adminhtml/images/fam_money.gif b/app/code/Magento/Webhook/view/adminhtml/images/fam_money.gif deleted file mode 100644 index ab0babcbfe58ca586a82f70ffb47099c63b78420..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 380 zcmZ?wbhEHb6krfwxXQo~G{b-Sg(Yn}nvXm=Sh6|){=2&~j!s>BZgtY)xaS|9)o-oo zI@q$|?&_I`rk{I!_VdqAD{n8}_F&`OtJ5YN?QYmoTeYn;eO+?oys%p@Z!Nwtck}(V z?faXHcICeR{(jx%)lqYTvX-aMJTvphpYL}+-#qp7IFP;j-u6kydQ#UUth%$fX?Jbc z;nw;h^CQJui=Tae7P~NV)3x>a>$209Cw~9_y=+&}|Ns9PFo5Du z7FH1kO9mZ~49HImY%>qcDX^F$(0|-BquFJh)5L(KmNjlc6NMYIT2r)UiE`{Ta0%0% zuDv)=u|xW^he*c8$jyoFrB>ZithziEm6j?sf&#jXtW3?~2BM6XI<*2>T1`4)2Fz*< z{3cq8QY=D}Jfao`CNkpe68t(kY&csZTr6j{_)>WeDyvAT0=sVRsuFtLYN UvYDAOuE5IsgCw diff --git a/app/code/Magento/Webhook/view/adminhtml/images/fam_money_add.gif b/app/code/Magento/Webhook/view/adminhtml/images/fam_money_add.gif deleted file mode 100644 index 1f9dc6bf223a5510a25b134227bb699ab4798efa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1034 zcmZ?wbhEHb6krfw_&$T7VRv=S_VR5HHf+4N`p@4#n=Vb=aCg;@Ki_M1RKzZfv@K9r zeql-Pt`x^&Rr74gr8nnK+0b(T-QD@uX9V|X^zTXUJ>1cHu)bE`=uH{D;e>E4>0 zHR%)AHGcp7ebMzf-+q0o-&)hOySDvM)66qdW}lt5^7i6wSLSpdYRg}j-E+7-ZF%DM zha3BMXH7pnY1@O1t@|3<_cz-YDs>%dop)_|`_6>SRjDm|8?qP1rS~!*tG58#e(9;j)!WOL-&%O# z*{&^Drfz?GAqq)$hN*Z(NJ$*KOX>@Z#h1t@qbYInh7u)WjKQCdYNUO+PfXdRy6+`|D3U zKa#XKZr$b8#WUi14z<7f{POPWI}?s}ckfDS+EbUmByswtj{ji5FbYTy0mYvzj0_Aj z7<52dL3x6K<2i#Nr;J6wC9x(B&M?J~P5w?TqU%f+3NJY9+}Q8tV5sEaHARo#Um_~- zQM;t8W>$@Z#xhp{^|%8b6%!b_m75H>b~+R%IQFqiF{nt~ICe~e(TGo>OCgCt+LV(c zAxgMuLW8}SmHvOTgt~`6&^ON^ePF5fRntF zRdpCd4>Btpn9C@~!!qHp>**=p@fsQju4Hh`vC0>k>M3;m$kOwyG6_vCooCv({YyAH u4Nsm@m6~KIsIZ8sb*@K~LFB9h3mBR?WmtYOY-Cn!VdIl>I3OaxU=0ARo_VeS diff --git a/app/code/Magento/Webhook/view/adminhtml/images/fam_monitor.gif b/app/code/Magento/Webhook/view/adminhtml/images/fam_monitor.gif deleted file mode 100644 index 299ec4fb3c47d7e5692cb45721ca36522d8759b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1027 zcmeH`T~AU00EQ2yhR#fvu9g?6*`n5#)ij;0L1UIpovW>_kBfAzfsrA?#+nik5K;^f zM5SRS5-=SJ%AAmMB#1{50y!TD9zeQkPFI^!^TPB`bk*|*-aYU3+^nmus&38$@_>{G zFq_RjpO4LE>vTF0^hP4s?(QzFXCakJMWV6U+1U^jey&=K#nzuGJPwB=7GDpALQ<&| z!xB3?J4T}shT+c6PPrMeTCMNK(20qO(b3UXg~#rgnVXx_*jDX!yL)~i1h1-8s%SLU zDxY^coiF;9_4-c=g@QF0G8ha@?TSXD@h%4~7E2(Acovr12mAs90zuH!)KqjWE*(Rt zRI1fF;c~gwu=vKtrpxWw+WLv2XwP^!mPpEEvThSB5C}LUa9i&Zy>D5mR0j81fdhd6 zR}XjTV3WxNf?yO&tYHZljwF-cvDi9|M(cPVcr~)`foiqd>FH^{9zu`^hr>a`QMUG* zP$-<7oMa6w$>nmf31P8VJ!W{x8}R%6i;IhNI$dmpUJm-yYBfy>uB;#)k0%&}x`sm% ziG;~yLNLN$Ffa_W*=#~1LY2AO)LzBsu+zD~==ULL#OZYLc)acH?JqN~28Lm8Zx8s- zzj~nLPdW|&M8JiE!Gk6Md>lA}v*hvWfQt6(1oq?8hqz}&IneKt^c%0w9~+4h6hlNA zF29#ZAX`Vkiw{aODNPiA|CM5XoS-u_9lx6Yv7YecE2$`_OH99Xhmt)Yt{E=)LFeL5 zRGy?%otxw~k~6ZhtJxjt?hn-s;|2V?Wi8?~q2?Fqa`N`uLSYNLn;?1vI)t@&F`g^Y zp5dm=5R;@_T-yCja=r3!CKq?KY8)*W2(q&tmbO+F4DrPo{6-p9PvYmE;^4ts%}<%+ gYlS(*L*;lLuPpyj5u=?%)K=VM2m%eAOd?S87ho;`c^4!gl{CM;B-L-4i z&fR`GYu2pWw{Op%KY#i1<>$|zzkK=frag!E?Afz#-@ZkQ7ERrG{lbL{mo8m8eE9I{ z)vHrxpM3M?O;1nH%a<(>`AUc7ACvMpP- zRIfZ=y!hOX9Xq~#`*#2S{gsEV-@0|{+_`g`H*fCWdiBGH4}bprS+Zow(v5pIZrr$G z!-n6#fB*mgpMkzW@h1x-149&p4#-+ioG`HOZis4XZi?jNl4|K{|i-o}&0Q_GI%>V!Z diff --git a/app/code/Magento/Webhook/view/adminhtml/images/fam_newspaper_delete.gif b/app/code/Magento/Webhook/view/adminhtml/images/fam_newspaper_delete.gif deleted file mode 100644 index dd1fce9c454f3347c43aae563eb90db3f233677e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 639 zcmV-_0)YKTNk%w1VGsZi0Oo%HudlDIt*yt$$NKvE<>lq->gtu1m9nz3#l^+$?(XgF z?VzBb^z`(Njg79ZuExg3#Kgqi-QB3DsQvx@-KK`<=;*q-y0*5qwY9b8=H}$&(y zz`%}FMeAwT;S{eZpKMtgNit+uQN+@%Z@o zx3{;-W+?3K?*EcazgQmLr--Yot8=5y;j4_!+vVTi->}Q!>xw|XR~_%~@4URc;b;T! z@bK5y*NlvepP!$!w6yC2v-bA(q@<+vsB&bR$+5Aqu&}WE`}_a@|NsC0A^8LW004ggEC2ui z01yBW000NvfPaF6f_(xTAB2j90tb9rrG*H51OP;3Su$G&0Z)Yx00a(rb_ytZS3Cw9e|^9N0dIQ+EmCZCB@H%zBLPTE zJ$wZRFIqJ_E){}95*kew1$!3}a3md6Rf1M&VRRmR7(ghI6J$-E6*T??Kma9y7!Mm} z{75n-1`sYw{@fwc27m%5EWUK`;iqH@4uS?OxZogynlW8)m^l#wjEX@6&hXiTCIOZx ZI*f?OL4nW!0}T=gDiVjojiP}706UD)SzQ1C diff --git a/app/code/Magento/Webhook/view/adminhtml/images/fam_newspaper_error.gif b/app/code/Magento/Webhook/view/adminhtml/images/fam_newspaper_error.gif deleted file mode 100644 index 5a48a701cca2aa7427f9055c2bc646a07f4c7f60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 628 zcmV-)0*n1eNk%w1VGsZi0OorDudlDIt*!d{`jwTH<>lqY#l`OK?#IW+>gwvUva+tO zuI=sZprD|&wYBv0^r)z)#>U3g)z#+a=GocV{{H^`{r%|Z=)}atjg5`Ey1L}#U?q9 z+S>AwecXEOFNFO?dQ6&_J?ZI)6=)Nx9{)o>V9>L zi;LKPZRn$vtgNihq5!Wgg;#D*9u Oiv$e7U_jEIKma@Z^<7B- diff --git a/app/code/Magento/Webhook/view/adminhtml/images/fam_newspaper_go.gif b/app/code/Magento/Webhook/view/adminhtml/images/fam_newspaper_go.gif deleted file mode 100644 index db3b7e32bdafe3ab6af710826489543215a625c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1035 zcmZ?wbhEHb6krfw_};>>apT7I>({ScyLRf-slR^xI(qczyLa!7A3y%|>C;V{HmyB7 z<<+ZKy}i9(zI<7+V#Tv(&yF2C_Tt5hzkmO(Iz92okt0u@JXx?{!P~cQ|NZ;7Zr!?F zyLRo{w{QBPrfCNolI9s~IQ`JLgL~1UMU9)IZr;2Zv%u!&%d6%coZGf-OIqx9`}XbZ z#pYYLZk@XGx_PH`{6go?KRz5jeE89mXY-DBJbZU=_3G8F+tMywy0m4>mgw1<4Vx3g zXJ}|Oab3K4@!Yv{t=qEtcIB@;HKBO%xfzF=XU&?W(a5}b@#5{U_gBYu2ndJ>lxrtKHq*^XJd++>!nM{ri&D{!5lD`S$C}!edMu-uw2@(aoJf8(IgR{ zhDYpu(!%;2oEiy78YB(4>H=0yeB3V}m0D$phXeVe!aL#19i(}JdAuQX_4TL$*Ae8C|AWDb6k%2BEOC*lW#!Sfo zp#{bY6wt`xh*Y<-4vQ8Fu0XMcUa-{KQhK5GlwN30ZxniZKmWyVvF8)~-aJLeNjXQp zOM}v&kQ@S=>NsYJS|2J0PDKI^u&GIeEs;4gjxgQgX0NC@96*4Lg)X*uWi>2v~>L zMsgzvJ1Brd)-l6awOiH_@)?11+$n(9rwbDCutj_gtp5qtN7N6_S^mn=j8tfc&#mxI z`xeM1!H?QeijG$XFhdYk&C@b8_fL9E(+*X)op%fvJMowUAa`7v!FbpXd?Gt9SJHJz z#?01FP-MMdC8C&LkcT7vR%xGN@L0^y;}R7hvsdtCYEaqe5|ZNH1&^v{{Yj}?Tx6V} zVzwFJnYN8m06G;BktNK$khVj{%(Bf~wuzbyPwDu}KKpnb2q^F{;#j0vxy9=_>2>>uXrwrhJ%wtpyRpMr*qzeXHdcS4TJbwdE zL_-?7y#EM51zJv>Wq}%9V_VqSn+}az#|^BG2A3K=dV!O7bVEqdJ}mJgbMEn+nEqD~ z)Pb!F?ce8Na`ltb{ z-BsPIj2T-tR2}h%KY>}aW91u5tuf3E(23Q_THV-rbmg9Ig5uG!EEAXgiuQ%hPi(TG zz;YkJR;Asa+m?EQ(pu-^V*BHx1}V)|uJ(FSVSXIdG@o@9zmO3esuxPv3qmz}~#y zzxVL00`6w8^FM;+XB*P{nurH7xbSECL-MYhdumFmw$%*(@@8de>+7zHLfwbOCrNvu z_y2g2R(+OGMN2=QzrXMb>4!_Fs!9ea{}2TAZ(Nk`I+LA4tZX=Vrg#61R5u(LQ6_C4 z`H2XbFVcs|y=3UQ`GclggfAqsWfkt;?a5yMa2J$r~5CyeDyb8jVmlT1_dpNhU^ zWnD5`Q-mxUC$(`32tyO^F+*a3+TAFn@{A#P25uRUegb-t*r I8iw-z1Ja8&G5`Po diff --git a/app/code/Magento/Webhook/view/adminhtml/images/fam_package_go.gif b/app/code/Magento/Webhook/view/adminhtml/images/fam_package_go.gif deleted file mode 100644 index 70f05046d8d74b31d50afb52024fdc9d786d930d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 645 zcmV;00($*NNk%w1VGsZi0OkMy9(x1l(vjD&PLRBG@888~qBF&aD%QAg>)5SCkQRKe zRnnta|Mb_}!-?wEoawba`sA>v%aB)?DD}{I|J8T=_~tl>3HR>N+p=O}qekhpOw5@x z>&1ij@7DI^zn;a2_}iWP+=PX;YURIg*|kpI$(2TuD)GTqGKUo4#(v0-K=0PIT%bJl z_3d=4Pe6$p_vEto*Ngw}$bqw3mcfABw|LpIWc9s3W|=e9rcwX)-T(gZ&YVB~-<9RW zg8${EQkWv}(2VuTY1+3|Yoj;lzevcAGu^pqiMVU!&ywxlzW?pM+O1Ik>9*dzb7rMT z`NBy5^3M6;s^`pz?b)R%fCBKnJ2{35$do&+&6L=+RPxr9|LCjn&xZH!+@;8k{Q2|W@x2G|J;n1!h+qpdh*?`N|GGZr(au}DgM@YJd6%EH4_jDT z(F{v5LK7b00A zMi}tnj0FQuoOodPqd*otNX&>#!=efw1YuIhkl`l6moFbgq0fhcXNk%w1VGsZi0M$AG`uh6y_4VK1-^ z!t?X<#>U3T$jIvI>hbaMz`($?w6waqy7ct)#l^+!?Cj>|=I7_At?c*4Eb3)6?7A+tt<8+1c6e@9(Ors->l+?d|QX ztgP49*SNU2l%_~BZ?;Kb`$&m$ z7lc)J%N1&c!s6q|9VQgPvRs2mA{*68n!C+&P=GW64;2m;eSbL`3L`HO7%?p@iDZ0H zHZ%tdA(dr09Ucq_5F8*92cDOhH8nJ%s%#eEat8=i^O39>spRT>0@z_1|wt{(pLK{qWMKSJofz z^Z0r{I?7q%{`~pL)itf@dVjwi`t#t(&yy4X ze}4M*RPMVQ8^6B3|Ltzh=O^ngZlCb}{reA>ww#$3dFarg(<}17KD}~vTh*z38$Nva z@bymohsV3Vy?gTM>E4sAj-ReoU6||k{ZaI~Y_(4>@9nFS`g$ks#;lNUm)AW%(Ea^k z)RjfqM`w6;CTjoq@#E*upTB?qK6&!wnKNhp{Q2|$|9=J=0L7myj0_CP3_2jQL2<&s zzOy0OI5DBMt(A>6xjQ*AHa=hDoLZ$^kaX2}ulb3=AfoM)q<} zR=Up1lHztS2pVYc2}OikL~Wap6d&uYC1z)>ukN#LQj#whvsa+MqDS}gNs^k(p^>5r zZV7iL$*Y-b3ybguCq2I?;qIU(&8cD=`{_lJs$RsxO|Hz{dVimlZa%2cF09GV;_*ei pmswoU)vD$uhv&jA{ga-_eqaikHQk__L&oBWkdFjYG7}?%H30T|C>Q_$ diff --git a/app/code/Magento/Webhook/view/adminhtml/images/fam_rainbow.gif b/app/code/Magento/Webhook/view/adminhtml/images/fam_rainbow.gif deleted file mode 100644 index a0b0a53a48495543f808a0d17545655253936cd9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 644 zcmZ?wbhEHb6krfwcoxgBbl3IU>`dOJ>)kgR2UKpn&Bpj^s`;m>W#?|b{IS!wd%w%i zXEVQDh*`4h+RN04PgBb7E6V=fUiDuFd->$?-&t>r0WKy%o@%zExcP#~B`XSJ@dalf(Y(sk<>&B`$Ce0|Dx>z`B2zqVUs%~*a->`VkmqwFUSK|sM?*BQ_?0I;|m$?-`cKLm~k@#!6 z`Tzg_8R!BOf3h$#FvK$GfNTTB2?P7XhS;X&7I!s8Yev?V7C8$>c>`TXqn=n5fdE5E zb}chO)gC1`K0jYQ)0h|q>6Qp98-9Pb7&}fc2dQQys~}C+7!L`N=xA=CCKWdu&F~mc zo@h&9abwXY0Y3f%Q93f(CbrDp%CT~+fg$I0Lb=44HDuM9Vl50K**th;xP0`@c^P;F z3sfA~#A6I{A`>4T6=AS%5l~2abhuH>%+76Buu^B(|ok5XKRagwpz>H>UmeD1$X%Oo^Oeo9W?!H@7jAyt2dVF7iy&~ zjc?!AVBKI^yflC7y|wvkGEz22{r~@;fe4`ZlZ91;!I(h@q!#2S2DZclGYdR)q}rD( z77__OCn4Xj&e*i2k4HGu=w=R^$h5-dSq)axxLr$QR8p=-`aITQdv(}4ZiV1^Ic;rr tcP%C^Jzf?;E;cuH9Sx3296F+`?)vKL+DZ(P)4ljrtDX6lR68J@|myOdlL0 zZ{&s(&B@Ynk&D3Lat@c{5lle2h#am`OT+74GoZQ~tPN&m5J3CINGZYGi!(o@p)!W-UF)@MTIEtcDsZ=BqiN#_Ff?~0l z20{)G568yFFbq>Fl?tT}F=JZDq|qX34eW3@EU3MyscC44KdXUpJUB2gI6gjZv7*av zkJsy!%jGq~YLgjLD3pOfKsKXoZEck+py}!9rsPw8|LTkaQmPC_1Vv1kN^Mwl{0Y);u~@8DtJz}n zcvn>_6`#-7Xmw(-BpQuHqtSVr!(g=Hcvzv*udRK9bY`zFz~yp19*=BR7LUi}O1;5| z%49RY{sR8P z?>U)6WN?ZNE{+Cft6{Ddo)qm+7IwHAct+wFY`Z`W;b8=7li0?XkG)oZZpoxAeIVdDz}T;mum)BSV}0ZLMk%2#)aEr@#>>y_45`L ziDAO^DF%5v&Eyq^5(>^Blj!R+68k83<7T<+JwbP=aJGkLrBIZgCpTlVsVAOr)N6aF zJ9Dig8r<;Oti)d2Wu{4X`C4aYC9kkW%hNiixYjS!ExODekk~KKIi<^c?G&pIW-P3L zzqsrw?KYNn8<;A1M(UtRA;FT9%(XC8P%X(!S3oo3%`0zMOTXNH>0?-eVQOKwtb4hS zwbezlU4J|-{2p$XA0LjirGnl8LzX4lE9NqUwFsw3MZCf6``t9HnYDG|}6ju)Q)K|J^>(DK;%&*T95)Jgn<#rtb9gI?1v7*-3RqzAR6q09){q~fZpJF zfKtr_lW(L|9Sb?zn|`|CqG#+1y1&XRB`Bw(%KkB>Ll`t;xJjh8N6`h9uJ-+jF=UcA`3bLY=*pa1S`y?XWP_3PKa@9ls6`t|3}pa1^( z{d-^E-;XbUJ-+bt>C?YEn(p1Z_v^`}EnBu+ym;~J*48_B?wmY%^3S&Vy?gim`Sa)S z;lnRqzPx<-^7H4(h7`*>hI@gVC?CZ4dP&B>F1E1GF38&A(&S~Jcz|}emCn1 zX;vXIuONNP)xiw?7DC!?qFg~Ht~}ig>OqWRX7Zde2Yk$r1oN3%1?h+e2%bH_taypf zK_Q4;O8B;iT#%}-Uzfd|&68)&%Ep?^Y!cnx{<=>bV`d0U^mkBI43zU|T=>Z2pjVfI ggu{o715C{V%EuHOo+P=siBwhm;V6n<>cC(P0JW0~{Qv*} diff --git a/app/code/Magento/Webhook/view/adminhtml/images/fam_user.gif b/app/code/Magento/Webhook/view/adminhtml/images/fam_user.gif deleted file mode 100644 index 3ff9b77784d71faf5e41d3f41487c4c8de0c9282..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 583 zcmZ?wbhEHb6krfwc*ekxYA55|`+v#Q4jGR zgwVzRPs}NtdFKDS`)8Lt`CqmDe__qcmfc@X6ZR)3cP!5}nH?eY`O}w*bw9peS)Y91 zfAE}tACFGI^5{#cqtK4&HAPqc8~QGfUi1I{*3K#OHp_b+oww!IdE%5_j{UEJU2FZO8HIyw`ywJ z+G?-q-uw+K|3xnS_wD@B7w5M`ZT(;5A~`8QCfikM_J-@Z$N!Z!FK9UU|LfOp*PeV^ zvh)7a-F^T6|7V~*Q2fclD#8%QpaZfB6ekSqOB&*unp;}i>_hnYJiXhRr7hIeEiCn! z`r>@mySnrlW=I*h$+`rGy39}$(2cbIi7>6nMJ7a$xFGgNA)>rP<%Erbr tIx;dr8Wu(8yZN|PJ$6LzU^v;L7|4-X8KA-}q#~ITqbR+*nfla9yQy($?LRva%{VicbCS4UsHu z-hA!(-~Rb0@4flAs=q0!XY1S@S97hnww`)mnz-luhQ7ER|Nr0G^!fX*?63tEKjJ6Xe*(NFXX7Std@mW~-&9`;z z6?C?pJKtxet@-qs^ZZuw^4exL8=H7cm}tRkF=bko0+XT_cSqnv!N91VEJ;ZNy&wiI zWr;w3#$I<$c1!h8mB7T{=~)^scHwp$M)uE|#Qd#Yv}D9SWSJS7rt34SmDCutr=4t7 z5n8iFVA3L{3Et7irhNF|$|1=nd(2_SmDEFBItrU>3=b_mp(-ck(y-8}wV_c>sv?Gq Hg~1vC$p{r( diff --git a/app/code/Magento/Webhook/view/adminhtml/images/fam_user_edit.gif b/app/code/Magento/Webhook/view/adminhtml/images/fam_user_edit.gif deleted file mode 100644 index 338eed2173c6221d82f65ab99e2cedbf34f5103b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 614 zcmV-s0-60sNk%w1VGsZi0OkMyT0#h0td z{Hm3PsC!LaWR{+^+KNgKW48bG-&=;ezxL|f*p)}Pva@q)f7GID>eISJREn9*|A#&d z<-3l)dK&N2tY3e})Z+BtwTbP}c$-)fdY970m`U!aun1%5A=iOr+%hq+%m|qqG0=;I^EM_{^O5-($>{S!q8OlT#6gN)Nh>LX@7f z_tdZ3v4!HIQE0#ZV`GRyRGja;gXhb4(w0%rf;9Z##P{ggtZ*;)@8yC?8urhnA56rz zh)KAYe3wfPN>!22oksuj-E8pEv}HaV`N@%3W}l?F z-`3>zf|`z?4L7$Nt!wRR90~A^8La6aaq!EC2ui z01yBW000NWfPaF6goTAiY!44!3xiP*7htXFnWJS{H&20w4_6PG>1?L3kHk ze{x`RLp}o%A}J9OXHpY?I2j5WeN!)2>g*I1f;)Ln5Fiv;ks?WwGZcUv=w~Gk3Iuj& z1c)F4O9Lwl|6tfbr3L{bemay0Q^i7-G=%PuPyq*y4kBbe#J~gqhL98B3E~|UzWL(S#RrcV7#I|PvH(d21|1Lq zQp><>V&Rp-pvI!yvU8cp9P?{3KPsn3Op5K8^>W3&yqZIs?_Ar#>^UWM^MR=o%Cy-! OkKYgIjENIsum%7^xGx?6 diff --git a/app/code/Magento/Webhook/view/adminhtml/images/footer_bg.gif b/app/code/Magento/Webhook/view/adminhtml/images/footer_bg.gif deleted file mode 100644 index d5b9d37c2d0d513ab5e1c8a518d479d408991e82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 332 zcmZ?wbhEHbWMYV7xXQrr^5x4HFJ659{Q2wGug{-9fBW|B)2B~={`~pn%a;ca9(?-r z>BEN)Z{EE5_U+rNSFhf`e}CuBot~ba%aduuV25ufB*jP-@k_sAO8RUpMeHI@h1z|R2>ir@)HAF=7EU? z8a$HyZv90&Gp%$3PN#d>M)1$jVLS5HY+r90ps=uz IkRyXN0R32x0{{R3 diff --git a/app/code/Magento/Webhook/view/adminhtml/images/ghost-dark.png b/app/code/Magento/Webhook/view/adminhtml/images/ghost-dark.png deleted file mode 100644 index 502eb75d35397652b185884ffccc3ea5289be4c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 211 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2xGmzZ=C-xtZVlH;_4B_D5xc$)o0g%fU;1lBd z|Nnm=GxX5qIv~YV666=m5SlwF!x_lqEbxddW?a>QWe}Xi&D$;i?WLqoP$jZ sw>~xls^jx?aSY*@nf#-^fzh0afjvmDeBol>A3zxfPgg&ebxsLQ0H<&}mH+?% diff --git a/app/code/Magento/Webhook/view/adminhtml/images/ghost.png b/app/code/Magento/Webhook/view/adminhtml/images/ghost.png deleted file mode 100644 index 2fe0ecd61577ffe48520830075e42a078e415c6d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 211 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2xGmzZ=C-xtZVlH;_4B_D5xc$)o0g%fU;1lBd z9}GfkzUBZ$m`Z~Df*EH1cX)OK$m1;Vh%9Dc;1&X5#!GkW{s09ezJbx4iGe*xuzcZS-yc9322WQ%mvv4FO#mPsKlA_q diff --git a/app/code/Magento/Webhook/view/adminhtml/images/gift-message-collapse.gif b/app/code/Magento/Webhook/view/adminhtml/images/gift-message-collapse.gif deleted file mode 100644 index 8270754504773d094fe4dd89003b375821f70ae5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 258 zcmZ?wbhEHbWM^PwxXQrr{qvV^U%r0*{N>B1&tE=${rdI$moMLdVxPZ$0SbKuioSdC z>Ds|BH;;W;+xU6kysy^|{fuDv5y9|1oZ)*U)6aPJADPnMD)hdd-}UY4p)Zeb{s4-H zGyV)``VqnOb7Iu@B~@Rq9R7Oc=$FU0zrK3*`TaYfxt~9OW}p(#0ht5x3j>?F!_fsS qMl)F2o0FRqMHm)$J#X@uV<+ABL@*;jWny3I!p0T}NkL5x25SJjRc*Hb diff --git a/app/code/Magento/Webhook/view/adminhtml/images/gift-message-expand.gif b/app/code/Magento/Webhook/view/adminhtml/images/gift-message-expand.gif deleted file mode 100644 index 888fde5f5ee7f54db215d8ff0e86baf5532cef1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 152 zcmV;J0B8S4Nk%w1VFv&O0K@SOEB00QXk__gDb;SpfN20ryz~`CA0~X&UmUee}Jb`d$n8dpY)qP4|~% z_Q0g{;{X5vEC2ui00#gC000FYAQwT*gLOz2HIsD!3guKwAq<;z5djc*nnc17 G0suQd22MQy diff --git a/app/code/Magento/Webhook/view/adminhtml/images/gift-message-grid-column-bg.gif b/app/code/Magento/Webhook/view/adminhtml/images/gift-message-grid-column-bg.gif deleted file mode 100644 index 7edcc8bb1a3937c6303cb4522bb749071b62803a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42 vcmZ?wbhEHbWMp7rn8?8J{o9u}PwzgseEQqF*E$S901{_lVh&+rWv~VSS&|Lw diff --git a/app/code/Magento/Webhook/view/adminhtml/images/green_button.png b/app/code/Magento/Webhook/view/adminhtml/images/green_button.png deleted file mode 100644 index bb69b64a0f2575bc5f549f1611b0df4992a1417b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7923 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 diff --git a/app/code/Magento/Webhook/view/adminhtml/images/green_circle_right.png b/app/code/Magento/Webhook/view/adminhtml/images/green_circle_right.png deleted file mode 100644 index a5a04e70a33efd7a30fe74e65bd9adc235f13981..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6694 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 wF-LV8e?0?(qdI>A1b`-B?Jellu4Hq)$ diff --git a/app/code/Magento/Webhook/view/adminhtml/images/grey_button.png b/app/code/Magento/Webhook/view/adminhtml/images/grey_button.png deleted file mode 100644 index 94138c5582ffcf3b81f3c2a99565a7324be0cdb1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7740 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 diff --git a/app/code/Magento/Webhook/view/adminhtml/images/grid_sort_asc.gif b/app/code/Magento/Webhook/view/adminhtml/images/grid_sort_asc.gif deleted file mode 100644 index 1136ddcfd69a98e88efe098c82e437b8428e6bf7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 105 zcmZ?wbhEHbWM$xH*v!H3zl87KlElB;8vlHG`@fj`@BT@DUflej!|><(X9jFQ@h1x- p0|N(x4oDJY1_O(jKySk;3s%XZ21|tq*{cysDKlrin(4-14FHjSASM6+ diff --git a/app/code/Magento/Webhook/view/adminhtml/images/grid_sort_desc.gif b/app/code/Magento/Webhook/view/adminhtml/images/grid_sort_desc.gif deleted file mode 100644 index d6349fefe91c4c245e930d8d938375975cefcda9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 106 zcmZ?wbhEHbWM$xH*v!H3zl87KlElB;8vlHG`@fj`@BT@DUflej!|><(X9jFQ@h1x- q0|N(x4oDJY1_O(@z(Qr!wb!rhG@kEXA#uP_!lRHQ)IdRy!5RR=BOl-Z diff --git a/app/code/Magento/Webhook/view/adminhtml/images/grid_th_bg.gif b/app/code/Magento/Webhook/view/adminhtml/images/grid_th_bg.gif deleted file mode 100644 index 8ccc66e7ba9e92789d5d6fcc3fcb3cc32ba11a60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49 zcmZ?wbhEHbWMp7wn8?6z`RbKZr%tV1yOx20LGdRGkYr%c0TCd11}3JE00wISV519A diff --git a/app/code/Magento/Webhook/view/adminhtml/images/grid_th_onclick_bg.gif b/app/code/Magento/Webhook/view/adminhtml/images/grid_th_onclick_bg.gif deleted file mode 100644 index 3bf5e263bdbfc5fbd858543ef93858101ec0d4f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1242 zcmV<01SR`NNk%w1VL%2#0HOc@l9H0t)6>Sr$IZ>n`S}*y*TU5yZ>M)j$~<`XsWJk>%MR-&vb3yc&_h!@BhGt zATSsfiN+*yd2A}3%%?O;g<7ZADt4>wX1`ppH%uOz#prVStZuX4>$qDEpWEwry8gb; z^Z$N{2sjsZC zuCcVUwz9ajxwpE#yuZ7_zQVx6#>L3Q%E!ye%+Joz&C}4-($(14+Sc6J-P_*b;N#!r z;^yS%>gnw0?(6UE@bmKZ@%Qxj_WAt#{`vs>1^mYh0KtO;6AE02kfFkc5Fbi(NHJo? zi54?r+<3A7qehP$KZ*=V5~RtICrhGSsj?+M04`akoGG(r%$qcE+RVvwr%#VRt5&aEzlse@7OdH^XUn2JXE3eXwQA$O zl?!*S-MV<`>b<)+FWCV=(SKlt3yY}wjzl--yK79G_vd^nG&whOS_3q=tpZ~tTeEaE)OpI|k|FUl|T*B#=i6iR6+>Hkss; zOwNO1lvFxdC6rcXiRG48c8TAOTx#iMm}HJ=rkH4!nI>UHo~h=WZpOLhoN&@9XPqzE zsVAOy_PM8@eEumYoL~ZK=%9xNs%WB&BI;;!Z9dxQqLNlh>7|oqYAIb)Zt5wfpK1!~ zsG^n{>O+N|N~)@+uIg&5u(B#^q_4_a>#eckYHO~%(%Gr5!1fyKuEY*&tgs%YdTg=( z$TI8fvd}gg?P;`1YwfewPOELU++yp}uib9zt+?cdYwoz`ilc10?4s*#x$m|MFTB;p zYwx`B=6kQc_&y5mz5w?tFuw!`TriaD8m#cZ3m@!o!w_TmFvAp2Y;nXFS1jGX8h4!W z#~6p~vB-=iJo3pPqfGM3Dz{u#y)Lty^2{>V9P`cla7;7KHt+0n&p`9cnb1EI9dyx1 zAH6cnNgM5S(@-n@bg?>19re^$U#+#(f112?)?9-v_Sa+w$#mFdkB#=)YPZc})o!z$ z_S|yU9k+a5+fDb~d-tvP-Y!83y6UIL4*TqhcP{(uxZkcj?NXc0`|r5}zkBc& zyFUE!!Y5BW^7`7YJoC^$Fa7f5`cD1z(PKY-_J|t4{rB33&pr5aIxjx?=%26t_#|4- z{`={}zkd8adO!dD^5;)K{^;@VzyAN*9{}6qJ^>mqfCwDm0X1Vk1txHT5PYBnsgeKy EJJm0~K>z>% diff --git a/app/code/Magento/Webhook/view/adminhtml/images/grouped_to_order_icon.png b/app/code/Magento/Webhook/view/adminhtml/images/grouped_to_order_icon.png deleted file mode 100644 index d7e92ab9935186870f484411e687d8802baae010..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 902 zcmV;119|+3P)b0-#_0s-#3iOWCC-Iit0+k zoA%eg@?B2WVzG!FFW<)ITE_{3Fspdt*6HRo^;Nes;-as3Yx%ad2RF4YUa&Cy=~d^a zc^g!1S*Q0Nu5ZjX+6Hr0*}b}K(PPfDZZzlHwi6ALDfLgjFZ2}36*bj6*(m7@hr>k0 zG1C%`G&dc~TVHTC9!tuMjy2G~93&VZi~uGCCG^{`X;d?K>-F)xbo#!f!ou<;~ z@4oRnmXLvtF;O6=UKS+BE{$oI8Mi73fmm>|?PtrEhL?dClWbnma@JOwTh8b? zvkIm<0T9?(-g0(>D?z~tlmf`YFXR^)?CE-et3Y3RU|lQLGMVX9r<1dY&PBxB(i;qo ztBZCW-@8XwW<8@I$Up=E5?LG4GAp$s$*XA_>l*hpFj_7*YqR4hZDd3kgH#g!j*rUi zSjQTPO;bs0^l%A)W4{J)k9-|Ol;ET5_aFYv!H$Eq#fxiKy+bU~KuQ&2H3PJfYA2P2 zRC#oFEGZ-S?odgKuSNPV2ST>7QlTbA`zAlf<@k>z)tbObpynY7AyCF*11O@5Bn6Pe zoAsXAcR@;ZisK|8zx#TMvuBi`OnwFImfNWA1QZw>`$0Mn{o(!MaO&A`us<*{F_Dfk zKi#P-7{qj@<5^Q&=f@B_aC`U=w(9KIoq3LvQo(0Wo~pF{|GLA>cb#1>7at0R;LPut cYG(! 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 diff --git a/app/code/Magento/Webhook/view/adminhtml/images/icon-tooltip.png b/app/code/Magento/Webhook/view/adminhtml/images/icon-tooltip.png deleted file mode 100644 index c9b1ce706b28e091341268307c7102206790f9a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1441 zcmeAS@N?(olHy`uVBq!ia0vp^{6H+n!3HEh$GDULDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_cg49p6dArU1JzCKpT`MG+DAT@dwxdlMo3=B5*6$OdO*{LN8 zNvY|XdA3ULckfqH$V{%1*XSQL?vFu&J;D8jzb> zlBiITo0C^;Rbi_HHrEQs1_|pcDS(xfWZNo192Makpx~Tel&WB=XP}#GU}m6TW~gUq zY+`P1uA^XNU}&IkV5Dzoq-$tyWo%?+V4wg6Nh+i#(Mch>H3D2mX;thjEr=FDs+o0^GXscbn}XpVJ5hw7AF^F7L;V>=P7_pOiaoz zEwNPsx)kDt+yc06!V;*iRM zRQ;gT;{4L0WMIUlDTAykuyQU+O)SYT3dzsUfrVl~Mt(_taYlZDf^)E`LU?9gN`84U zShcUOm1kaYNn&1ds;7&s5>UThW@d_&vw@MNg|mf=tC_Qrp`ojxldF@nlZ%O^fupmV zk-4)OOs`9Ra%paAUI|QZ3PP_dPQ9RnkXrz>*(J3ovn(~mttdZN0qkL`Ox$j9!f75< zZwhX=IOEi-4|I$^C|Z%C872fwJ0K=J(E>T}WS^P`OzTC!MBTaSm@NYXlenjgV@SoV zBcc1d9|Z`^JJOM$xM&@BUan#kXVcZfwXLm7TO&B9ZEC%(5piQp!p7FAtsSlP4IOVq zn@%O=DtE;ym~s7c>NWqYSGail^px#88&6j28{eN@Y5d;Xg5g2c-h2M5ul_n!7{kKz zq-f_J`Tpb6BXqubA297dP^KVI@ukAXEh0j1`oxndmyW#@?&oJzw%c_#Z$j$NRlD!< ziFF@6YaR4Sx&F|`6I+xeLnL|F3}pCj-bvf+Xd=~GV6kS|+Fc*_Jk#+BUoFbq=A?My zY0-nPRX3xyW*<<{+|v+ZmP1 zFGa4sHdPVgoOX6^thfvhTja!VzisFEE%(1&#ybD}bLqnwCQTnJcs^Fh)Y#3p`(bAk zdi(wN=DT_SO;Rs>iCFSE^R}aFvDMs!jS+eGCd>a^J@M(yoNqmkrO$unce^g!IO&mo z@sAA)Zi$K>h*(h-9mG`Z_3QfTERmR-4rvolJ^jS*C=gdDWyn}}{Mud-u2%agE(z9C zy=E>;0S4Lvl~>a>Jpb*Qa^&vKIUJMxmY)rt)KIcKd#lvz(#SZa55#qZvOvNW7m^O8#8=7 zb=q#cE%OZw`uKanlG9JC#9TkFy_jJ$48ZC#$1x_5(|SEg(l8Zn&5OYQ^aGYe_KdKf!AElhdUW_=CK5%vs6yf>h6j*>Eh6t z-r)Y2Ge(DrSx7~mfkTR4ii1I3MTEJ$vbwguQQ6PGpeR6DmW@3n&7Yl3R+W#3Ga^cb WlZP+Fw^$+GOV!0q(ZkD;!5RRDUv~=t diff --git a/app/code/Magento/Webhook/view/adminhtml/images/icon_btn_back.gif b/app/code/Magento/Webhook/view/adminhtml/images/icon_btn_back.gif deleted file mode 100644 index a59ed3984560b0b31b9cca8191f363cbfc808b7d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 216 zcmZ?wbhEHbTOX&!0aZJb3W?_wPxQCf&Vr z=i$SL*RNeWefso?6DN)yJ^JCphs&2QfBEv||Ns9CL;%H~EQ|~cA`ChpwIDkgSVI+5 zwE{nzOjKIev)O@Tiv`bbkKlRU{%b8P=K4KS&~0IB%nNLK!PnZtm*n(>sdEiqVUZsL oW0Q${uS{`6qtWp{tgXU}x(b^=XDzy>ZFYFQhnj|#k|KjO0C1{UDF6Tf diff --git a/app/code/Magento/Webhook/view/adminhtml/images/icon_btn_delete.gif b/app/code/Magento/Webhook/view/adminhtml/images/icon_btn_delete.gif deleted file mode 100644 index 458068dfaa73d48ebb73040317b1e74e399edafd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 220 zcmZ?wbhEHbXOb!+L;rJp{1nmc#ynKNf@-@bk7)Tujn?kroj zY{iNdKY#w5KY#xB@83VXfA{*;%WGFIO`0_6|NsAMS1w^71QdU=FfuTRGU$L5g6w2q zjZ9DtO7ZN}kaXk`nW*{I$K>yUCpi|An|;i$swhNSh)p{1#I@0ffw$A?5`&L|3fo!3 v2|N|TY$q$Hh;-TLs2X_&a9%vT$wWAUlS#oZZ1X|4Y#qINLp60JMFwjCj-yqf diff --git a/app/code/Magento/Webhook/view/adminhtml/images/icon_btn_save.gif b/app/code/Magento/Webhook/view/adminhtml/images/icon_btn_save.gif deleted file mode 100644 index 87a9815b4975e0ddea63c6e57705e5196528fec8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 203 zcmV;+05tzcNk%w1VGIBa0K^{v{_^Sgc@+Qr`TzO!{n@?#^z8l7ululd{LZQQhAR8G zgZr9l7x|NEIIA^8LW0018VEC2ui01N;O000F@;P-VIr)gZ)i66FkaJ*sT8{Zpw z!-D~ryMjXjGuebKp=b!J( zc(^p_&$svQP8S~OReyWA;?I`@-yfuYzkBf4m$$Fa7e87SzqiBh|Ld!d9zD8#aPrwn zo=3P#R`Pl>=xNMjA z8Hli{s_}|4ZE$s#*Rp2R(KK`2plmE@x8)4M@eT#8RciK%acwuPa(m~j6FD|1;r cyXm{;U!V5k89U4CJ{ES?sqO6ytc?uT0NoJ6NB{r; diff --git a/app/code/Magento/Webhook/view/adminhtml/images/icon_export.gif b/app/code/Magento/Webhook/view/adminhtml/images/icon_export.gif deleted file mode 100644 index e9fcf7cc93e0b1d7a036fa58f452b4b8c56d2f8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1022 zcmeH`=}(dY0Eb@_NorFgUD>P=wPj_^tA+7uv>KRES?jLlRax28WpnG=I7BEtdwnwm=&q>G#0YU(84M0&O zfx0Jp@<`l0{w9mWoFwjg`awlvj&G&$kNcF#$`#)663lBS2@ge}7aHS9l7MYD=DA68 zE{gjw0wZx)_VS{-`!=LZ@>uUe55Y>q6`x&A;=h0PUCPrWIzOuj%uS#!5_L|s6=v1P zmG8&?D|GeU7%TGP8+)Uc+}@%<>*&zkkEHkE`zk( zqt%fVIseqs(p!nnjyeV|<1VugL!2K)!h3PkmLeRPfyY{R$ivDz^XlFzPSup8 zT!q6!Hp4N@`6}hkN_3_@t1cRux_7od=DtZXH>wnKKiF;vt&%x?7;`S4H%^aV- zdCpdEGak9|{4i|21l{MJ(YcvnT3vsYXGELRv~~PVCNfbz{D7NSy2RR+1T}K4FLs=Ku%5!_kSP`VtJOO$JJkS+ z+B2$6Qm6wY@mb9K(>2-Y=xtQLyX_qlL(f3RKq2n=>P2DbX@cvE*xpqz?_i`x;DPF( zCN4$51UgF*2t`rA|NWzZ)jpaZ0Mr0cf4RR+0D%w?$B0PQHFQY>vYS~(T~IaKk4;~` zdN)fQ2owr|bcIAzu}2ZX)UPX9xiPIYG(Wl_)sGfj8weJ(e4r=i@C-|s(!mP)Ra%mX zZQ`%pM5ixDelv}1aRQLu_Borkbi2rs+A^q+8B>;tK;Kfim=+VMpSGz5tcA=21|efG zK%$CX^gc?zCSS-1jtw1D7VyL+LE-7GA)KD>h!o+z2;N6_8EcDl!HBuYTvSYBAf5(g nB%^r4nQ~67K44K0m@;J0GihVIu>9gfxN@Zw27r|iugjyK_i?%mf=ZN1k*q&Uedp~2B7g_+fS`hk+Nr1A{hI)z0`VHB6Nndl zX$Di6C%-U4JXr@~z-vS-U`e(1B@n-FV+JTmdRsylL39C=TOrljOR~Cct>JYCvg#mK z1ulqf0!%<`#~!NMu5Ba=9u&fmP-Zhc6E?!yaAE01t20W#1|(JmqlC- zu^GHsMqCzbhR}vI*0gbTWQ<2wA~0LlNQ8*Dc(aJuEaI~Cy?zX0(B7i0rEb>&+G>xJ z3k&o-xX8WohAjXsqHu`)jo1ugGgz-V-_eT`kMj#kXL{&TC&D=t zDS)urCatsVt!&16hZE0Sc81**wR}pC@@4w{a?#MB{`E|khgw{yHQH-JtJz=E5u9kb zz}Uv4VI=}WWEmpZrq|Nk@K0E$0Zz%n`@667Za zwweRsI&PbHrkO_SDqiu4ago-U>9i$kyR`R)1xlGKnimvB%LW;*)K%MYfK5yEIGe$x zP1=E;M^`P($mC|!HfL5dXJlhBHIQW#)7D|ok>};}(lVD5GUt~x=h0;~QV048+#ZZrM-}|1DA}_hzp^8a;3bXX!6MxA zEs~7Fp4x_JXsv+#5)d#!4`}GF;h7|AmX38-_iRI343Dh?Aqz??_(b3|Nabs10`BFm z2HE3lJS0jNNr<`_%)X&&5R#)~1<8Kt6pvP*@>y8Jv+&cmI)qSsL=zM%=oDyZdvX)@ z=n{<10UG{Pcb09v@b0f6Te``=PZ6q$B_;*gXQ=N2%1;lv_{gSq1aGgEcXJoOF&9<` zbG(#lbd-i3(Ely!tSC;tg%!!0yl$a_lnB>Weht(5UlxCp4Z(JNFR$FM#E$?20DW?^ UCQGuu<^TWy07*qoM6N<$f}6GBAOHXW diff --git a/app/code/Magento/Webhook/view/adminhtml/images/icon_note_list.gif b/app/code/Magento/Webhook/view/adminhtml/images/icon_note_list.gif deleted file mode 100644 index 5327e200559188c20ab46c2489f76c60088eb5a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 189 zcmZ?wbhEHbeZ{ypFe;3^5y&Y@2_9K{`&Rn`}gnPy?giR)29y~KK%Ic z;JrZ_4Mh}@B8+BKXT;z!GoU{E&BWM*VB>D_8#i|DORjQ2faPmec`} zAU`p%RUK$v z#!-5!DSOXP%^ev!l~n9zCs2H!eSb+FB;!j0I-Q g8ip!+Ix<)T04x!wjQ{`u diff --git a/app/code/Magento/Webhook/view/adminhtml/images/image-placeholder.png b/app/code/Magento/Webhook/view/adminhtml/images/image-placeholder.png deleted file mode 100644 index a355f94784148a0d626cae54c05423734b1a707e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1748 zcmeAS@N?(olHy`uVBq!ia0vp^(Lfx|!3-p0v`$_CQjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn~YUU}gyL332`K;lsy|A3uHi^!fAWFJHcV{rdIWw{PFSfB*60$IqWXfBpLP z`}glZfByXa`}g0!fB*mg2bwbqMnhoOguq|Zt%rb~;VkfoEM{QfI}E~%$MaXD00pH= zTq8zv z=acWZxvpt^xXnc(`NzR^^1;r_Zk*oW9&ELU@vrO#I~SMPvpiSnZ_o_ylhPU-Q7eRsIrxRF_u_vZVi3;$(;R)?LKlpx&xx5<0$tZ%`y_8c}6P%tlG zRcv`CbbI+c=FGDkdA~P&^4@;3_Yk{T)D5>J>xzIVzpa@}d>h1tnB?BMpANtK(M0vz z91f=YXRlgcZ<`$Y!?5{!V)Bx(3ho6T&Kq(ENZLK`3hR{>zP-Lq>dlKqALKqY@NMCC z{l{juye0m5-;vO&291*S+()WEsNQm!*3fis1qbuO_nMtsx~w@@)%dLln>^v92E$C= zldl8*M-@F%|Es-`_X67^zMpxeZtXl%Y*z}+u3ltrD7^C83N@Lg6D?jj8(7y^R#`q1 zJd-={NxAOSI z{bujI-)}eH`!-Q+O}0_Y%-U=BZBI9z730ood3gJ@asAZRJ5&###9%GPLm#N-|KCGA>5zpRk{db_pHOmdc!)ZOEn6JCFRdxvq+EGvmm zCD*=*S=q%_%(M_#?3e$B^^x=)UBw`)#;~Mh->vO-?|){Q6*aAX#w+{KqKCCnW420_ z>U#q&KgZ;-s@SSIk0#I+$KJnt)YgbwO>DQAkrvLr^{}>+hM_y*wvK?HKc)I$ztaD0e0sxk;`C0$~ diff --git a/app/code/Magento/Webhook/view/adminhtml/images/loader-small.gif b/app/code/Magento/Webhook/view/adminhtml/images/loader-small.gif deleted file mode 100644 index 62feaa6c3c85d98a0d6f81d9a75fe837d6243bbb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1849 zcma*odr(tX9tZI2z31lM+(&WGh&)v7JFDB1$Py4`{pnbB^?U70$&w%yKXhh4RGyRa>@I@4{N@W=j@o!Rr} zdCd9D_ji7CvbJqCZnQxJB0nI=^71l*AouUz_xXHx?%c6hEX~c$!I|RXVwp^K>eQ*r zmoG;~Mh*`TV;H8_>uYLif~)`ki2Iq&&n$keVZ;?t-lppuEF*L(WUN;SlXUF>Q-Uyr( zoxf_Ez~0Sp2jJg1>2EGYnI1m>c%WdETl!G8-QzxA7|;LXJ+rGK{rFA#TGAO2BgS|A zX;ZRXvIpY;C2v!w03l7Wz+DxOl01a10UfD;mvUG}zmiJR_PB7CJt2#Ovv2InFp-~_ zV9!+d+|sNdLOUK~b?%gldo8vEPKx(jf9T9UO_ImpMCuc&L0Imt6JlII14~v z!t;;I?-4#7uAV&AW`DF3jyn*5%P#{MF9?y#vRewBDGXC|Fur6 zd6!*m*jg(7ZeineUcqQ)N+L=@g&Q@?SRP&5`+AqkTw0~|??YLxO73^J=Qg?0Oikf2 zE4h5G4`RG=WcHHmQE|wxrSz@XAn&DXQM6~h}@GM&*Z0{WN!T-qS%}H=oXxg zet-3MjjN&L!RS9G?Qb#PY~PieTvb~3udjMa{1=kyUMvN6Zg+FGR@-9zmCs+>9)Hk3 zY#2He9~RIa0{l)L1h{3SXGt=rqV}gV&Z6@PsCOb>#~VFjJt>`)tiM)0q8N?FhH^MA zcI}m?u3i*HNwi5<9he?=1+3F0=OliBnZKSX0YbKUuUA%05V$Shp=F3lf>A1aH3W&| z+3WZ53A(|t7Xbv@U@uP$OL{d#+6IH9fQld2`t7;<6Nqymhyojdfg^ z?>+yMk0PXu_n!&eIRNpNvt>#t^g8P?1=Zi_x_z#XBpa8TRguvIQM9g_2l<4R5Gs`l zhQNqd_EqH!fUYf76#`PF+xBrBEa^YGl+iHdOOOk0{`Om^n4$O;1fGRp zt$aSa7vT~?8(DFkVX7#@KNr)Xd$9I=iraQprx6`kJ#bMIE0}-!xgYnb|$`=}NM_EgCi|T*ZX+@*X9a25HG>0A- z(;cU6N7Dat;MT;d7mThQR{g`5N7vGUG4l?@z2o<-u`{@O^6Kq~n3=&7lb=S<+>Bh9 zSMWu|jp>P}rGO@R3Dg#hU`d>2sALr&glIR)6FO8hUyI|L;7Fnz!}f&NG>2Zzil)B& zjQk!ol>-~g-w8A_DI?ax^2dVINY~>{F@o+l7QwdX<8-r4rVOK)vFsTi_#_JdYj#1c zBVuO3ffNpbevheubFP6F9-EMXumwB_goSzog9kCJquPN&GQUpO!g`hATk5}6+Q2l< zj8W<=lzu-4B29`9Vsi$J4B2T}Tu?=HckVY|P>)FZeBZ1SZ>D^%o(o^bh;~jgrR^H{ z@t}2H&1X7?mq*3wM_Vuy^3o~RSd_n6O=CW|IjL9(D|smOW;GZ*yq;}*NltMgO?v1f HS{c6pnK%ux diff --git a/app/code/Magento/Webhook/view/adminhtml/images/login_box_bg.gif b/app/code/Magento/Webhook/view/adminhtml/images/login_box_bg.gif deleted file mode 100644 index b15f180d93b760d4640d0f960cac0fe1c0e1772c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23788 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

    tWV^Un_L(AD!jC-i#ubJQ*| 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 NXJCb>$7a2O#Z0)vV0Stn92TtVl9& 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 diff --git a/app/code/Magento/Webhook/view/adminhtml/images/massaction_button_bg.gif b/app/code/Magento/Webhook/view/adminhtml/images/massaction_button_bg.gif deleted file mode 100644 index b45618a99a2dbd04722f71f256b3282a65d57367..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 87 zcmV-d0I2^*Nk%w1VF3UT0J8u9{r&y;`1thn^zZNQ>FMd@gwv~=*R#DIv^6HhJl$)B1ptpfsw%) E05m=bp#T5? diff --git a/app/code/Magento/Webhook/view/adminhtml/images/middle_bg.gif b/app/code/Magento/Webhook/view/adminhtml/images/middle_bg.gif deleted file mode 100644 index f44ad896d43909b91aa8b89ea8487d444faaa7de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 327 zcmZ?wbhEHbWMT+mxXQrr_U+qOuU>uo_U-4-pFe*5c>VhImoHylzI=J-&Yf2;U%r0* z>gB7KFJ8U`%6_$YI``-dOte&#pd&#h^{#QF0-LnDJUgKAs5fFNr(E2Aiv5aT392~II?_L-bg XTI@VpTKo&NgcoygxUAH6WUvMRB(J4} diff --git a/app/code/Magento/Webhook/view/adminhtml/images/more_arrow.gif b/app/code/Magento/Webhook/view/adminhtml/images/more_arrow.gif deleted file mode 100644 index 38274038067bcc9939437f77351cca250ab0597f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 90 zcmZ?wbhEHbO_8*eac4A)}^cP0jF04xw6Z2$lO diff --git a/app/code/Magento/Webhook/view/adminhtml/images/nav1_active.gif b/app/code/Magento/Webhook/view/adminhtml/images/nav1_active.gif deleted file mode 100644 index cda58c6b3fdad22a1e1bb85af444013c29820b8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1315 zcmcJM{Xf$Q0LQD@)9<^x{_1pUhT9zpIlG$3h8yO*39d4I@GJKd78(v z%VQ5jW5$NDN5W=dD?|vzGWPt0nK)OMyY7Fu&kye(-#@%RK_P*DhcBW*&VUL46xojN zlDANgf+PVJ6JeIGBcNkg@OTh}^c^T|AJEs=mzi5w;07)tmn7Q)G&+Oc+(Mx?q}|H6 zz8#d~Vv({Hc;XKm_<73^VXO3ahwS`2wRP0nUs_bvQj+ZeJQ7I2Cp|g@{lx|-+h^Gs zWpg$C*3C?kFwXXV)nnEP>!g(QAS7_r4!A+gzE^&~;$c;85t$ZXRqO#7OW78U1n%A| zYY9P2r`t!x#0!PO_Cppe%(j+R=6E=i%j0u692SQw#z6Rden)4g;D`m*4%Xe(B@hUH z^#%X*?cRX=r$>M0=T89GCJ}Kw%qoYJo0nfuSaj!Z zG5L>sC8cHM6_xiNl%0q~AW-lpl)8Fq1Ff-%&S?I(Mq4|J&EfJ`!6-zKkA*t#bk**!t6XkSNP4 zZW}6Yh~Fj`llO#Ghj+9q2P+RIz8mUbsfX=%VP(R4wsxF$iXJ!I$pCb^^pb>U@Khgm&J340vT-T7YY;Cn5;rvB;rlI&Tb%ZZ+@ z4YOvPeqp4i`@{OOeDL;24H)r7^oo9NL?GDQ1fU)=BE%6V%YeJnWSK}`jV$v(&9Vr7 z@-%Kf$LSJnp5&aWna_14c`W3)mE#ujJ*c#W{5@T=0Qir69`YieNu2zSpNb~G>%XRv z7h|BF3NqI5ih{hGADOjj3G&e@N+JV2m8GZ8UQw1sUusmA$E0eN74albRfXfkCLfgljcd0uTDcD2YPAi zO3&i8^_7>JwDrEin(q;3v%Pe*x^ld(kw$IOH8Hq49i2JgrDw1w@p^_QjtN+uS=H%V zg;11%+2@#OXp^|p4edj|dIM`T5M^Y!q2onXrxNH!?rf^w$di#!i+n|S;$nw}N?+_W zaP^Cwdn-ppma!9wOWl8}=u15x*YryQ0ES)`LUs_Ad*OQ-%e_0;t{^CYMVtB@q6j8p zztd%gX}~$nU=q9LqE{qt6@(RuQ*fjR8P7JX4DJ`B%|kv@1oN<;nqhwFziu#(U|`;> zBL_=sL^j9vHm{C_e`8!7j|@sO+jtSl857Z$o8M2yq&5Erb(JmmPbX9)t-ZlDG_SoS b@QiCS$zt#I*=tit>(cZYDa1Ad0KWYPc1MGN diff --git a/app/code/Magento/Webhook/view/adminhtml/images/nav1_bg.gif b/app/code/Magento/Webhook/view/adminhtml/images/nav1_bg.gif deleted file mode 100644 index f04614925d0d42c6d481d31c5260325e7374f44d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50 ycmZ?wbhEHbWMp7rn8?838x)$7T@V%>AD5D$_>+YJ1av?INS=X-`3wsygEasXUB3o2Jd2J!8)N%)+vkuD;$$ z({f8HyC+O(>gbt1XMSE;bwNc85sqoZ9NmF&6?BMH)-;WIa6oNt!`{% tKmv+CS-?CU5DBuAfmJ+Vst=Ed;3USJqYpI1uIYqK$mB1Qb>d*K1^`wNI3fT5 diff --git a/app/code/Magento/Webhook/view/adminhtml/images/nav1_on.gif b/app/code/Magento/Webhook/view/adminhtml/images/nav1_on.gif deleted file mode 100644 index cda58c6b3fdad22a1e1bb85af444013c29820b8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1315 zcmcJM{Xf$Q0LQD@)9<^x{_1pUhT9zpIlG$3h8yO*39d4I@GJKd78(v z%VQ5jW5$NDN5W=dD?|vzGWPt0nK)OMyY7Fu&kye(-#@%RK_P*DhcBW*&VUL46xojN zlDANgf+PVJ6JeIGBcNkg@OTh}^c^T|AJEs=mzi5w;07)tmn7Q)G&+Oc+(Mx?q}|H6 zz8#d~Vv({Hc;XKm_<73^VXO3ahwS`2wRP0nUs_bvQj+ZeJQ7I2Cp|g@{lx|-+h^Gs zWpg$C*3C?kFwXXV)nnEP>!g(QAS7_r4!A+gzE^&~;$c;85t$ZXRqO#7OW78U1n%A| zYY9P2r`t!x#0!PO_Cppe%(j+R=6E=i%j0u692SQw#z6Rden)4g;D`m*4%Xe(B@hUH z^#%X*?cRX=r$>M0=T89GCJ}Kw%qoYJo0nfuSaj!Z zG5L>sC8cHM6_xiNl%0q~AW-lpl)8Fq1Ff-%&S?I(Mq4|J&EfJ`!6-zKkA*t#bk**!t6XkSNP4 zZW}6Yh~Fj`llO#Ghj+9q2P+RIz8mUbsfX=%VP(R4wsxF$iXJ!I$pCb^^pb>U@Khgm&J340vT-T7YY;Cn5;rvB;rlI&Tb%ZZ+@ z4YOvPeqp4i`@{OOeDL;24H)r7^oo9NL?GDQ1fU)=BE%6V%YeJnWSK}`jV$v(&9Vr7 z@-%Kf$LSJnp5&aWna_14c`W3)mE#ujJ*c#W{5@T=0Qir69`YieNu2zSpNb~G>%XRv z7h|BF3NqI5ih{hGADOjj3G&e@N+JV2m8GZ8UQw1sUusmA$E0eN74albRfXfkCLfgljcd0uTDcD2YPAi zO3&i8^_7>JwDrEin(q;3v%Pe*x^ld(kw$IOH8Hq49i2JgrDw1w@p^_QjtN+uS=H%V zg;11%+2@#OXp^|p4edj|dIM`T5M^Y!q2onXrxNH!?rf^w$di#!i+n|S;$nw}N?+_W zaP^Cwdn-ppma!9wOWl8}=u15x*YryQ0ES)`LUs_Ad*OQ-%e_0;t{^CYMVtB@q6j8p zztd%gX}~$nU=q9LqE{qt6@(RuQ*fjR8P7JX4DJ`B%|kv@1oN<;nqhwFziu#(U|`;> zBL_=sL^j9vHm{C_e`8!7j|@sO+jtSl857Z$o8M2yq&5Erb(JmmPbX9)t-ZlDG_SoS b@QiCS$zt#I*=tit>(cZYDa1Ad0KWYPc1MGN diff --git a/app/code/Magento/Webhook/view/adminhtml/images/nav1_over.gif b/app/code/Magento/Webhook/view/adminhtml/images/nav1_over.gif deleted file mode 100644 index 2878e7fb750a2577234a4225d60230ce4fa22b63..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 368 zcmV-$0gwJiNk%w1VJra|0J8u9&)?$I*4F3f=!T4t&Ck%z-QmXA+`ZD*!qwTz+urHv z>CoTe000000000000000A^8LV00000EC2ui04xC+000F4a1ceSy*TU5yZ>M)j$~<` zXlfEeAOK4&&vb3yc&_h!@BhG{a7Zi~g8)H50XsUM(5Q4uty*&c%5}@_dcWYWHcT#? z&uH#A&2GEj?=^f*uiKsSyME8-=lg(xf@Ob$hKGnxg^7%fjyQ{tl9Py$l$V%#mYJNL zY@42;qF$h*rl(P*sH?0&s;#iGH?Oj_vb46js}u#jzQ4f1!o$SH#>dFX%FE2n&d<=% z($N$N*4NnC+S}aS-rwNi;^XAy=I7|?>g(zh2Ji6k^7Hid_V@Vt`uqI-{{H|23LHpq zAO!>n6DnNDu%W|;5F<*QNU@^Dix@L%+{m#bM+yfWLW&$ovZTqAC{wCj$+D%(moQ_> OoJq5$&6)}#0029NU&TTI diff --git a/app/code/Magento/Webhook/view/adminhtml/images/nav1_sep.gif b/app/code/Magento/Webhook/view/adminhtml/images/nav1_sep.gif deleted file mode 100644 index 2284d977a6a1d115775932c639ca9b0f9becc08b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 154 zcmZ?wbhEHbWMq(GIKseCQQtgq+N}Oblk3~MimK{ro7>B3o2Jd2J!8)N%)+vkuD;$$ z({f8HyC+O(>gbt1XMSE;bwNc85sqoZ9NmF&6?BMH)-;WIa6oNt!`{% tKmv+CS-?CU5DBuAfmJ+Vst=Ed;3USJqYpI1uIYqK$mB1Qb>d*K1^`wNI3fT5 diff --git a/app/code/Magento/Webhook/view/adminhtml/images/nav2_last_li_bg.png b/app/code/Magento/Webhook/view/adminhtml/images/nav2_last_li_bg.png deleted file mode 100644 index 9d116872d15b83ee9adee54d4a96bbd088d168e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 350 zcmeAS@N?(olHy`uVBq!ia0vp^dx6-9gAGV>8s4%6QY`6?zK#qG>ra@ocD)4hB}-f* zN`mv#O3D+9QW+dm@{>{(JaZG%Q-e|yQz{EjrrH1%eeiT~45_&F=89q0AqR%Gi@tMs zs+m5rRCB)$+0?2N5m~8Ny*l@3@QrHb>d1(IoD_~uWAP6RA8ls{Ec^3w#)WNf!@V;9 z?Y4homvH2o{b}Exj}fz*%9X2J_!qHXY<}VRMWIT-wnGkui(95c4ws%iefx}=^Otb{ zEIzNkcAxm|eeai>B~Dpi9sB>NMDWYKF7>CymoLjyJ8W>~%wdVp&{EC0)9-nI(Ttzt q%<=!{|I0Q#SCr>xzx=CtfI)ASl2*xU@2^0=GkCiCxvX8s4%6QY`6?zK#qG>ra@ocD)4hB}-f* zN`mv#O3D+9QW+dm@{>{(JaZG%Q-e|yQz{EjrrH1%ee`s345_&F=E}xQW`g+<7}8V#Pq8%|lS zzi-d~o7Ln^?)F+w&Dzps5AJoyU2J~g_(h>gz_vrqg?|w{GPfV64F4i`9D4Y-FP1-h zKvpvO=bvell1G9jH W^3{I^r#x5hwRnBjTFrrp!5RR*(HxZk diff --git a/app/code/Magento/Webhook/view/adminhtml/images/nav2_li_bg.png b/app/code/Magento/Webhook/view/adminhtml/images/nav2_li_bg.png deleted file mode 100644 index c943091ad941751a5381c89ba603c2683877e04d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 163 zcmeAS@N?(olHy`uVBq!ia0vp^dx4mlgAGU?6X!DpQY`6?zK#qG>ra@ocD)4hB}-f* zN`mv#O3D+9QW+dm@{>{(JaZG%Q-e|yQz{EjrrH1%nR>c7hE&{2Dk(1y|NZs#^tX$y zWFVdQ I&MBb@06IM~x&QzG diff --git a/app/code/Magento/Webhook/view/adminhtml/images/nav2_li_over_bg.png b/app/code/Magento/Webhook/view/adminhtml/images/nav2_li_over_bg.png deleted file mode 100644 index 06822f953b3c9e131caf5ee4e934c5ecd8704edd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 162 zcmeAS@N?(olHy`uVBq!ia0vp^dx4mlgAGU?6X!DpQY`6?zK#qG>ra@ocD)4hB}-f* zN`mv#O3D+9QW+dm@{>{(JaZG%Q-e|yQz{EjrrH1%nRvQ5hE&{2Dk(1y|NZs#^xXe@ zT8kyz4r)joTVSAR*V^0r*5GnRKu^;|HaFqF8WM#J3I`ZElsOrFe<%0?^)q<7`njxg HN@xNA5o9vs diff --git a/app/code/Magento/Webhook/view/adminhtml/images/nav2_link_bg.gif b/app/code/Magento/Webhook/view/adminhtml/images/nav2_link_bg.gif deleted file mode 100644 index 0af1f607e58017178caf50977560620be4f1499b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43 tcmZ?wbhEHbWM*JwXkcXUOGsm2U{L(Y!pHy=&;ha;Kr#$WOfEqT)&P>S1!n*N diff --git a/app/code/Magento/Webhook/view/adminhtml/images/nav2_parent_arrow.gif b/app/code/Magento/Webhook/view/adminhtml/images/nav2_parent_arrow.gif deleted file mode 100644 index 591c49a3036bb7a33747437cac05dd376bca739b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 84 zcmZ?wbhEHbzf5M!#>m`scS>hT| z5}cn_Ql40p%HWuipOmWLnVXoN8kCxtQdxL1)dr}@%+tj&q~camNqKpCazerb_M|w4 zv_uKk#R(Nn_6~m}JM1?(2=7r8*xcWCT0`R519gG<>>LIRZXv86X59O01T=xc)78&q Iol`;+02nbcC;$Ke diff --git a/app/code/Magento/Webhook/view/adminhtml/images/nav_bg.gif b/app/code/Magento/Webhook/view/adminhtml/images/nav_bg.gif deleted file mode 100644 index e013b09f3bf4802513500b8a252818dbea14886b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50 zcmZ?wbhEHbWMp7vn8?8Je}Ta7%^8hzmN76eDE?#tk_-$wAOa-Mz{K35%*tR506)75 A1ONa4 diff --git a/app/code/Magento/Webhook/view/adminhtml/images/nav_list_bg.gif b/app/code/Magento/Webhook/view/adminhtml/images/nav_list_bg.gif deleted file mode 100644 index cf42c6543d5e51b0ff9f019dde08fdfd8095650b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1514 zcmd6k=}(h)0D#|?qo_<@!GIY|F*@Et0ZBB7(=0GeVbeLBMqD&nHUpJAaY5pk11W8> z2<1Lnpd7Y^9w1aG2ndQ4rzD271>402&m0D}@3l)``lgC{UZhruHlq{84a46gkD{jTh30%DvqOOq1ni+AReti&^#ndB;Dp+xyQ((l-HtV2%3wG zapR!>8ArCPF%T32d42Bs`~<>*Dx)LD= zTmN3)5$ayZ^CbJa>Ih_W-~_S3Kd?$hbaG5`E$;mllY`&$OEt6M>jMnCn_Nk7fcp;& zTy%~EAGj3Ez$QJE91P?KG3+xUCFFp+L*3C?)JKz+T+lUxzMlNZ|&O&(H#l5`lZk2Wz3@&$}YAv zEcO+hh?-719hNr4ImbBkW2;0p!oMQ8HPHH8GhY8&U+h<}tZ+8cdz$Hi7tMy5&eT1J zFSSXR=X-Mrw`1GjvdS9s%9qcFNzKe+2ZBN)=p%3ik&-O{>a`>DNluo_*u$cvkYT%Fq}V2bxlyt z(%h){Ir^~z@?1Ke%b$Df-a&G~`u5=GGfs|?=b!j1`16@(P0IPK09%g*=C^)fE|_5V zngx(^(NDFI8$$G0%)5H+?qdG+@S4SfYn7x)42kNYD7sT{S5Zvn)+kD%n^X!`e2>Qx zJGO+xvQAXgER`jhR7>T_ww_83#VJx*L3giJR#HE{O@Ww1PgQl^wMf;|qVQT3mz|(i z@ie{?h@^^Ijkw87aLH5gK3FpVAs%!$Drl-3LOWm%*EZ5yIsjr=wvk8#kKQ zO7F44=#{s4o^a)zSF?7d&sXNP+V68FY|_SmNw_+Ac0;>56oB(y8$RzGv-Un15v_e7 zHj*ZxkRb2%(W{{`>wjO55Ur2hysujyC(*o36SthhCb49m$n-I~S!bGzmw9hY{XQPE z@hNdhv@xB~Oq#Sx#`$c@DbBH*vvfqfIhS!tzd6qg^4VI*WRO@^MG@jH1^d2!Yl%bi zF)OPJW6df)Pi$6mZwz8=>t#L`tz|E(Tquk~x0Jj()U0hbpcbR-IM`krj{}zT w)xOsIeDBBsfb2OCF1Qo>r7_v=A_wc-+iClaF$K=xVDGzGIk4SuDG+q#Unb23xBvhE diff --git a/app/code/Magento/Webhook/view/adminhtml/images/nav_nest_link_bg.gif b/app/code/Magento/Webhook/view/adminhtml/images/nav_nest_link_bg.gif deleted file mode 100644 index 7dac4f1ff7307b937fe91404215668dd379fe450..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43 rcmZ?wbhEHbWM*JwXkcLQOGx|q{k!5%76uT|0TCb>1|}w#AO>py-Qx&L diff --git a/app/code/Magento/Webhook/view/adminhtml/images/nav_nest_link_over_bg.gif b/app/code/Magento/Webhook/view/adminhtml/images/nav_nest_link_over_bg.gif deleted file mode 100644 index 8d808d18d56f41495ca7371e62ffef04d641a93c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 328 zcmZ?wbhEHbT+YDAaFv1K!NZ65?%%(A_wM}%4{qPN^XSo|hmRiJy9X2l3IHV^Ub}Yf z`i&cR@7;U+`0M{Q2`|&z{}B zef!ScyFjIn9zVW$>lRSy(`V0~zj*QF>CiYHT43q)I zpDbVlbU-A?PYi6S2c{HgO!06yk)ooMWo5i%#grwSk?W^VEc;zivQM`Cu(O)@xwb7y zycx_w9~xyG`EM|{*Cgw|;I?Q`Rh4OKWoei0lol3N@9UGFs5U`fZQ67J0gc&nG#uz!&~0) zg1+BuO>*Yg(~Ox2E6hbAQn3+7aTXVG7u#pJ4I`M0GXaJ+W-In diff --git a/app/code/Magento/Webhook/view/adminhtml/images/nav_parent_arrow.gif b/app/code/Magento/Webhook/view/adminhtml/images/nav_parent_arrow.gif deleted file mode 100644 index f790175fb94643ebedfde1f830594949038f5e79..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 240 zcmZ?wbhEHb+|Izwa72i~Gp%6a($(9KpAIdonzCZuf=xU6m#p$mFAU5rTYun)UslPS zbz6e+Dtt1FSMNEvY{%X$M^5-9q@BKTn}Il>_>+Z^fkB8t2c#TiCj)El0+qg$%y}8B z*5$n3SD>@}SkC>5b?^7MFzj7W;Gxqe*3eLRGRMlZ)!E_0nyB^L+>@;iRPBE-(fJ^2 z+xZu%Oo3+0?|+bKxmb4m{f|9$|9d+A2sJd-w=}jkw{>=OxA%7S_4H4gIAy}L$PES6{wyKZ&TD$M?>v!+JeEs(0$Iq*GAFSAQ z;McET3`junCkrD312=;XNDO2K1B-ZpXXZ1`tc4*{lp3B3HqFS5Rg-PDk`!dH1^}y; BD_Q^m diff --git a/app/code/Magento/Webhook/view/adminhtml/images/note_msg_icon.gif b/app/code/Magento/Webhook/view/adminhtml/images/note_msg_icon.gif deleted file mode 100644 index c9cacc27ae2553a59993d9702953dc19c53c679b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1022 zcmeH`YfDpM0DzBkkdc+9Nk~LWQPC(861$LTZQW~8P@{xdX{KRXb|K7M>hiM8YL$aT z(;O;dSXP!|qm@owTJu^?-R3sucJ%Ce?(bXp2l@p)pPx?;Jo^p^Vzwm)AwdXHi9i;^ zjaj(y8g97y2U5iJ=Mf3drISP2;u%o7bx-Cxb84R62IQFC?(huO0%{PgIZRr5AvGot z@LBvj!28Lm7J%yjVYGj|G~1R285B2U64;2P;R=K405!~dyMZMRPzL=#2QfQ{so13?265d`Z(4s9xaM;yo|BExyX9Euy-k5a~IKZ$k~+S(~C%->Ga-B?w&H-oQk!a zC$QgI?RUsJy%Wu(a}?l{@$tLMi?<7p@Xwq&YFFKBYj4MT^2-$!tY^g4*NCZKj6dDw z8EdjMXECmx66sAyn(%Su+_yV_z${_vg^UBTbExt#Y5u_aG>og2^$tK&VV$FpGBB(*CUEq1-**PR(@tObNtP zHg3G`Gd5pNI#pe(bZQGm@_2w4hO~n)-=nD+!upwUe*)AbZfS#1evZw4vT~&yo z3_0+GdnY5(sViELaF(lyxTsP@A9SNDY(_pO+>aY*3rZ~Vi&-42ARi|S6u}#Xp^t+_ vt84jz`M1Ke{7+0vgmW43?oREDL?(+d_;vQBNs0@F0a35M&Q5atImnK`#|6+T diff --git a/app/code/Magento/Webhook/view/adminhtml/images/notice-msg.png b/app/code/Magento/Webhook/view/adminhtml/images/notice-msg.png deleted file mode 100644 index 0bf433b7e7c1433f10e66992372799f8a126feba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1375 zcmV-l1)%zgP)V+RTRE+=drWz>?WJ2X<`zMt;YIp5veoBF)#vH;p2I=$k#__(VOeN!Pekv_C(FkJ8ixluT4WD?Bp^37*d&h}v-Au~{`n=c0v#nQjhSyLf8|=h0!+YmBV$qFu@BaE z2fS;VY@<+>4n<3#Kx+@G?|QxToWdTYB)=`~do90DZme1lm~B^1ceCLjGYeuDBnjW? z;dqw5Ty^p(K^9dOQfleUr|@Bj^iT8Pz5@W*&omxn~RB!Y-%hdmk%nLoH+p;PDbg`(Zb=P z98B6w>W*=QAYL_5>Z{Gj$o;r&iOhd@qPPn%0sEpOhD8V9;gNy%=We~4@AFxtPO?q^YNSs%p{QVKeqx&L z?%6Q~QGx79)e+-F$1Kk#?HzohC9&zYz>cUOv;+h`x)P#-Nz-Z5j2|B_4D`MoKLl8n zQPun{C^v@SQx8WwUh0WH6N`vj!roB5EP4Gr=6R79OFujYH8g5bsu8uARdaL6jB)h6 zk@Q}+_kWa$^u@mgHGg>6O@uQMNS}N#((>5-;k%j}r8`7{3kQ6-y%dRJO&O-0ojp&+ zK0ciN=EFmoc$q{kM`W+~R}N0^GATqVm+ykp!OOK{mLt&0cf+ZvOZrKL!?jG{7+29} hX@yz;wy*yPFaR!4p(fOeKt})o002ovPDHLkV1niqoS6Us diff --git a/app/code/Magento/Webhook/view/adminhtml/images/pager_arrow_left.gif b/app/code/Magento/Webhook/view/adminhtml/images/pager_arrow_left.gif deleted file mode 100644 index c0bb54f39b37b842bfb92ab8cb914fc45119d197..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 334 zcmZ?wbhEHbzTdHncsaZ_h* zP0RW7=WpM=cj(Ze%hzwddGqGVjhn}hAAk4m-NT0u7p`8v>);VfzsSRf55Il;_Wu3* z7cN|I3`@9j<;u73-%p%4v0=xa@87>ad-m-4ix;n6z1nr)@a4;wzkdDt?c2A{pFh8T z{rcz6pD$j#c>n(WrcImHu3fu(_wK!W_db9A{KtBh|H_Zj{=+*yv3ADhqNmH|cUlGHLZ{@pARCM;hr&n?8+6B$C0;k3q`7K-OsKvSmDcl7{+g M*R5k=bY!pw0HcqjZ~y=R diff --git a/app/code/Magento/Webhook/view/adminhtml/images/pager_arrow_left_off.gif b/app/code/Magento/Webhook/view/adminhtml/images/pager_arrow_left_off.gif deleted file mode 100644 index e057ce0e30cc45efc60e72ea4c53453e4854de8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 218 zcmZ?wbhEHb({T}zkmPu@#9yoUOjyH z@b~ZEFJHd=_U+rBKYyM)dGh1Oj~6dqJbLu#=g*(dpFjWl_3Piif4_hK&VU0b{$v5m z=zvI&oeZqu4<@*zL`v}$hveL5J8B$R5*t4yC;GtL^Cs+!f;oR=`nnw!Iq3E9pGa~{ z&=9%os>(joM}c>B`KHzTdHncsaZ_h* zP0RW7=WpM=cj(Ze%hzwddGqGVjhn}hAAk4m-NT0u7p`8v>);VfzsSRf55Il;_Wu3* z7cN|I3`@9j<;u73-%p%4v0=xa@87>ad-m-4ix;n6z1nr)@a4;wzkdDt?c2A{pFh8T z{rcz6pD$j#c>n(WrcImHu3fu(_wK!W_db9A{KtueUFSiIlce5M_v%SYm%i(8 zTv*bcBCOlU%q^(gs1nJp)y>7*-OUs!!lW~G+Ek-RDF#1320cC=qs2>>$Qm%R=&xS0 K#!%9c!5RSlP^K&Z diff --git a/app/code/Magento/Webhook/view/adminhtml/images/pager_arrow_right_off.gif b/app/code/Magento/Webhook/view/adminhtml/images/pager_arrow_right_off.gif deleted file mode 100644 index 95f17d5face7d7d8c00a9c56a00b8b1c4857b934..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 219 zcmZ?wbhEHb({T}zkmPu@#9yoUOjyH z@b~ZEFJHd=_U+rBKYyM)dGh1Oj~6dqJbLu#=g*(dpFjWl_3Piif4_hK&VU0b{$v5m z=zvI&oeZoI3zA(@BGsG)Lvn7*@sviE#QOKgFmG!O=4Iz~6u4B^+j@B61P;B^@u`lX z8WJp8D&aFL*7J6hd#`jj*YiQL=p>`whaGqB7VMPbcXK!=9>B&U)YRN8D6Gg}4FID$ BXwU!v diff --git a/app/code/Magento/Webhook/view/adminhtml/images/process_spinner.gif b/app/code/Magento/Webhook/view/adminhtml/images/process_spinner.gif deleted file mode 100644 index 0ebe4d8430c58416a60a055eaf8ff7ec318ab653..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1849 zcmb8wYfw{X8VB&hIq%6iIhW)Rk%mZ}5P~KlG2s@XSbGvc5LgOSq2*E%F|46b0~M3D zh~$D0T(R5jy}i97BO}o7sisdZ-4Zu1VY&9Zx^*i>b*SMM_ISZ8^qau*c! z7(j&oxTyb;x#?Sfs2Zb*EI=k!p%z#c2E0`_|0UIDV8FwR<}O4(>o-V<=#@pPksrWkO@KYyh^QOaE;3g>GiPWpLg0@JxYH zteE*)BUHUZ&(~}&5`H_o-kXy*n4S;|6O7CW8zeM`tn7HBRbeP9S9|usG+Qq9I2*I; z9Lf5+WegIGS&dqM1v zAFBk|@p}{2v-q`ljWc<&Lt5N*_ry`r{5JJZVlGZ9l)xB7|&@SZyf+^LDBN7I3k>FPsR{JR}t4PW_2_dS#>NJ@^;2djuCO73I zb@S8Et?u*(HyLmEdn>=KUCD^<4gP1$e2kjgwktcnyr}r$SM7zK^Kn&wECObBcYUT> zZ8JXG?5S*w?)4nf_8p8~0-(Ww#sJ_0r61sw;I0MHw1U{5LRkyW#lY^-Xbop@z<5$T zC0cvAqF*)`j`U@*Y~<>TPhFZ2go)H~mn=vk)9N#N3(tx?05N<$SqS)a{a&}E0>e;K zu0>5@Wf&!wcc?HN$}v~(<6>luWiJFUy2e}*yF}sylU@suwlIE@PlEs9JMFZ>HzY|; zzkbN=U^8U0oHe(swN-3!^ShqMABKu4_kUy9vw%TuBgJwtb~-_)ZmefTCbN_Dn2+#T`^}(@jZmwS3uv2U`}C zksp~II<{7SB>Qyl`*;4{p?v$o&pdF@lU^#Tb{#prCM8MSafe9~q zMl>qHftB48sz~0<(zbHCVfMO?T~Z( zNA}1`R5^C(R%paz&xx_m!Y8kW6;0$_Z&4d(DI z3X-cv(G5(0tQ0}^ENh5hO?}|iEM`+(az=WW7|&vAOHTP}sf2!Ge#s+V(hA3;4H3My zH|N2Y7os#%b^0`&kV@S%-2F)y`p?X~N=xYEtOd&N16?kC9&262q;lw(G>FdQFo2(* zsHIRphPG5#U3tfK=CIFBLjm1gAT|Nke?XXd>tkfcqsDpyEiOr z$SJa$?^rC6=%DW5eO!UlVWH&Frwj%)=hGXvG}#&RIlD@~vQ*lW;U0Y9m;z%luLoxU WD<{8zJfjDnzw`A@(x-E(U#@w4f86x@!=C^D{(L&G@#pi2 zueamB-Oc!TO7PE@bDu9;{{3h%3l&965re!biL?OyhWlYIYvzx(s~ z^v5%jKVQ!IdNbtr$3uUAKK*(-=J&__pD&sGdbjb%vxy&0a({nN^5F!>|Ns9Pr~wpz zvM@3*XfWu23YN_z;%?6DtQ<~`4AuZCk%1im diff --git a/app/code/Magento/Webhook/view/adminhtml/images/red_button.png b/app/code/Magento/Webhook/view/adminhtml/images/red_button.png deleted file mode 100644 index df5ed85a0d2d6af1fb99e82f02c520e7ecb0d037..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7980 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 i(xZgC diff --git a/app/code/Magento/Webhook/view/adminhtml/images/red_circle_right.png b/app/code/Magento/Webhook/view/adminhtml/images/red_circle_right.png deleted file mode 100644 index 9f423c867355c304a409ef555294b2a72d363d0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6668 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 Wovw!XiB;+V0000G}S diff --git a/app/code/Magento/Webhook/view/adminhtml/images/rule-ajax-loader.gif b/app/code/Magento/Webhook/view/adminhtml/images/rule-ajax-loader.gif deleted file mode 100644 index f077a0b27947e17af8fc5ab7bb53f28909622d8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1849 zcma*odr(tX9tZI2z31lM+(&W~GVwk~us;op+XCWrliW3SZh zJg`q{ud}z*@3-&W;(Wb!Ka%hq@Tt%)P56#562aY4DT?wFz8FWX7V?gHa3Uu@@aS&v zlIY4U`y}?R)ffR}ngM!%6p(~g8lmV;r7lXGnCx0=b1 z%&>R5XMSZ)5T%=lv$^&u#C@6eL{5tL-g)ZExj>R<;AG3pPSg`@emM{Wed}7}9XJa> zaLdil{GG4H)b>Y#e6(7I;gpL?wfM?B00O$Zsx_a-RvM4K-TKxk)0y;&^oW#}Fy#{_ zL;+SZOGXY%_xOEtDNUM*7tS>n&c}42?MRHc?rPAsY=S)EOHq)6q-jrVjz}X_FMO^S zYu{y;8+Mk7zgpZnlV3QRm70W7Q0YZ2GL}cz_PyP$wv<)t0*6tSt5yWOZFx!I_8dwZ(P zZARlcW5itQ*GeP~=OQETtZWQXx;D_v%q)Uw|6Hu=%O zapUkYc|<^47;r-q0(fPlZ$&b%raChiSMilZ)ITZL^F~kE&P(Scn{U^QC`V(l;arZ3 z-+1$dTh~M}5?%5wCuV@%LEB8}Wk~>Fmd|HPfsk!JI>KLMmU{tC;EkPpr zj{3uVf^KjgLIA-wI4Y7NlHLrHcEJ!SC?kLRt#Mu*9G9hM-8=60aM?;_{-y`6#yYON zV=VCegD5HE|2mPo3?S~lRIZXjzpEZoQUhI{2bcRvvhn+7b#yF26mP2GK|Wz4gesMi zAu!^N!_~QipnFGkrGVHh$Zkj{dliv2YYn}oLDiZgQsumQR{4V^twNM6UN!{pw4Xn4$QU1fGpx zEqp$E2;q`ID_|H@NW7Fp5y{82{49GKTCa+1SxZKBdU5=n&F0g27mmLF=wYAc*Vq3g z0LKDZmCAbG=?j}O(xiQlV4BDpn2&4MKiPOC)oZ_`*NTp;AH1fG7c9JZeoj0L`fvMO zIffXBm-1mE>%<65D5P8!#j;jD+KZBcAvraI@`Xm+S?;cJtN(YM)-;;DVfFLt^XQRr z{aM<6D&wz5?oY0J)#TY@Gdz8LbR!)cx9mZ@dw$;%KZ|RoZas*Kn;kkg^>OU%z39aS zC0|6`otb=53TTp-NbSG~mc(g>N>Kwsi1wg7p;JxsbvV8ajwC5C>|kU~bNJP)Y3eI3 zDjrkQxv;U~H^D|Gb;MRwu_{Q5_N;D;6ZHIY8SHu`K|j}IwwlCD=D~@sLi?ssC1K3)46| zPHD1H`n_C;G%4SY&mA-|WLM_$qB^RltJ88-Ga~8lSlT4sPIY*Cul_Agv~P+jYtzCH zhinTPKGSvl`%$sx*$xbaybOvp6&GyR&{zlDp1fNKt9U4NvIY#D*vvM*rl7d6CL{b2 Ht&JZ6SS$_j diff --git a/app/code/Magento/Webhook/view/adminhtml/images/rule_chooser_trigger.gif b/app/code/Magento/Webhook/view/adminhtml/images/rule_chooser_trigger.gif deleted file mode 100644 index 673d31ad5e03cb1627797ec84ff47a23bed086ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 591 zcmZ?wbhEHb6krfwcoxX;|NsB$<##6SeDU}1-+%x9{rU6f_wV03ckW!fc5UbUBT+S* zDi__@wEy~&B}+=@T`5~|HLd%=rcIk>&YXGh;K8k1x5m_M-M4RF)sov`WozS`cgECh zS+Qcp;lqa$T6g77J3V*q-1+n8Z{NN>v2}O-ykp0YAD=yYcG0Z!leXN8+xb7ZcxBt# zyX)4ii)-9oJm;dvn*TwY{wKHZty*>`ymDP&;mWEdw?azSq;%|Cwrts=MT>H#oD3{l z2?QB^hmRdQwtM&P%EdQBN>^v>|6efi;D!wwcJ10#F!S8TjT}whVo0?l%19{XL z4NbWD`Fzz}v3ttX#FyAkdz{kwL{)M%X*Rj-8!B zHjsPu3YJ66%nUk#{0tfl!eTCpB7)A^91Nm?e5($z967?uz!j*=pwGfC;>KZZ&THY% z;2!A3aOWQDcebAlrhz^Tddx}+H!d(7X%`YwVek-Q<=oJ2wMgXw_cT)G7 z_T8uVSIupT?@Bp%>G0mO2NSwe_n$lb^6je)N4EM@N4$RjCa^AM(Y~31GZNl^dFwwd zZpwz))3^0LdGoMq#l#(__FjK{dHwO_KYsjRAOa}ede>8g?4~HOdgbT}tVy17sN2zFDHEf0dM9na?HAmbeR=pybJ_Hxw)m(4ZNJx MTy-Qoog5jg0o4M9&;S4c diff --git a/app/code/Magento/Webhook/view/adminhtml/images/rule_component_apply.gif b/app/code/Magento/Webhook/view/adminhtml/images/rule_component_apply.gif deleted file mode 100644 index 45c61c3247ae622451c924660b5e0cd19dea1ef8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1024 zcmZ?wbhEHb6krfw_&$%}|NsB%?kwH@aQ)VY>;C-xz46S3=5yt9Z%isWkx_Lfcfz^) z+s|&7p2(=(lV;arHS1J+{^7)!16EsZE!%Q`jmHLcyDqDe?a>RbPyO=iQ~90*zuAr^ zeTIv#Pg{Ry*`_NS^0r3w?dhrCk-7TP?6{R4MLVP04;2;ch%DS0ox44J3;s9#Jr=) z*+;zcw?-BmPi;S0IrD5+?Y{I`S9)8ImUf@0*m{4>%{N!3oo=f;odv|o# z>`Hm|<#FMukh`yM7amE@-x{&$_KMo=X@T2xHOf@>Ki=Up-8Sz?l3I~U=5f#ZQw6h* zx94mN+j?!oj5FZvufM)v+VSS;XIe84 zd8pMXt2HZ^oXCjTVpn`TZTXEU)6RArd%o-O$NO~$Geb6;9C)&`C?FI9ia%Kx85rg<=ztW0@&p6NT?SiD8IKJK2X$uOahY+*;}TEvyt)@B zk0?4YCP?_M=ZtGOT5b(M5 zQl~+u6lcp9C!b0B5)3?6%}qy?>_l0XMHV)5EHX?x@a3n0OH-REQ|b*3MfGMr;n+tJ zCj=jzXlkr$axwh0oN=~R#Iq-w0T&Llsq?Sv2qy|(Ear}At{M+h+mpMtFmM?njYWcpS?n$WEmu2%l zPU(J`5b|;HoVOhf&m;XlZ(RL((X21)S3FORc^d5gwyo}wi{*#jmUqonPr`j4Ihp@B zf9C71t#1lbe_TBOG&%B3QQEWAn6G=bKXSJCwsqZOZ--Aa`d*afeLS@9Sytljhxfj} zfA{^!zL)hC?>Ddi`}XyR?#3TKelQRX6o0ZXGB6l2=zw&9{KUXka$ttQ)l(`_8Vd_b zXGxgJ9e%P!s7-7Anr%W|JGr#lJ(dbthOmaOGJL?HAkdg`!DFh5PS}AY&L^s>s)8yi z49ZdrErP0=5?tcS+}z6IToRgkB5EugYHA!TY9e}u^85xXR`SOh`mpoJD)6v}cp195 Kd3ZT8SOWlA2#K%& diff --git a/app/code/Magento/Webhook/view/adminhtml/images/save_btn_icon.gif b/app/code/Magento/Webhook/view/adminhtml/images/save_btn_icon.gif deleted file mode 100644 index 87a9815b4975e0ddea63c6e57705e5196528fec8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 203 zcmV;+05tzcNk%w1VGIBa0K^{v{_^Sgc@+Qr`TzO!{n@?#^z8l7ululd{LZQQhAR8G zgZr9l7x|NEIIA^8LW0018VEC2ui01N;O000F@;P-VIr)gZ)i66FkaJ*sT8{Zpw z!-D~ryMjXjGu+on2CX3T&dc*otg5d>{~zN~L14*yVD?VllZ~9u9{mCMF~j$>`{) zQmK^5WO}_`p-_yEk6W!)wOXy!Y7GX1+wHbkEMsG1CX-30(*=V;jYcy)Jv}os6UybGQs zcQi1cSd4`u@s)IHHMyM0W*ZiLlX!Y`%b>d!UB+e$4M4KU40Yc?qgCL=9{eR$<3CRl&z1>+wYT&fbui& z(ic(0?t%lD9nAdgC2w@b+!7LDCl-J!yy}ix+DH{M;d{B~^#JBl5Q4!8-oLkWz3iQ^ z9`fn7?=S@5v~>tZA~#VEMu7awIXL66^o&OaJC}NP=wgdQ%dI5W5X9#|Q*rg@y*t*S z+pLoBaXb6P(CyYYPj`IVAcZCwwnT%7dO3qEM3;&m9EP$tvs)iJ@;35`R76e@1Hxco zsv)r4ax*mtR`n5|06$KpFtHcJd{)7`Z2)Tz3JO8w7M-nY-g|;TZ{9C#khJXmgf8BN zGPC<~5zayI8iUv?ftO>8kw9TVA^d9&x=7m3B~YE-yc75e0XGLj7qlNki+vmz#n}(3 z!&eM&@kA#LdJ11m>8eBlbZ(wT)pf`0`k2QRo#a0rFVnoFhQ&EgyVpojT8f#n*UF;r>T0AuU1dp__Nt5KAoY0}t#=sUdQyS#;^dDDd11;_vf0FcsYN~r85 ziA?d-3E?0wCi9XvL+_`lW40J&gdm;`k^CM^xRN+hsyZPoh;cEtfQhwC@nkJZPmVZsfQ?i7iaYY{4cMCZd)4lCCVFwT=A4+$PG z*I}V@L<^1t`a6#JQ6^QWprvY*DTJwf0Ar(U0T!eH#@XV?0m^|{k(3${D(6GkWUg$p z+3X;8%oTB|?n#p|rVu2uiLB^N(=M2BK$sK6P_YK_$fiYo{fzS4e4|bZcGmk_xC?iJX9z~N4468HbSW!8JU<|Tf50W zzN1!;YnC;AeNW^|a(U~YuCB||s%7iucB}Hr?Dp$#b2Ck{a~cyiyVLgO!zHc7{Igl1 Y9(XymwKe|g_b)wsc<{=VYfqkBfBN*svu6y{ z0E$0Zz{co+NRXcx*diUK6nN-J^`A&lD$KI-4Oro1xI$^&l)i1rij|(??Ta1O^_)|l zAXSp#uGGz%xNl{?Nt?~GivmB4l^T`gTjcrqg@hQp1q9^!C-%Z{Oa!b&G+4LGdRGkYr%c0TCd11}3JKAO>pyh6xO= diff --git a/app/code/Magento/Webhook/view/adminhtml/images/sort-arrow-down.gif b/app/code/Magento/Webhook/view/adminhtml/images/sort-arrow-down.gif deleted file mode 100644 index 825e492e761b368a980bb35e27d8e11c6971ba34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 117 zcmZ?wbhEHb Iz{p??0F*c;PXGV_ diff --git a/app/code/Magento/Webhook/view/adminhtml/images/sort-arrow-down.png b/app/code/Magento/Webhook/view/adminhtml/images/sort-arrow-down.png deleted file mode 100644 index 74288ad241171966d184847de65e3dfac4a1d7ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2944 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 F8UPr)5wrjR diff --git a/app/code/Magento/Webhook/view/adminhtml/images/sort_on_bg.gif b/app/code/Magento/Webhook/view/adminhtml/images/sort_on_bg.gif deleted file mode 100644 index be9ef00458c5c5b7f8bc864128e0b2026739d816..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1244 zcmV<21S9)LNk%w1VL%2#0HOc@l9H0l$i&>rwd%{L_~z06`u6hFumAu6A^8LV00000 zEC2ui06+#p000C32)f+}*y*TU5yZ>M)j$~<`XsWJk>%MR-&vb3yc&_h!@BhF? zKrk2wX1`ppH%uOz#prVStZuX4>$qDEpWEwry8gb; z^Z$NU%~uBx!D zv9GeVw70Xlwz{~xzP-S_!oS18#K*?T#mmUd%FWQv($3V;)zjA5*xT3L+TPsX;^E}r z=Hut(=F@0D?(y{V_VW1k`S<$${Qvs``V$DS8GwQa2`U`OFk!=m4kJRG_^_fx zixe+v%*YY{qsNUOJAxc3vSi4UBvG17$#SL3egIy!R7rEDO_?}r=Dex1C(oZdgZdN- zbg0pyNQo*vx-==%r`t+7o!Yc2RI604YR$?OtJkexyMi4nwrtq5WYL;Ui|(M>w`|wS zg*!Jc-Me=4*4>Mjuin0Z{|fd?xLVA?feRyEthjOF$BZF6j!b#7WyzQ;XTEGo>gLay zLvtPtnzZQBs86dl%{q1K)vn*Ug-!dl?bx+(-_Ff@w{P9Rdk6n5oWNn?$cHO0o}Bse z=Fp!@cTPQe_0pcNYq!pQdiU+#!-F6Hy}Wqy;Af*>f4)6=_w3)xk53=I{rUIR9na4n zzyJFG|MdspfC3g6;DH3jm0f}i8rUF$4n_#!gb!9Ip@sOVcj1Num=bU!J zbmyLV;^`-!fA$IJpmBy7=%IunD(Iq$Hk#<8&bbMxql`{!X{DG_s_CV5QOW72nS#1$ zsHBc+s;CedifXB=p33U0uEyHxtdhbytF5@on(M8)_FAW>y9Vp4u)G#a?6Jdss4BAm z#wOeBv&=^8thA`rI_b9HiyXL~{ZoKhY zEAPGZ&Z{rJ`{oO2xcmm}@4)>QEU>{*vU~8t1T&2A!wyHBA;b+=O!37MV{Gws0B`KE z#vo@b^2Z}LrZCAUhn#ZBEU)acS@yo%vdT2iY_rTb^V4z7Ip56l&prp;b7w;XU9`|f zCyg}AF)Mxa(@sadG}OlKJhjwRXN~pNR|9%7*IIWS_Sj&TEo9STn@x7wY_IKhk5<3k zw%T;hZMWR>eSLS`c=PS|-hgX{cHe>jP59x4CyrL!iX&e5;xE_&#sAH#U*ql2z`>a2%edF!jAE_>{>EAIL1u;-5Z?zK;SdhfvN9z5^D zU;H}p$Pcf4@yYLd`|{045B>Dam-~D5*h`;1_1Y(TJon&lFMjvo)A{`P<)@GS`s9~* zef#jMA3yu@|M)%q_|LC@{rRWY|Nr{~ApZjBp7#y#fC5Y)0TH;F`z=s`42&QICs>sP G0029kpUnUO diff --git a/app/code/Magento/Webhook/view/adminhtml/images/sort_row_bg.gif b/app/code/Magento/Webhook/view/adminhtml/images/sort_row_bg.gif deleted file mode 100644 index a02c2c0205be6131ce43f1663568e2f08d0e9242..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 535 zcmV+y0_gomNk%w1VIBZF0K@<>lJi z+S%FJ>FMd$*Vo(I+uYpT-QC^%{QUX(`R3;4?d|Q=)z#qO;O_43)6>)Y`}^bLg%53HQ+5+>lt}S)NmQ z3*X`3;^pM$`vO+b@L*s;f(8>JTzIgd1_%Qo zK8#3lqD6@qD{vS9U}Hy)9z%j0`LX1H4FOJ+rbMZ-CCis9W5RS9lcvp=7%XhaxlS-+E=6wl3YfX5;FG%eSjtwSfQrmAjWP-@teU-|btt@z%tU5o>g8xUyo&m(y0J Zycct1#f(F5{!BWrXwGgkm;M_906Uf@DNO(X diff --git a/app/code/Magento/Webhook/view/adminhtml/images/spacer.gif b/app/code/Magento/Webhook/view/adminhtml/images/spacer.gif deleted file mode 100644 index 5bfd67a2d6f72ac3a55cbfcea5866e841d22f5d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43 mcmZ?wbhEHbWMp7uXkdT>#h)yUAf^t80Ld^gF}W}@SOWlZ0R#L1 diff --git a/app/code/Magento/Webhook/view/adminhtml/images/sub_button_bg.gif b/app/code/Magento/Webhook/view/adminhtml/images/sub_button_bg.gif deleted file mode 100644 index 17d1bf74d4a3efaf233face6d1507eb236f48bf7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62 zcmZ?wbhEHbh&RTMtEJG1Yd(r)Rt+ZOtuP%PAvYEgb5#)eX83@C^M437v3M2P4Q8vjW22Z{zl z1S5%p0!GAwfRPdELZudgLZS4z+wQhA`)+}dATAfdz6TB7{v_)e2=*6?txwxhQ?{23>BX)+r9CHqKe`Zmyg!t5tVVs&>VpA6bLLf-KlX}>qyp@hQlts6$s&sy)-Ii(y3V~5&f`QUAn<}dn zB#MilR-+}kp{3LqIp-zk(8<($tIOBt8)&1!&-+J3)amU23vC6AQDUONSX){uP8QWN z+MI28b9Tv`yi{8%;}3D8BJ%k9AixLV^~!a_t`|Cs@^Q+bh*jyc$K+8~U3o!9VH)=c zqKF&;k}K$zL0LEwhPK`|*i^Y0OnTFhGj7hs|9R^iDVJ7a8D+{eR87k*P51GfW+Wo7 z-vdHe04X9tmOTqewS!hYH~9q^XU`dO=5%wdwE3I2Ygs@0zRs+@Nlq9kleW}qWNciJ zgG6+BJKnWTlLQO>?RtFKt3p{_@kW!mrJ>pePEkp#gZS{2icm zbR5z5^#|ejl^S%bnby*p6v9EujgZkAoyN)wAxaSM*Ax=ynUY}k zl(}%cp$1)-3o|Cpj9cG-?khNY=@6J`6G(EHBDx8OdJ*gHSGjKx#3GJo;bQ9rXzRN( z#6^pyFNLrihE=oPh?D==@BQyV*T75Pra`ubq2#x z(KTM~^$UK1(ouAx6(ly>Pksa!TF$}8OLhVld{kbVTlS!!``cmjcN_8E6o~5v<@oVD zz6x%_p}H|FdZZg6G34VhW{FVK{p|HKuyW55=nr_}K8DoU#;?~vAC`cK);xR`b^7u7 zxkR-Pc zuuU?SV5-_cgLOgfk`dtMdY}o3j$f_;kH2rYJ)9hoTYG+CzX%UR-5A6K0Uc?0`u^}m zP$*&nYMAlXC(K5R*=R6P2E7qRf{W|M^bUYAK~7V8K~@xZZ#}zz;IF{%NYsZM5%mUv zSODFh`v-*}*YERsJWT^fh%Ta2O^&D=iFpKQokRlZ zYvH>DN$`tIz@C=upvF6LEy>mt4U)r1NV1MmxB%;Jxp$+rtFG^m>oj`|b=@U*1zM%V zk&%J3f`lUZz+k)JLbS1(eyYuPTVl*fkyIuXEGBEjY0spQoYY?s!xQTCboACW{npyn z+;OSO?TQ}Ne#c0u*b`xheSn%&QcSTBgESI}I{p=408zw2*wbRetpET307*qo IM6N<$g3@dq0{{R3 diff --git a/app/code/Magento/Webhook/view/adminhtml/images/success_msg_icon.gif b/app/code/Magento/Webhook/view/adminhtml/images/success_msg_icon.gif deleted file mode 100644 index 611faffbc5f4254d54bd031f87470be3b32b28cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1024 zcmZ?wbhEHb6krfw_&$$e!nyi&ca}DvE8lo}{oEUqicVzw`TKkO!}VJquB$qen|~-V zcYFA{>kHRkU$EuYvMo24?ti=^??}?h+tYof+unV3%edNL`kB_^T`}wLEXzBRXi{&O zzcr#@e|Yv`uj1orDI0t;4|#05vLR%XN$b(lt=Bf}d%UgkU`om16u;SyTW_zp{q)wH zb3M17-<)-&cka3FzyJOQZqwE5S5a$Lo_}fL-g_H&-r7)iFtc!H^!A4vG%8ip>Xg-r zRML)k%sktbwKJgfL`K|7kIgri#%!_e+tZzYEM@Jz+0)K;I}ZdZF5k(`_Xu zGHUmwN9{9jKUvwlFL&m}?#$z!$Di-AYq6Seq&x3u^2`f8GtRUZo(y^R<#GF=qWr^& z|NsC0@%=l)C?FI9ia%Kx85rg<=ztW0@&p6NT?SiD8IKJK2W?%AWQ$mmI2D@bsd*Y5 zQFUO@wR5?k@gs%1ftiJcL!qIecaaqH#t#e)3XL%vdwC6f;D6>&^doYXj($z`sIYmuRcLXUB&%>$1`EKcgo({l_aC{EyHGw3{4lJ)88 ziC#C}5)Kig#Ya2cv#j=>*rd?cYM#il?#G2=Eb|2Os$@PE9cS#)XS(il^UCovt=cta z4xCA@&0UQuNe*6(C;ex-@^ihF2rzIFu_*rZ!qI3UQ+BgXTfj-hjvy%$fo5?Y4hCxg DT8Vgm diff --git a/app/code/Magento/Webhook/view/adminhtml/images/tabs_link_bg.gif b/app/code/Magento/Webhook/view/adminhtml/images/tabs_link_bg.gif deleted file mode 100644 index 94506909fef67d0cae48ac0a1790836e04ad271a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49 zcmZ?wbhEHbWM*Jwn8?6z_2I+k@87RIaDah#h;OP6jud&a=Pp!kyoNHQ?!fC!L00~1q70E0CETqX-l diff --git a/app/code/Magento/Webhook/view/adminhtml/images/tabs_span_bg.gif b/app/code/Magento/Webhook/view/adminhtml/images/tabs_span_bg.gif deleted file mode 100644 index 4f5b1e1f4305b9a03628943016cd5a398f300b50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43 tcmZ?wbhEHbWM*JwXkcVWPEKZEU{L(Y!pHy=&;ha;Kr#$WOfEqT)&P|&1$+Pi diff --git a/app/code/Magento/Webhook/view/adminhtml/images/tag_blue_edit.gif b/app/code/Magento/Webhook/view/adminhtml/images/tag_blue_edit.gif deleted file mode 100644 index 6a9d3700b71250c23501f0c03c71a7f9009de31c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1021 zcmeH`+fPz)0Dylm^0JxImd&ipWXqba`O>o03iIxq^TC?8Ow+Qh+FUags|Qe1Fq<`J z%)&5bk~vLgnWLDZh$td(4oHfM2s;=dHxUtzr~E5=>H7!1?c2W8^pyCEB}703ZW@@I zo7>vj+TGoi$z(d6&h2)?FzoeuT`pIh6q}u$RsZ(t^?JEn{#}nc91heiRw|WCZ_+k4 zHaz0ChVpY-trmhH^=K9Sc8o+K+0ow=i9~PJ7-aSu3Xl|FusC3z$)oNYnF5QGEjQKretXcZ80^Jt+d_JqP z-?Pr^T)_J1iS00Ex7$U`benS6rM<<3F@-{*>B#xzLTxsi$z(DbjdE6*LtSf;*VrIR z^E{^dTFW2oLboTI=1`N<3xBvT6biQtgRa#A_iCwzlWT#Wt-R0rDe5)CpSPDENE#B@ zlLEKCK+Z}*5JW5%^M^Q2r_&BUSy@?eujO~BFrI9DhW}c?$lQho1OkC&=Ao9E!5?5N zMp{)W)uv{MJN3nEHs>dXN!#<7DvZzT#hgZi6gKei%eX_l<06mNc{1@;mC}L^Lgw_3W-EN*>Hv1RN}qkS07p2c8@|U z?mBcK?VFFv#@E6|?)h)m!VlKc48#G&pDbX7Iv^5cCj+ZM!V(#$$2QG@4lEON Lf(|GsGFSruXAUZ) diff --git a/app/code/Magento/Webhook/view/adminhtml/images/tooltip_bg.gif b/app/code/Magento/Webhook/view/adminhtml/images/tooltip_bg.gif deleted file mode 100644 index e4d9e99348ea72d4105793b9702701c1e6a7263a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 294 zcmZ?wbhEHbWMqhExXQqA{r0(=cP~DB`S8Y_3)kU>%`#0}heE#au<7f96s0S2(vVaZK z0g)g-F|auw2vSkf5EDExae2_j2A{SSj7%33^h8dnUCz)E6Y4zi&|`*VkDtduyB+-V fk2i~~xNX^7v+sbuz&{pY24NP4w)T#8M+R#ExT1vW diff --git a/app/code/Magento/Webhook/view/adminhtml/images/tooltip_corner.gif b/app/code/Magento/Webhook/view/adminhtml/images/tooltip_corner.gif deleted file mode 100644 index f49f64f7fa41b9505fa2699681f04110e85b7e5a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 854 zcmcJMNlz020ELIzuqlc|6-p>lsuB|o7#Bc@6i`5M_kuf^m=F(c@nGVmKr2w90nrEw zmKb*rkf^vFtW^^Y5#kapWt(>PeWrV7reN_u_zv&z4&O`OtKLynRNRmWtOPIsh{iM< zB`6rirab5*M!Hb~LhxxfGJ)VT7zx4Hv>TmJ6xofqWLZLq8HAX@DNi)2C{YE*r$sM^ zQ?Lh}z)25;xM&vR1zM6K5bW|`Q{iyXAMg@1OtZMG$R2Ex7io$?3EJZidPOhGiwq~w zkw{3ABP>UfG$MFeL1ZC#oMe!2ESJJQpFlCVq9`gy1p|T>;EFsB~Kj_1$7@QM*Jd94UJQ)o6y?!AS4l*nu%Q8u$ zqMr|i0u+rh97)h9#l{x;ztTt4{|eU5`}`+B!kj5LS7kQ0SlZgH*79R|od&4T<>>SC zI;nXdV{w3Ue7sP*+U6Qh>w=(l1$_umSGa3S*%H!Oo0~$WY|%!v`7ok6p7z7? zWuK|ONu~4b51-UqEv>0*@%kAA(d%9<$x zjq8ow51VfnRljcQg_A~Yn+|ohC7BY`iN^DLzLwwE+59NJGrK?8?HIk3cA#|kxg3=_ zvHoLK2H3sr`hv#qXO77?s!Kt`^B)gST{h882C*;e@zAU06K_lh@8216@Xa3=#sgLF z1}bjGcNz*Wom(ZEMs6)NjP^Obz*tXZNA~W+7u$b6NJwmJaHw1VWYwj1RSXQXBP+Jn z&l-)N>$SrzY0$Tl*OnQFHZh&MGpROYWYkm}`++O;Z|%{ui?2D7DdgCSLrP(WcphX+hDxl;q<`>21 diff --git a/app/code/Magento/Webhook/view/adminhtml/images/tooltip_top.gif b/app/code/Magento/Webhook/view/adminhtml/images/tooltip_top.gif deleted file mode 100644 index 0e7fd0fa283bff6d0feeaf9a0a3ffd8890788e60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 295 zcmV+?0oeXWNk%w1Vfp|H0K^^uiHV8r@9OOC=+a|3?dI|G@ayg8 z?e6LC@$BmG?f?J)A^8LW0015UEC2ui0Qvw5000G~peK%GX##+$u59bRa4gSsZQpp# z0uYqyz@TtQEEtPe&F}lG4GjYW5)uT5hr=@ tovp4%D6z7#784m08w(2uyaximzyhvKC_i diff --git a/app/code/Magento/Webhook/view/adminhtml/images/tree_icons/joinbottom.gif b/app/code/Magento/Webhook/view/adminhtml/images/tree_icons/joinbottom.gif deleted file mode 100644 index 48b81c80a9e25f6f29e2614aaa33bdf4a4d2881b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 66 zcmZ?wbhEHb6k-r!XkcV$XlVHV|G(l-7DfgJMg|=QAOOiQFiG~vH=KUEdfpt3ORshA Tx&LIzy5lkJS?4l0Mh0sDgH;v` diff --git a/app/code/Magento/Webhook/view/adminhtml/images/tree_icons/line.gif b/app/code/Magento/Webhook/view/adminhtml/images/tree_icons/line.gif deleted file mode 100644 index 1a259eea00c330eee85fb18aa64e2e232d5410b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 66 zcmZ?wbhEHb6k-r!XkcV$XlVHV|G(l-7DfgJMg|=QAOOiQFiG~vH=KUEdfpt3ORshA Txqp6J8?ND(@^elGBZD;ng_;%{ diff --git a/app/code/Magento/Webhook/view/adminhtml/images/tree_icons/minus.gif b/app/code/Magento/Webhook/view/adminhtml/images/tree_icons/minus.gif deleted file mode 100644 index 3d212a97ae0d8f83aa39836c5a85d442f8602553..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86 zcmZ?wbhEHb6k-r!n8?h~)YR0_(7?dJ@c;jR#h)yU3=GT+IzTQ^R)~RtNqvreafzu-gC3m_gnAtsyGG)YXIxA8@>Pl diff --git a/app/code/Magento/Webhook/view/adminhtml/images/tree_icons/nolines_minus.gif b/app/code/Magento/Webhook/view/adminhtml/images/tree_icons/nolines_minus.gif deleted file mode 100644 index 2592ac20f3f4c28e38f789309ec52f08505bdf6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 861 zcmZ?wbhEHb6k-r!_|DAG)YR0_(7-SXMnhmkhJfNv7DfgJW(FOQ??HKjfy0V{okPZB z!-9j&9Ku>LGYlFIxARNO@hDtWaBUIiPTOMfV7_}lvsu=hh(Z;&NfL@qDJM29Jw4q( Jn2m+O8UP#&8=e3F diff --git a/app/code/Magento/Webhook/view/adminhtml/images/tree_icons/nolines_plus.gif b/app/code/Magento/Webhook/view/adminhtml/images/tree_icons/nolines_plus.gif deleted file mode 100644 index f258ce211a0a19c2ecbcb11170b9a8b35ae2436c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 870 zcmZ?wbhEHb6k-r!_|DAG)YR0_(7-SXMnhmkhJfNv7DfgJW(FOQ??HKjfy0@BokPZB z!-9j&9Ku>LGYlFIxARNO@hAj7*xx83m?l#Y_`t1MGx{Wy0`ruFL!N! zy>iL(+qYg<7Cygv`OS<;A99l4S?YZ7w0-Mj_G;$jcQ*PjjvjuUm-^z&skeElAH40~ z`Z~Q_GXHIH*1PulkKx`Qg4|!OU;QS+_x1FN?<0I)^>w^Sj{F!M@XlQ8*|TR16a&Sd zEQ|~cnhZK1lR$oAVB2tDN`Z!mLdS^|E<+1P1}~Lm1*^h@n^rtXw3S@b>>6}&jnsma z*O4z4gdIMTD}LKDX7kC+uf|599s!zsasezX6&yl>s%jc)PTan&eq2r(8a;hZLS>WL zC8y2k?bp;0RcMtGTrz#;n(2(1s?*o6Td1*d^Q@(dc2D22Y0JWGdk*Z{x_JA}Lwi)k y_iZ?ML4@brsY^?QWjyzv-W@2tMNw%wZ=loF{Tjj|&t1fNd3oM>iamE^um%8>uAmzL diff --git a/app/code/Magento/Webhook/view/adminhtml/images/ver_arrow.png b/app/code/Magento/Webhook/view/adminhtml/images/ver_arrow.png deleted file mode 100644 index 9841f050b1b3b49b249c0cfb3f190afa6dad5d40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6466 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 YGuOs21*KYrPoS{$boFyt=akR{0Lf8D(*OVf diff --git a/app/code/Magento/Webhook/view/adminhtml/images/window_content.png b/app/code/Magento/Webhook/view/adminhtml/images/window_content.png deleted file mode 100644 index db3c448660b828cfba275f9536f4abb80ab68e03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^j6fX4!2~3~*{yyBq*&4&eH|GX)}JtE?Rp91OP07s zlmzFem6RtIr7}3CQpYU diff --git a/app/code/Magento/Webhook/view/adminhtml/images/window_top.png b/app/code/Magento/Webhook/view/adminhtml/images/window_top.png deleted file mode 100644 index d30bc1c89e0827a2873a8804144f648a2cedf883..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 166 zcmeAS@N?(olHy`uVBq!ia0vp^j6f{I!2~4r?VV-=DVB6cUq=Rp^(V|(yIunMk|nMY zCBgY=CFO}lsSJ)O`AMk?p1FzXsX?iUDV2pMQ*D5XEIeHtLn>~Cbe-g7P!M3^eR`|S zKU*xuY#zT+BE#0wj;13W4nnFsV@lNC9{c%g`t8GeXJ4<+<1%3IzZR$-vii#dpcxFF Lu6{1-oD!M<9!WI@ diff --git a/app/code/Magento/Webhook/view/adminhtml/js/validate_form.js b/app/code/Magento/Webhook/view/adminhtml/js/validate_form.js deleted file mode 100644 index c9ed76e087d5b..0000000000000 --- a/app/code/Magento/Webhook/view/adminhtml/js/validate_form.js +++ /dev/null @@ -1,30 +0,0 @@ -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License (AFL 3.0) - * that is bundled with this package in the file LICENSE_AFL.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/afl-3.0.php - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@magentocommerce.com so we can send you a copy immediately. - * - * DISCLAIMER - * - * Do not edit or add to this file if you wish to upgrade Magento to newer - * versions in the future. If you wish to customize Magento for your - * needs please refer to http://www.magentocommerce.com for more information. - * - * @category Magento - * @package Magento_Webhook - * @copyright Copyright (c) 2013 X.commerce, Inc. (http://www.magentocommerce.com) - * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) - */ -$j = jQuery.noConflict(); -$j(document).ready(function(){ - jQuery.validator.addClassRules("required-entry", { - required: true - }); -}) \ No newline at end of file diff --git a/app/code/Magento/Webhook/view/adminhtml/js/webhook.js b/app/code/Magento/Webhook/view/adminhtml/js/webhook.js deleted file mode 100644 index 8e18d9a6431ee..0000000000000 --- a/app/code/Magento/Webhook/view/adminhtml/js/webhook.js +++ /dev/null @@ -1,106 +0,0 @@ -/** - * Magento - * - * NOTICE OF LICENSE - * - * This source file is subject to the Academic Free License (AFL 3.0) - * that is bundled with this package in the file LICENSE_AFL.txt. - * It is also available through the world-wide-web at this URL: - * http://opensource.org/licenses/afl-3.0.php - * If you did not receive a copy of the license and are unable to - * obtain it through the world-wide-web, please send an email - * to license@magentocommerce.com so we can send you a copy immediately. - * - * DISCLAIMER - * - * Do not edit or add to this file if you wish to upgrade Magento to newer - * versions in the future. If you wish to customize Magento for your - * needs please refer to http://www.magentocommerce.com for more information. - * - * @category Magento - * @package Magento_Webhook - * @copyright Copyright (c) 2013 X.commerce, Inc. (http://www.magentocommerce.com) - * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) - */ -function activateSubscription(url) -{ - $j = jQuery.noConflict(); - var activateSubscriptionDiv = $j('#activate-subscription'); - if (undefined === activateSubscriptionDiv[0]) { - activateSubscriptionDiv = $j('

    '); - $j('body').append(activateSubscriptionDiv); - } - activateSubscriptionDiv.html(''); - - activateSubscriptionDiv.append('